- 游戏设计与开发:Unity实战完全自学教程
- 马遥编著
- 2514字
- 2024-11-04 13:12:29
2.4.2 脚本编辑及相关设置
下面对《冰火人》游戏的所有功能的脚本编辑及相关设置进行介绍,读者可以看到游戏功能的具体实现方法。
《冰火人》游戏中所有需要挂载在游戏物体上的脚本已经在2.4.1节中介绍了,接下来会按照2.4.1节提到脚本的顺序逐一进行讲解。
(1)首先是摄像机跟随脚本。在该游戏中,摄像机需要一直和角色保持一定的角度和距离,才能使角色一直在游戏界面的某个位置,所以需要编辑摄像机的跟随逻辑。双击打开CameraFollow.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\CameraFollow.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_47_1.jpg?sign=1739017202-bFfruZqIuJCd5cJkPElV61dIweOJreyn-0-65c690eec24fb9dab72ad35521ea6ccd)
回到Unity编辑器,选中主摄像机,将游戏物体Player拖动到检视窗口(Inspector)的Camera Follow(Script)的参数Player旁边的输入框中,对所需要的参数进行赋值,如图2-34所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_47_2.jpg?sign=1739017202-9L0guaZUHl2qjhQiRWLco2y8MTWX353z-0-2e544db4cfae989212b8fd4daa4568f5)
图2-34
(2)该游戏有三个活动地板,每个活动地板的活动路径都不一样,第一个活动地板的活动路径为上下移动。双击打开GroundMove.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\GroundMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_47_3.jpg?sign=1739017202-yyrAfrlHX3rsb0szAjBoC1tZZTlSYHYv-0-4e34aaa6fdb3d5bfaea6caf8cf90ee79)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_48_1.jpg?sign=1739017202-prqcHF2Dso8VFNO0ir50kAUgv9L82Xhb-0-f3036a8c514ec55a006a5a66fc26cb55)
第二个活动地板为左右移动,双击打开Ground7LeftMove.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\Ground7LeftMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_48_2.jpg?sign=1739017202-PyGifhLM2mJ9MJTwksYp2tf4nuFu93qV-0-47e25b58d7068b077674587948b6e84e)
第三个活动地板为左右移动,但是它与第二个活动地板的移动范围不同。双击打开Ground8LeftMove.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\Ground8LeftMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_48_3.jpg?sign=1739017202-vNCJaC9E4VfmPT2e64SNJfEi60dcLkII-0-06bf430e503eae04ad7060e72fe8636e)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_49_1.jpg?sign=1739017202-bylfsubda0EMMCznOygfUWnZIohoEe5Y-0-ae97d2dc0e6f419687b23f11b03fd38a)
(3)场景中有几处陷阱。其中,一个陷阱是当角色靠近到一定距离时开始下落的,玩家需要及时调整角色前进的速度。双击打开Firedown.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\Firedown.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_49_2.jpg?sign=1739017202-gC8wdUEuQ3Z5HnMlztt3S9Tutl3rSTHz-0-e5a32ab58d65b818e2653ff7e591b8e7)
运行效果如图2-35所示,当角色前进到火焰下方时,火焰向下运动并攻击角色。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_50_1.jpg?sign=1739017202-5Djp7o0iP1XyrRJYmkrjIcqfN0RXijY5-0-0d0769f9bd84745e8198cd49c8ed59c9)
图2-35
在平台跳跃游戏中,为了使场景中的前、中、后景有明显的差异表现,有一种较简单的处理方法,就是使每个层次的贴图和镜头移动的相对速度不一致,从而模拟出一种有纵深感的效果。双击打开BackgroundFollow.cs脚本,编辑脚本,脚本代码如下。具体效果可以查看工程源文件。
代码位置:见源代码目录下Assets\Scripts\BackgroundFollow.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_50_2.jpg?sign=1739017202-P2uaOae3MTFp8nWzAqlY9Z7evWzLgQ7S-0-0fb15d9c731baf293a1aa5827c9d8eca)
(4)在该游戏中,红心是场景中散落的收集要素,和很多2D游戏里的金币一样,当角色靠近时会被收集。双击打开Coin.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\Coin.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_50_3.jpg?sign=1739017202-GLdsRSTFcoHgHpbrGg2tgHhwG4Ork4s8-0-c979183cac80533eb39cc4dade494bd1)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_51_1.jpg?sign=1739017202-ErdIQDkhw4ZTMPTyclqaR6g1MzHh0Kfx-0-e8dea4dab5601cfd291e0441148afa5d)
同样地,需要回到Unity对Coin脚本的参数进行赋值,如图2-36所示。将与字段同名的游戏物体分别拖动到对应的字段上,Is Run和U Icoin两个参数保留默认值即可。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_51_2.jpg?sign=1739017202-23yymllv0IxfYD98KHwcOj0JeEjKw1VG-0-cca3523f72add1cb2dc7a8adca7bc976)
图2-36
(5)角色的行为控制可以说是该游戏最复杂的脚本,其中包含了很多不同的功能方法。
首先是角色的移动控制,玩家控制的角色在游戏过程中(未通关之前)会一直向屏幕的右边前进,当玩家按下空格键时角色会向上跳起,当玩家按下“A”键时角色会缩小,当玩家按下“D”键时角色会变大。双击打开PlayerMove.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\PlayerMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_51_3.jpg?sign=1739017202-t2dHmgEBqdGq6LxQpz0qZCmaM0IcWAod-0-db1df98f84d3af76fa33e72b43f25e53)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_52_1.jpg?sign=1739017202-aR8FYbrfYwbqpdrt7ruCun8Wlq7x7dl0-0-e19df2977f0471c3eb294dd53556bc6e)
角色的碰撞盒需要检测一些触发事件,当角色碰到障碍物时游戏结束,当角色碰到关卡出口的碰撞体时游戏通关。双击打开PlayerMove.cs脚本,编辑脚本。在脚本中通过判断进入触发器的游戏物体的Tag区分不同的碰撞情况,关于不同游戏物体的Tag,在2.4.1节新建游戏物体时已经进行相关设置,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\PlayerMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_53_1.jpg?sign=1739017202-dWMZ5YzNWDKulXoN6cXqMF1LsQsPZLrz-0-3f643a2b4d4e774dce8ec51ebd9ccf65)
下面介绍角色和场景中的道具互动的相关逻辑。该游戏目前有收集红心用的道具、火人变冰人道具,以及磁吸红心效果的磁吸道具。双击打开PlayerMove.cs脚本,编辑脚本。在当前脚本对相关的游戏物体进行初始设置,可以在步骤(5)看到在红心控制的脚本中调用了当前脚本的Money字段和SetMoney方法,而磁吸时间条的显示则由脚本Magnet触发。具体脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\PlayerMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_53_2.jpg?sign=1739017202-95OCh9WJvt4kJT85JGv38BE38Q8kyO9Q-0-838c024a3c67ddd4f2e6b1082691e470)
回到Unity编辑器,对游戏物体Player的Player Move脚本组件的字段Money Text和HP进行拖动并赋值,将游戏物体拖动到对应的输入框中,方法参考步骤(1)。缩小角色,使其跳跃力变大来通过原本过不去的火焰并且收集到红心,如图2-37所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_54_1.jpg?sign=1739017202-qelSC0ot16tMqynEPBltpYpLX0pHD0tK-0-3c47aabb403d63ec598350c853c267e2)
图2-37
(6)在该游戏中有一个障碍物—冰墙,这个障碍物需要玩家拿到火人变冰人的道具,让火人变成冰人后就可以通过冰墙了。该道具在原地旋转,当玩家控制的角色踏入该道具的触发器内则可获得该道具,使角色变成冰人,场景中的冰墙变成可以通过的触发器状态,将该道具的游戏物体设为不显示,相当于删除道具,但实际上,场景中还存在该游戏物体。双击打开RainbowMove.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\RainbowMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_54_2.jpg?sign=1739017202-9N7I8TTYDSpmQWMXKRzTHeh18MWtzAHV-0-eedf7121f3bd3cbdc360d4180e586e27)
回到Unity,对游戏物体RainbowPlayer的RainbowMove(Script)上的参数进行拖动并赋值,方法参考步骤(1),将游戏物体和贴图拖动到对应的位置,对Tupian的参数进行设置,如图2-38所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_55_1.jpg?sign=1739017202-9ywqZJi2t2p55GNufYeuPdLDRQJ0Ln27-0-d6c920c6c125f850a29b6d287f600f95)
图2-38
(7)前文提到了当前游戏中一共有三个道具,已经介绍了其中两个道具的开发过程,接下来介绍磁吸道具的开发过程。2.4.1 节提到磁吸道具的相关脚本有两个,首先是磁吸道具的父物体的脚本 MagnetFollow.cs,该脚本控制的是梯形磁吸范围的游戏物体。双击打开 MagnetFollow.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\MagnetFollow.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_55_2.jpg?sign=1739017202-jGXq36ZQY9qmdF8B8mKsupQxcMgpbep4-0-b511e0128b6ef0f66d6cb86bc3355770)
回到Unity,选中游戏物体MagnetBox,在检视窗口(Inspector)中对Magnet Follow(Script)上的参数进行拖动并赋值,方法参考步骤(1),将游戏物体和贴图拖动到对应的位置,如图2-39所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_55_3.jpg?sign=1739017202-BivVoLntj7G9Ue4WlPjnKismjSp29qDr-0-e82dbaa0531e71412dad4a365377d889)
图2-39
(8)磁吸道具的另一个脚本用于控制子物体的行为,当角色进入该子物体的触发器后,整个磁吸道具会跟随角色,并且开始显示与磁吸效果剩余时间的时间条相关的UI。当磁吸效果剩余时间小于0时,则将相关游戏物体都销毁。双击打开Magnet.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\Magnet.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_56_1.jpg?sign=1739017202-qbdVMxnE1nivauyKErcY6dcXy0F3z1B5-0-efbb8e61b6871b1e5d82d86808d00919)
回到Unity,对游戏物体magnet的Magnet(Script)上的参数进行拖动并赋值,方法参考步骤(1),将游戏物体和贴图拖动到对应的位置,该道具在游戏中的使用效果如图2-40所示。(9)目前已经把游戏中大部分游戏物体的逻辑实现了,最后还有两个需要显示和隐藏的 UI组,一个是游戏失败时显示的UI,另一个是游戏通关时显示的UI。首先是游戏失败时显示的相关UI管理脚本,双击打开FailPanel.cs脚本,编辑脚本。该脚本采用单例模式,其他脚本可以通过调用这个单例来控制 FailPanel 和半透明幕布的显示和隐藏,该脚本还注册了“再试一次”按钮的监听事件。脚本代码如下。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_57_1.jpg?sign=1739017202-zAh3StC43U7LG8bWwvy5kkdYoPZbbkMs-0-98b1745a02d688f6233d61c818c31bbe)
图2-40
代码位置:见源代码目录下Assets\Scripts\FailPanel.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_57_2.jpg?sign=1739017202-706cwy4Mg9TnwBEFfx9ZYGezifwf9Fnt-0-24b3655519a9d3e3d5e98db094ead9b4)
(10)然后是游戏通关时显示的相关UI管理脚本,和FailPanel.cs一样作为单例,并且将“游戏通关”窗口隐藏,“继续”按钮需要像“再试一次”按钮一样注册一个跳转场景的方法,这里并没有制作下一个关卡,所以没有可以注册的方法。双击打开 SuccessPanel.cs脚本,编辑脚本,脚本代码如下。
代码位置:见源代码目录下Assets\Scripts\SuccessPanel.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_57_3.jpg?sign=1739017202-dqlDh2z4PQ43Z1EbCbSNVopsXQjCper5-0-f36b890ed8ca46a04cfda77a07d97d2a)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_58_1.jpg?sign=1739017202-uwWui9M8sheKvqXthk8fg0ecK5ZA2oVA-0-4654b7ec984b6fd80abf05b3357505fc)
(11)单击 Unity 上方的“播放”按钮运行游戏,可以查看游戏运行效果。至此,本章的实例制作过程介绍完毕。