Unity3D教程:实现房产项目中的材质动态切换

在许多典型的房产展示项目当中,经常需要动态地实现例如墙纸、地板等材质的更换以获得不同的展示效果,下面将通过一个简单的教程介绍实现这一功能的关键技术。

首先需要场景中创建一个简易的样品房,样品房里面有一个地面和两面相互垂直的墙壁。当选中样品房中的墙壁或地面,控制台就会输出选中对象的名称。场景中还提供四个按钮,包括“墙纸1”、"墙纸2"、“地板1”还有“地板2”,当我们鼠标选中地板时,可以点击“地板1”或“地板2”动态地更换地板材质,同理当我们鼠标选中墙壁时我们可以点击“墙纸1”、"墙纸2"动态地分别更换两面墙壁的墙纸。如下图所示:

Unity3D教程:实现房产项目中的材质动态切换

第一步先在场景中创建上面描述的样品房,其中包括两面墙壁和一个地板,之后还需要把摄像机调整到合适的位置并加入合理的方向光源。

Unity3D教程:实现房产项目中的材质动态切换

接着,需要把相关的图片素材导入工程,把所有墙纸和地板的素材放到一个命名为“image”的文件夹里面。然后创建对应的四个材质,其命名分别为floor01、floor02、wall01和wall02,。最后,我们需要创建一个命名为Material的文件夹并在里面创建一个js脚本。

Unity3D教程:实现房产项目中的材质动态切换

在场景中,先为样品房中的对象赋予一个默认的材质使场景初始时不会显得太单调。

Unity3D教程:实现房产项目中的材质动态切换

在脚本中需要先声明若干变量,其中包括一个GameObject类型的当前对象,还有GameObject类型的_wall01、_wall02和_floor分别对应样品房中的两面墙壁和地板。

最关键的部分是需要声明Material类型的_wall01Material、_wall02Material、_floor01Material和_floor02Material分别对应两种墙纸和两种地板的材质。

public var curObject:GameObject = null;
private var _wall01:GameObject = null;
private var _wall02:GameObject = null;
private var _floor:GameObject = null;
public var _wall01Material:Material = null;
public var _wall02Material:Material = null;
public var _floor01Material:Material = null;
public var _floor02Material:Material = null;
function Start()
{
_wall01 = GameObject.Find("wall01");
_wall02 = GameObject.Find("wall02");
_floor = GameObject.Find("floor");
}

先把脚本文件拖到场景的摄像机上,点击摄像机查看其属性,如图右下角红色区域所示。

Unity3D教程:实现房产项目中的材质动态切换

脚本属性中有以下几项:_wall01Material、_wall02Material、_floor01Material和_floor02Material,需要为这些属性指定相应的材质。

Unity3D教程:实现房产项目中的材质动态切换

场景就基本搭建好,最后需要做的就是编写具体的脚本,下面为完整代码。

#pragma strict
public var curObject:GameObject = null;
private var _wall01:GameObject = null;
private var _wall02:GameObject = null;
private var _floor:GameObject = null;
public var _wall01Material:Material = null;
public var _wall02Material:Material = null;
public var _floor01Material:Material = null;
public var _floor02Material:Material = null;
function Start()
{
_wall01 = GameObject.Find("wall01");
_wall02 = GameObject.Find("wall02");
_floor = GameObject.Find("floor");
}
function Update()
{
// 获得当前选中的对象
if (Input.GetMouseButton (0))
{
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit))
{
Debug.DrawLine (ray.origin, hit.point);
//print(hit.collider.gameObject.name);curObject = hit.collider.gameObject;// 显示当前选中对象的名称
print(curObject);
}}
}
function OnGUI()
{
// 给选中的墙壁更换墙纸1
if(GUI.Button(Rect(10, 10, 100, 80), "墙纸1"))
{
if(curObject == null)
{
return;
}
// 用户选中的是墙壁
if(curObject == _wall01 || curObject == _wall02)
{
curObject.renderer.material = _wall01Material;
}
}
// 给选中的墙壁更换墙纸2
if(GUI.Button(Rect(120, 10, 100, 80), "墙纸2"))
{
if(curObject == null)
{
return;
}// 用户选中的是墙壁
if(curObject == _wall01 || curObject == _wall02)
{
curObject.renderer.material = _wall02Material;
}
}
// 给选中的地板更换地板1
if(GUI.Button(Rect(230, 10, 100, 80), "地板1"))
{
if(curObject == null)
{
return;
}// 用户选中的是地板
if(curObject == _floor)
{
curObject.renderer.material = _floor01Material;
}
}
// 给选中的地板更换地板2
if(GUI.Button(Rect(340, 10, 100, 80), "地板2"))
{
if(curObject == null)
{
return;
}// 用户选中的是地板
if(curObject == _floor)
{
curObject.renderer.material = _floor02Material;
}
}
}

