unity项目《样板间展示》开发:逻辑代码实现
- 前言
- 漫游逻辑实现
- UI功能逻辑实现
- 静态光线问题解决
- 结语
前言
这个项目的教程文章已经断更三个月之久,现向学习该项目dome的小伙伴们致歉。
断更原因嘛,就是实习工作,后续我也会发布相关的文章,做一个分享。
话不多说,直接开始教程吧!
漫游逻辑实现
断更时间长了,竟不知从何讲起,又费力仔细阅读了前面的两篇文章,好在对项目的了解还是比较熟悉,给大家做个反面教材,大家做事情一定坚持做完!
前面的两个章节我们把最基础的东西都做完了,接下里就是逻辑的实现,首先需要做的就是模型的漫游逻辑。由于我们导入的房屋模型中,其自带漫游代码,所以我们只需要进行简单的设置。
打开之后发现全是英文,可能会说英语不好怎么办,问题不大,我们直接科技加持——上翻译。看得懂英语更好,看不懂也不要紧,我会直接带大家一步一步做。
-
第一步:
选择Edit->Project Settings…,打开Project Settings
打开选择Tags and Layers,创建一个名为InteractRaycast
的图层,如图所示:
完成之后关闭即可,一定要注意命名一致!这里是用来给家具进行交互的。 -
第二步:
选中场景中的PlayerFPS,然后将其Tag标签设置为Player
-
第三步:
打开PlayerFPS中的Camera,将其Tag标签设置为MainCamera
其中的Camera (1)是做小地图用的。
-
第四步:
🟠注意: 从这一步开始,就不要(不建议)做了,做光线烘焙的话,场景中物体的光线会变成静态的光照,不受后期控制,只受烘焙光线的控制。这里是将模型素材文档的内容全部讲解,但是! 如果你按照我说的没有进行下面的操作,并完成这篇文章的内容之后发现房屋中的灯光不受控制之后,再过来操作下面的步骤以及静态光线问题解决标题中的步骤,以便解决静态光照问题。标准做法是继续操作下面的步骤以及静态光线问题解决步骤,这里大家根据自己的想法进行选择,如果懒得动手就到此结束,直接操作下一标题的内容;如果想要标准的,就操作下面的步骤以及静态光线问题解决步骤。
选择Window->Rendering->Lihgting
在打开的窗口中选择Environment,点击Generate Lighting
这里需要等待一会,场景出现变化也不要紧张,烘焙的正常现象,下面就是烘焙完成后的
文档里最后一个步骤在这里项目没用到,其作用就是设置玩家自身的范围大小,这里就不进行阐述了。
完成以上步骤之后运行项目,此时就可以对场景中的家具进行交互了。
对了,记得修改提示词:
改完记得保存!
UI功能逻辑实现
创建一个脚本文件,然后将写入下面的代码,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class OpenDoor : MonoBehaviour
{public GameObject LivingRoomLighting;//客厅灯光public GameObject BedroomLighting;//卧室灯光public GameObject BathroomLighting;//浴室灯光public GameObject TableLamp;//床头灯public GameObject guideCanvas;//按键指南UIpublic GameObject fire;//壁炉火焰public GameObject fire2;//灶台火焰public GameObject tv;//电视机播放板// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//灯光控制OpenLight();//打开关闭按键指南if (Input.GetKeyDown("tab")){guideCanvas.SetActive(!guideCanvas.activeSelf);if (guideCanvas.activeSelf){Time.timeScale = 0;}else{Time.timeScale = 1;}}//灶火炉火if (Input.GetKeyDown("o")){fire.SetActive(!fire.activeSelf);}if (Input.GetKeyDown("p")){fire2.SetActive(!fire2.activeSelf);}//电视if (Input.GetKeyDown("t")){tv.SetActive(!tv.activeSelf);}//退出if (Input.GetKeyDown("q")){SceneManager.LoadScene(0);}}private void OpenLight(){if (Input.GetKeyDown("1")){LivingRoomLighting.SetActive(!LivingRoomLighting.activeSelf);}if (Input.GetKeyDown("2")){BedroomLighting.SetActive(!BedroomLighting.activeSelf);}if (Input.GetKeyDown("3")){BathroomLighting.SetActive(!BathroomLighting.activeSelf);}if (Input.GetKeyDown("4")){TableLamp.SetActive(!TableLamp.activeSelf);}}}
完后之后挂载脚本,并赋值脚本变量
到这里,基本逻辑就已经完成了,可以对灯光、火焰、电视机视频播放进行控制了。
静态光线问题解决
选中场景模型中自带的所有点光源,然后将其Light的Mode值改为Realtime
然后打开Lighting,选择Environment,点击Generate Lighting
完成之后就可以控制了。
结语
本节的内容已完成,下一节是最后一部分:菜单界面的现实。
如果在本节内容中遇到问题可以评论区留言,我看到之后会给大家回复解决!下期见,拜拜!