![游戏设计与开发:Unity实战完全自学教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/6/43738006/b_43738006.jpg)
2.4.1 场景的搭建及相关设置
首先对新建项目及场景搭建进行介绍,读者可以通过一些基本操作对使用Unity开发游戏有一些基本认识。具体操作步骤如下。
(1)打开Unity Hub,单击“新建”按钮,打开“创建新项目”窗口,新建并打开一个Unity 2D项目,如图2-5所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_35_1.jpg?sign=1738894047-9GYA6bcZpmXO6UNIH0EqhZBQPPyRVbWJ-0-da45222d684df05f718fa905f3299991)
图2-5
(2)在工程窗口(Project)中单击鼠标右键,在弹出的右键菜单中执行“Create->Folder”命令,新建文件夹“Scenes”和“Scripts”。
(3)导入资源文件,将该游戏所要用到的资源复制到前文新建项目的“Assets”文件夹中,资源文件及其路径详情参见2.2.2节的相关内容。
(4)创建关卡场景。在工程窗口(Project)中单击鼠标右键,在弹出的右键菜单中执行“Create->Scene”命令,新建场景“RunGame”,双击打开RunGame场景。当前项目只使用了这一个场景文件。
(5)创建摄像机脚本。在工程窗口(Project)中单击鼠标右键,在弹出的右键菜单中执行“Create->C#Script”命令,新建一个脚本,将其命名为“CameraFollow”,并将其拖动到主摄像机(Main Camera)的游戏物体上。
(6)创建天花板的父物体。在层级窗口(Hierarchy)中单击鼠标右键,在弹出的右键菜单中执行“生成空游戏物体(Create Empty)”命令,将其命名为“Ceiling”,用于存放游戏关卡的天花板。将游戏物体Ceiling的层(Layer)设为“ceiling”,如图2-6所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_35_2.jpg?sign=1738894047-NYF77JBW3dGYd27hK7pQXrBw9cZZ1TsE-0-dfe059ed9f7a75dc5b2b004cf9e3b4be)
图2-6
(7)创建天花板。在游戏物体 Ceiling 下单击鼠标右键,在弹出的右键菜单中执行“2D Object->Sprite”命令,新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件(Sprite Renderer)的参数Sprite设为3.png(见表2-1),并且在检视窗口(Inspector)中单击“Add Component”按钮,添加2D碰撞体组件(Box Collider 2D),将它的层(Layer)设为“ceiling”。选中该游戏物体,按“Ctrl+D”组合键复制若干个游戏物体,将这些游戏物体在场景中进行布局,作为场景天花板,效果如图2-7所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_36_1.jpg?sign=1738894047-0oeX1V8boAQFPONCYVhAap20jHplzGuS-0-46165602033b9a67c47532a6a263504f)
图2-7
(8)创建地板。新建一个空游戏物体,将其命名为“Ground”,并将它的层设为“ground”,用于存放所有的地板。在Ground游戏物体下新建一个2D图片精灵子物体,将该游戏物体的精灵贴图组件的参数Sprite设为3.png(见表2-1),添加2D碰撞体组件,并将它的层设为“ground”。复制若干个该游戏物体,将这些游戏物体在场景中进行布局,作为场景地板,效果如图2-8所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_36_2.jpg?sign=1738894047-GIza1LXUKyigKvrDhiNwLtKH5J3EnaII-0-b21036702928eab6d386c8a458a39948)
图2-8
(9)创建活动地板脚本。新建一个空游戏物体,将其命名为“MoveGround”,用于存放所有的移动地板。由于三个移动地板的活动逻辑不同,所以需要新建三个空白脚本,分别将其命名为“GroundMove”、“Ground7LeftMove”和“Ground8LeftMove”,用于控制不同种类的移动地板。
(10)创建活动地板。在 MoveGround 下新建一个 2D 图片精灵游戏物体,作为活动地板,并设为 ground 层。将该游戏物体的精灵贴图组件的参数 Sprite 设为 10.png(见表 2-1),参数Color设为灰色半透明,再添加2D碰撞体组件,如图2-9所示。
(11)装饰活动地板。单击活动地板,新建两个2D图片精灵游戏物体,用于装饰活动地板,如图2-10所示。将一个2D图片精灵游戏物体调整至比活动地板小一点,再将另一个2D图片精灵游戏物体调整成一条粗线,并设置不同的颜色。
(12)设置活动地板。将步骤(10)中新建的活动地板复制两份,并将其分别放到合适的位置,三个活动地板的位置如图2-11所示。为这三个活动地板分别挂载三个不同的地板活动脚本,按图从左到右分别是GroundMove.cs、Ground7LeftMove.cs和Ground8LeftMove.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_37_1.jpg?sign=1738894047-Qpnh1mxR8MirnJ3XSGYRU72HPaTZrxdH-0-ea777ad1467e2889078fab3277e0be22)
图2-9
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_37_2.jpg?sign=1738894047-3QfGkBZ5SsbREkh6bSh8Am4C9ASA8izu-0-487f877b0353c021727862277bb95c9c)
图2-10
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_37_3.jpg?sign=1738894047-BKvdViS6OPlNnjdZuhU5GWNMyn3yujWM-0-66bf5c9a5cf7fc11eaf597fafb34905b)
图2-11
(13)创建障碍物—冰墙。新建一个2D图片精灵游戏物体,将其命名为“RainbowWall”,作为冰墙,并添加2D碰撞体组件,将冰墙调整至合适的大小,如图2-12所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_37_4.jpg?sign=1738894047-tLlI11pTJf7JsgHYvC0hinAz277U2O8o-0-7c3715cd5668daa425fad7a700baac9b)
图2-12
(14)创建陷阱地板。新建一个空游戏物体,将其命名为“Fireground”,用于存放游戏关卡中的陷阱地板。在Fireground中添加一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为3.png(见表2-1),将它的层设为“fireground”,为该游戏物体添加2D碰撞体组件,并调整到如图2-13所示的位置和大小。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_38_1.jpg?sign=1738894047-p0UYS7AzFpyHhiab2tVr9oCWvFiE2DiU-0-9705359a13f698d8939f82985c4ac3c6)
图2-13
(15)创建陷阱地板特效的父物体。新建一个空游戏物体,将其命名为“Special effect”,用于存放陷阱地板的粒子特效游戏物体。为该游戏物体添加 2D 碰撞体组件,并将其调整到与Fireground同样的位置和大小,将该游戏物体的标签(tag)设为“fire”。
(16)添加陷阱特效。将陷阱特效预制体Flames_08.prefab(见表2-2)拖动到游戏物体Special effect下,作为其子物体,复制若干份该预制体,用这些预制体装饰陷阱地板。
(17)创建火焰特效的父物体。新建一个空游戏物体,将其命名为“fire”,用于存放关卡中所有火焰粒子特效游戏物体。将该游戏物体的标签设为“fire”。
(18)添加火焰特效。将特效预制体fx_fire_m.prefab(见表2-2)拖动到游戏物体fire下,作为Special effect的子物体,为该游戏物体添加2D碰撞体组件,并复制若干份该预制体,将这些预制体放到如图2-14所示的位置。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_38_2.jpg?sign=1738894047-3MNSMoxcsFNKSivuA19F0LCyiXnCl1P8-0-a020356865f4d5edc21fe3fd7b35fbd0)
图2-14
(19)创建天花板下落陷阱。新建一个空脚本“Firedown”,分别给图2-14右边两个在天花板下的火焰粒子特效游戏物体添加脚本组件Firedown,用于控制火焰往下掉落这一行为。
(20)创建背景物体。新建一个空游戏物体,将其命名为“Background”。新建一个空脚本,将其命名为“BackgroundFollow”。
(21)添加背景图片。在游戏物体Background下新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为9.png(见表2-1),参数Draw Mode设为Tiled平铺模式,参数Size的宽(Width)设为500、高(Height)设为40,并为该游戏物体添加BackgroundFollow脚本。背景图片精灵游戏物体设置如图2-15所示。
(22)创建红心道具。新建一个空游戏物体,将其命名为“Coin”,用于存放所有的红心道具。新建一个空脚本,将其命名为“Coin”,用于编辑红心道具的脚本逻辑。将Coin的标签(Tag)设为“coin”,将它的层(Layer)也设为“coin”,如图2-16所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_39_1.jpg?sign=1738894047-UgrGGILcMKRIE7Gu5KhTeX1z0FSHjuct-0-c625d6447405528c9cffc453b6436582)
图2-15
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_39_2.jpg?sign=1738894047-iNvTYtkAwYaeGbWVjf5dJZEJjaDIcVZX-0-ed7d655ca8470499bbb1c44adcfeac58)
图2-16
(23)设置红心道具的图片。在Coin下新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为6.png(见表2-1),为该游戏物体添加2D碰撞体组件和Coin脚本组件,并将该游戏物体的标签设为“coin”,将它的层设为“coin”。
(24)复制更多红心道具。将步骤(22)新建的游戏物体复制若干,并将其布局到需要的位置,如图2-17所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_39_3.jpg?sign=1738894047-CPt9J8PetcFyW4bng9ZMSA7klZUPNLsX-0-4944e482fa9259d89498b57c8aa4c7f6)
图2-17
(25)创建角色。新建一个2D图片精灵游戏物体,将其命名为“Player”,它是玩家控制的角色。新建一个空脚本,将其命名为“PlayerMove”,并将其挂载到游戏物体Player上。
(26)设置角色。将游戏物体Player的标签设为“Player”,将它的层设为“Player”,精灵贴图组件的参数Sprite设为1.png(见表2-1),参数Order in Layer设为1,并添加2D刚体(Rigidbody2D)和2D碰撞体组件。将游戏物体Player放到关卡场景的左侧,角色在场景中的位置如图2-18所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_40_1.jpg?sign=1738894047-63SvB8UHnB3sF0m7FsReOBLEA1saBHKv-0-bcdc52e0b2457987ed5d0ba1868910c9)
图2-18
(27)创建冰人道具。新建一个2D 图片精灵游戏物体,将其命名为“RainbowPlayer”,该游戏物体是火人变冰人的游戏道具。新建一个空脚本,将其命名为“RainbowMove”,并将其挂载到游戏物体RainbowPlayer上。
(28)设置冰人道具。将游戏物体RainbowPlayer的精灵贴图组件的参数Sprite设为2.png,并添加2D碰撞体组件,勾选2D碰撞体组件上的“Is Trigger”复选框。调整游戏物体RainbowPlayer的位置,将该游戏物体放置于关卡中段的天花板的上方,冰人道具的位置如图2-19所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_40_2.jpg?sign=1738894047-EY9a4RGlxNH2v5EkHGrydkW06mVDlimi-0-1a484d0aae5b94b1c683c8a9ee281b0d)
图2-19
(29)创建磁吸道具。新建一个空游戏物体,将其命名为“MagnetBox”。新建一个空脚本,将其命名为“MagnetFollow”。
(30)设置磁吸道具的组件。为游戏物体 MagnetBox 添加 2D 多边形碰撞体组件(Polygon Collider 2D)、2D刚体组件和MagnetFollow脚本组件,单击2D多边形碰撞体组件上的“编辑碰撞体(Edit Collider)”按钮,将多边形碰撞体的碰撞框调整为如图2-20所示的梯形形状,图中方框的位置是磁吸道具的贴图位置。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_41_1.jpg?sign=1738894047-cdZ0TIweGr3Uj1cIXF41f82iCz12f7AI-0-99f764894740210ab1c1f9e09a3324cd)
图2-20
(31)设置磁吸道具贴图。在游戏物体MagnetBox下新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为5.png(见表2-1),并添加2D碰撞体组件。新建脚本“Magnet”,将其挂载到该游戏物体上。将该游戏物体放置于如图 2-20 所示的红框位置,磁吸道具的结构如图2-21所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_41_2.jpg?sign=1738894047-VJNIwAn9jdowA0qsnwONw2B7qcoiqel2-0-722630f2a3cda2e0beeb587eb4ad6d7c)
图2-21
(32)创建检测掉落的碰撞体。新建一个空游戏物体,将其命名为“Failground”,用于判断角色是否掉落到地下。需要在该游戏物体上添加 2D 碰撞体组件,并将碰撞体调整大小和位置,使碰撞体覆盖整个场景的地底范围,如图2-22所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_41_3.jpg?sign=1738894047-BSEwivbzZd9wYnkhgx0Ymh2ad3T7EvHE-0-8fb3f2d115aade93643bef9acc1be284)
图2-22
(33)创建过关的门。新建一个2D图片精灵游戏物体,将其命名为“door”。将该游戏物体作为关卡出口。新建一个2D碰撞体组件,将其放置于场景最右边。考虑到游戏效果,需要将碰撞体和贴图进行一定偏移,让碰撞体只包住门的右半边即可。通关的门和碰撞体如图2-23所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_42_1.jpg?sign=1738894047-gFhjJGNAHyRtCYqjWdSBkOzI6dF653Qd-0-156f1f8857869d19b891795d0aa6fbf3)
图2-23
(34)创建 UI 画布。接下来,新建项目中所需要的 UI 游戏物体。在层级窗口(Hierarchy)中单击鼠标右键,在弹出的右键菜单中执行“UI->Canvas”命令,新建一个画布,同时Unity会自动生成事件系统(Event System)。在使用UGUI时这两个游戏物体是必需的,该游戏中的UI只需要一个画布。
(35)创建红心数量UI。在画布下新建一个空游戏物体,将其命名为“CoinPanel”,用于存放显示玩家收集到的红心数量的UI。
(36)完善红心数量 UI。在层级窗口(Hierarchy)中选中游戏物体 CoinPanel,然后进行如下操作:单击鼠标右键,在弹出的右键菜单中执行“UI->Image”命令,新建一个UI图片,将其命名为“allcoin”。将allcoin上的Image组件的参数Source Image设为6.png(见表2-1)。单击鼠标右键,在弹出的右键菜单中执行“UI->Text”命令,新建一个UI Text游戏物体,将其命名为“Text1”,将游戏物体Text1中Text组件的内容设为“×”。再新建一个UI Text游戏物体,将其命名为“coincount”。将这三个游戏物体放到游戏界面的左上角,红心数量UI的排列效果如图2-24所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_42_2.jpg?sign=1738894047-2esh9K7apXuJDesObUWZnrtA24DDtlLv-0-7eef32293ab880cd31fac045ffac7062)
图2-24
(37)创建磁铁图标和其他图标。在画布下新建一个空游戏物体,将其命名为“MagnetHp”,用于存放和显示与磁吸效果剩余时间的进度条相关的UI游戏物体。
(38)创建进度条UI。在MagnetHp下新建一个UI图片,将其命名为“Background”。将其调整成长条状,再将该UI图片复制一份,并将其命名为“Hp”。将Hp上的Image组件的参数Color设为绿色,将Hp上的Rect Transform组件的参数Pivot设为(0,1),将游戏物体MagnetHp的锚点设置如图2-25所示。游戏物体MagnetHp的最终效果如图2-26所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_43_1.jpg?sign=1738894047-IWixyVyepTbCnfB8re2DjpHkpGNsOKDu-0-47aeab49087d499306f24c50a2734600)
图2-25
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_43_2.jpg?sign=1738894047-9fgFEBCsWyNdDLmGGDx73LmLKWIIpJi4-0-37b98c6c471f6fb59e5e0c801d9083ec)
图2-26
(39)调整进度条位置。将游戏物体 MagnetHp 调整到画面的左边偏下的位置,使磁吸时间条在磁吸状态下放置于角色头顶。游戏物体MagnetHp的坐标如图2-27所示,可以作为参考。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_43_3.jpg?sign=1738894047-aBonB9WIWh3Y9TPGdc14XH5Gip5mbNUY-0-25a7a5490606e7346eb3aad7b04bd626)
图2-27
(40)创建遮挡背景图。在画布下新建一个 UI 图片,将其命名为“black”,当游戏结束时(角色死亡或者通关都会结束游戏),显示该 UI,用于遮挡整个场景,所以需要将该 UI 图片设为横纵拉伸模式。单击检视窗口(Inspector)中的Rect Transform左上角的大方格,按住“Alt”键并选择最后一行的最后一个按钮,将该UI图片的对齐方式设为横纵拉伸模式,如图2-28所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_44_1.jpg?sign=1738894047-Zc01Vb4Jlm6iJZzg0iJnZfSPa4GjkSnD-0-a653303e6e8892c804a8adaf636ccffc)
图2-28
将游戏物体black上的Image组件的参数Color设为半透明黑色,如图2-29所示。这样当游戏暂停时就有一个半透明幕布遮挡的效果。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_44_2.jpg?sign=1738894047-ZZnfLsxSQBkOx7gPLlhKXzxHM8oH1ilv-0-0be444ce6acd7ace2d410d1e1ba3bb06)
图2-29
(41)创建“游戏结束”窗口。在画布下新建一个UI图片,将其命名为“FailPanel”,这是游戏失败时显示“游戏结束”的UI。将FailPanel的Image组件的参数Source Image设为17.png (见表2-1)。新建脚本“FailPanel”,并将其挂载到FailPanel上。将FailPanel放置于游戏界面中央,其位置和脚本组件设置如图2-30所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_45_1.jpg?sign=1738894047-6DyW3w00BE7H6Dt80ddugAXOrdvnYm8D-0-a3f2b2458d343b0aece2a3f93b4e1d89)
图2-30
(42)完善“游戏结束”窗口。在FailPanel下新建一个UI图片,将UI图片上Image组件的参数Source Image设为18.png(见表2-1)。在FailPanel下单击鼠标右键,在弹出的右键菜单中执行“UI->Button”命令,新建一个按钮,将其命名为“beginbtn”,将“beginbtn”按钮下的游戏物体Text删除,将“beginbtn”按钮的Image组件的参数Source Image设为19.png(见表2-1)。“游戏结束”窗口的效果如图2-31所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_45_2.jpg?sign=1738894047-4sv1gtoivRdLSp2JTozr2viKifLGq3oB-0-b9d10e8eb656822eb20a72464c8683ad)
图2-31
(43)创建“游戏通关”窗口。在画布下新建一个UI图片,将其命名为“SuccessPanel”,游戏通关时将会显示该窗口,与FailPanel类似。将SuccessPanel的Image组件的参数Source Image设为17.png(见表2-1)。新建脚本,将其命名为“SuccessPanel”,并将其挂载到SuccessPanel上。将SuccessPanel放置于游戏界面中央,其位置和脚本组件设置如图2-32所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_46_1.jpg?sign=1738894047-ZbknGaRNF6tWvNg0Kjf1ksz4cRNhm5Ux-0-7f7746490d2d9c5c83e1dd9fdf366324)
图2-32
(44)完善“游戏通关”窗口。在SuccessPanel下新建一个按钮,将该按钮下的游戏物体Text删除,并且将该按钮的Image组件上的参数Source Image设为20.png(见表2-1)。“游戏通关”窗口的效果如图2-33所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_46_2.jpg?sign=1738894047-J33EBqSKKS4bNPNZyD2KM4e0xfSv83bg-0-f5c46ed1f222264a043ce3068c9f1cf5)
图2-33
(45)至此,完成《冰火人》游戏的场景搭建与设置。
注意:本节中的关卡设计仅供参考,读者在练习时可以按照自己的喜好创建一个更简单的小型关卡,以便调整和测试。