前言
这个项目的教程文章已经断更三个月之久,现向学习该项目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;//按键指南UI
public GameObject fire;//壁炉火焰
public GameObject fire2;//灶台火焰
public GameObject tv;//电视机播放板
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void 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
完成之后就可以控制了。
结语
本节的内容已完成,下一节是最后一部分:菜单界面的现实。
如果在本节内容中遇到问题可以评论区留言,我看到之后会给大家回复解决!下期见,拜拜!