下图为运行效果:

Unity3D教程:实现房产项目中的材质动态切换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25173.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

Lecture04~05 1、光栅化流程2、一丢丢显卡知识3、网格绘制组件(Mesh Render Component)4、材质5、资源池(Resource Pool)6、Cluster-Based Mesh Pipeline7、渲染 游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果…

重回游戏公平,向游戏打金工作室宣战!

什么是打金工作室? 近几年中国游戏市场持续发展,国产自研精品游戏层出不穷,游戏产业精品化、高质量健康发展趋势稳定。根据中国音数协游戏工委(GPC)与中国游戏产业研究院发布的《2022年中国游戏产业报告》显示&#xf…

GPT-4 API平替?性能媲美同时成本降低98%,斯坦福提出FrugalGPT,研究却惹争议

来自:机器之心 进NLP群—>加入NLP交流群 Game Changer 还是标题党? 随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公…

FrugalGPT

随着大型语言模型(LLM)的发展,人工智能正处于变革的爆发期。众所周知,LLM 可用于商业、科学和金融等应用,因而越来越多的公司(OpenAI、AI21、CoHere 等)都在提供 LLM 作为基础服务。虽然像 GPT-…

使用chatGPT生成一个带圆角的Container

我在项目中是想实现如图带圆角的Container,使用chatGPT生成步骤如下。 首先,生成渐变色的Container 生成的Container代码如下: Container(margin: EdgeInsets.fromLTRB(30, 0, 30, 0),height: 200.0,width: double.infinity,decoration: BoxD…

ChatGPT-4 如何改变 AI 市场及其对未来的影响?GPT版本及其差异

GPT-1 对比 GPT-2 对比 GPT-3。Chat GPT (Generative Pre-trained Transformer) 是一种高级自然语言处理模型,它使用机器学习算法来生成看起来像人类所写的文本。GPT模型的发展彻底改变了人工智能领域,特别是在语言处理领域。 多年来,已经发布了多个版本的 GPT 模型,每个版…

AI新风向标PaLm2?能否取代ChatGPT成为AI领域的老大

AI新风向标PaLm2? ​ 前几天Google发布了,PaLM2作为Google的下一代大型语言模型,它会取代ChatGPT成为更智能的AI工具吗? 关于PaLM2 ​ PaLM 2是Google的下一代大型语言模型,它建立在谷歌在机器学习和负责任的人工智能方面的突破…

部落冲突外挂

有人玩部落冲突吗,我这里有挂,加我qq3083413274,我给你。

最新最全文献下载网站:文献部落——一站式查找、下载文献!

来喽来喽! 小编带着新鲜出炉的“文献部落”来喽!同样是文献下载,凭啥只有他值得我推荐?还不是因为好用?!你以为只有SCI吗?太天真了!你往下看↓↓↓ 文献部落:http://459…

外文文献检索网站

1. Google scholar 网址: https://scholar.google.com.hk/?hlzh-CN 如今搜索论文的首选,可以在这里查看论文统计和引用参考文献,还能通过关注作者或者论文获得新论文更新提醒,以及利用自动化推荐来提供一个基本库 2. DBLP 网址…

COC部落冲突自动找鱼 python脚本

众所周知,最近COC被腾讯收购了,又整了一波活,花里胡哨的兵种都不认识了,这件事我不做评价吧。 图个新鲜感,高中几个哥们突然又玩起了部落冲突,打🐟一时爽,一直打🐟一直爽…

代码故事:汉德的救赎

我叫汉德(Handle),是一段程序代码,出生在日食之城埃地特(Editor)。 我诞生于伟大而荣耀的瑟维斯家族(Service),我们家族的格言是:“瑟维斯永不倒下。(Services never crash down.)”。 信仰 我们家族的信仰,哦,不对,应该是所有代码家族的信仰都是普瑞格兰姆神…

coc部落冲突脚本辅助工具,小曦coc,PHP随机数生成代码

什么是脚本? (1)脚本就是剧本 (2)脚本是普通的文本文件,是批处理文件 (3)脚本导演了一个序列事件的发生 (4)脚本让一个例行任务效率大幅提升 游戏脚本基本只…

英文文献调研方法综述

文章目录 1. 进行英文文献调研的理由2. 文献调研的纲要2.1. 文献调研的目的2.2. 文献调研的原则2.3. 文献调研的步骤 3. 常用的搜索平台及数据库3.1. 文献搜索平台3.1.1. Text Analyzer3.1.2. Web of Science3.1.3. Google Scholar3.1.4. CORE & DOAJ3.1.5. ProQuest 3.2. …

不用校园网如何下载论文文献|DOI号|文献免费下载

不用校园网如何下载论文文献|DOI号|文献免费下载 研究生人员在学校里避免不了要下载文献,有些文章,如果学校没有购买数据库,还要付费下载,挺鸡肋的,这里,我整理了一些自己收藏的网站…

jquery 中加入html代码,jquery实现动态添加html代码

先看下思导图,整体了解下,然后我们再来学习。 现在我们来看一下几段代码,然后根据这几段代码我们来学习一下如何正确的学习动态添加html。 一.html()方法 html函数的作用原理首先是移除目标元素内部的html代码,然后将新代码添加到目标元素。 第一段代码:function CommentB…

巨推荐!文献下载利器!6个网站可随时随地免费下载中文文献!

一、文献小镇 网址:http://www.sci-hub.ac.cn/ 文献小镇号称是中国版的SCI-HUB,界面同SCI-HUB一样简洁明了,可以采用URL,PMID/DOI等方式搜索下载文献。 下载英文文献,进入文献小镇首页,只需要在搜索框输入文章doi即可直接进入sci-hub的下载页面。当然,下方的学术网站也提…

chatgpt赋能python:Python如何下载电影?

Python如何下载电影? Python作为一种高级编程语言,通过其丰富的库和模块,可以轻松地完成各种任务,包括下载电影。以下是你需要知道的关键步骤。 了解电影下载网站 首先,你需要知道哪些网站提供电影下载。常见的电影…

chatgpt赋能Python-python_figsize默认大小

Python figsize默认大小:您需要知道的一切 Python作为一种流行的编程语言,被许多程序员用于数据科学、机器学习、Web开发等领域。在绘制图表时,matplotlib是Python最流行的绘图库之一。在使用matplotlib绘图时,默认情况下&#x…

chatgpt赋能python:Python画图坐标轴教程

Python画图坐标轴教程 Python是一种非常受欢迎的编程语言,可用于数据分析、机器学习、Web开发等领域。它也是一个强大的绘图工具。Python可以使用许多绘图库,如Matplotlib、Seaborn、Plotly等,来可视化数据和生成图形。 在这篇文章中&#x…