1. 准星更改功能
将可以互动的物品上都设置一个 Object 的标签,这是为了在准星对焦到可互动物体上,可以更改准星图片,来提示玩家可以互动。


使用射线检测,从主摄像机中间发射一条射线,距离为 5,当射线打中带有 Object 标签的物体时,图片修改。
2 物品管理功能
由于本项目很小,物品很少,并不需要搭建框架,所以为了方便,采用集中列举方法。
可以互动的物体有:四个密码,可开关的门,一个需要检视的相框,一把钥匙
所以我们可以在射线检测的基础上再添加判断,不过这次需要更改物体的名字来做二次判断。

此方法的好处在于非常快捷,适合这样小项目,如果物品很多以及需要扩展,则此方法不适用,需要重新搭建物品管理框架。
3. 物品检视功能
基于利用 RenderTexture 在 UI 上显示、旋转模型,教程可以参考Unity 教程:利用 RenderTexture 在 UI 上显示、旋转模型_哔哩哔哩_bilibili
创建一个渲染器纹理和新摄像机以及一个新面板。摄像机的目标显示可以改为其他通道,防止与主摄像机混乱使用,同时将目标纹理设置成刚刚创建的渲染器纹理,这样摄像机所捕捉的画面将会在纹理上呈现。


之后我们在创建的面板上面新增一个原始图像,注意是原始图像,相比于普通图像,原始图像实现的功能更多,普通图像的优点就是较为方便。随后可以把渲染器纹理拖入使用。要注意的是,此面板的父级画布需要显示在主摄像机上,这样玩家才能看到,默认通道显示为 Display1。

最终效果如下

4. 门的交互
我们在交互门的时候,门只有开 关两个状态,所以我们需要将他的动画机设置成相反

同时我们加入门的开关音效,要注意的是需要把 DoorController 添加在门身上,否则帧事件触发不了。

音效触发这里使用的是动画的帧事件

5. 钥匙的交互
在拿到钥匙之后才可以开门,所以我们需要加一个 bool 值来判断是否拿到钥匙

6. 收音机的交互
第一次左键,收音机开始播放,再次左键就会暂停,右键则是关闭收音机。播放需要 AudioSource 组件,我们将它添加在收音机之后。可以在脚本里面设置。

同时在物品交互里添加对收音机右键的功能

7. 密码的交互
将密码以贴花的方式放在场景中,一共有四个,根据密码名字的不同,来显示不同的文字,比如:我应该找到了第一个密码


8. 手电筒的交互
手电筒在桌子上,玩家拿取之后将会销毁。随后玩家身上的手电筒被开启。就实现了拿取手电筒的功能


玩家身上的脚本,通过代码的控制,按 E 可以切换手电筒的开关。

9. 文字显示功能
为了方便以及扩展,我们使用 DoTween 插件实现文字显示。DOTween 是一个 快速 、 高效 、 完全类型安全的 Unity 面向对象的 动画引擎 ,针对 C# 用户进行了优化, 免费 和开源 ,具有 大量高级功能。官网链接:DOTween(HOTween v2)
文字显示分为两个部分,一是收音机播放是的字幕,二是找到密码和其他东西时的正常提示。
播放字幕使用的是 DoTween 的队列功能,他可以将动画排序,一条条播放。队列也有播放,暂停,停止的功能,也很好的满足收音机的需求。


正常提示也是队列,不同的是他有一个用于接收文字的参数,其他地方可以访问来实现提示功能

在物品管理中的使用

10. 混音器的控制功能
我们将声音分为三个部分:主音量,背景音乐,音效。所以我们要用到混音器

这里添加了三个组,Master(主音量),Music(音乐),SFX(音效)。要注意的是 Master 作为父级,且另外两个等级一致。然后需要将所有的音频组件的输出都设置成相对应的组。

随后 AudioSource 播放音频,混音器将会看到效果,混音器不仅可以集中管理音频,也可以对他们添加后处理,例如高通低通等,但此项目并不需要这些功能。

我们集中了所有音频之后,需要一个设置界面来调整音频大小,新建一个面板,调整好三个音量设置。接下来编写滑动条的脚本。


我们需要添加一个混音器,然后编写三个音量管理的方法,这里的参数 v 将会从滑动条里传入。将脚本给与滑动条,我们在滑动条组件上设置好数值区间后,添加一个值改变时的事件。

这样滑动条就可以控制混音器来调整声音大小。
9. 通关谢幕
我们在最终出口放置一个触发器


当玩家在触发区域时,打开通关界面,并且无法移动,鼠标更改为显示。
这里依然是使用队列动画,随后通关界面将渐渐显示,文字显示,文字显示完毕之后,最后的退出按钮出现。

至此,流程结束