2.4.1 场景的搭建及相关设置

首先对新建项目及场景搭建进行介绍,读者可以通过一些基本操作对使用Unity开发游戏有一些基本认识。具体操作步骤如下。

(1)打开Unity Hub,单击“新建”按钮,打开“创建新项目”窗口,新建并打开一个Unity 2D项目,如图2-5所示。

图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所示。

图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所示。

图2-7

(8)创建地板。新建一个空游戏物体,将其命名为“Ground”,并将它的层设为“ground”,用于存放所有的地板。在Ground游戏物体下新建一个2D图片精灵子物体,将该游戏物体的精灵贴图组件的参数Sprite设为3.png(见表2-1),添加2D碰撞体组件,并将它的层设为“ground”。复制若干个该游戏物体,将这些游戏物体在场景中进行布局,作为场景地板,效果如图2-8所示。

图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。

图2-9

图2-10

图2-11

(13)创建障碍物—冰墙。新建一个2D图片精灵游戏物体,将其命名为“RainbowWall”,作为冰墙,并添加2D碰撞体组件,将冰墙调整至合适的大小,如图2-12所示。

图2-12

(14)创建陷阱地板。新建一个空游戏物体,将其命名为“Fireground”,用于存放游戏关卡中的陷阱地板。在Fireground中添加一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为3.png(见表2-1),将它的层设为“fireground”,为该游戏物体添加2D碰撞体组件,并调整到如图2-13所示的位置和大小。

图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所示的位置。

图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所示。

图2-15

图2-16

(23)设置红心道具的图片。在Coin下新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为6.png(见表2-1),为该游戏物体添加2D碰撞体组件和Coin脚本组件,并将该游戏物体的标签设为“coin”,将它的层设为“coin”。

(24)复制更多红心道具。将步骤(22)新建的游戏物体复制若干,并将其布局到需要的位置,如图2-17所示。

图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所示。

图2-18

(27)创建冰人道具。新建一个2D 图片精灵游戏物体,将其命名为“RainbowPlayer”,该游戏物体是火人变冰人的游戏道具。新建一个空脚本,将其命名为“RainbowMove”,并将其挂载到游戏物体RainbowPlayer上。

(28)设置冰人道具。将游戏物体RainbowPlayer的精灵贴图组件的参数Sprite设为2.png,并添加2D碰撞体组件,勾选2D碰撞体组件上的“Is Trigger”复选框。调整游戏物体RainbowPlayer的位置,将该游戏物体放置于关卡中段的天花板的上方,冰人道具的位置如图2-19所示。

图2-19

(29)创建磁吸道具。新建一个空游戏物体,将其命名为“MagnetBox”。新建一个空脚本,将其命名为“MagnetFollow”。

(30)设置磁吸道具的组件。为游戏物体 MagnetBox 添加 2D 多边形碰撞体组件(Polygon Collider 2D)、2D刚体组件和MagnetFollow脚本组件,单击2D多边形碰撞体组件上的“编辑碰撞体(Edit Collider)”按钮,将多边形碰撞体的碰撞框调整为如图2-20所示的梯形形状,图中方框的位置是磁吸道具的贴图位置。

图2-20

(31)设置磁吸道具贴图。在游戏物体MagnetBox下新建一个2D图片精灵游戏物体,将该游戏物体的精灵贴图组件的参数Sprite设为5.png(见表2-1),并添加2D碰撞体组件。新建脚本“Magnet”,将其挂载到该游戏物体上。将该游戏物体放置于如图 2-20 所示的红框位置,磁吸道具的结构如图2-21所示。

图2-21

(32)创建检测掉落的碰撞体。新建一个空游戏物体,将其命名为“Failground”,用于判断角色是否掉落到地下。需要在该游戏物体上添加 2D 碰撞体组件,并将碰撞体调整大小和位置,使碰撞体覆盖整个场景的地底范围,如图2-22所示。

图2-22

(33)创建过关的门。新建一个2D图片精灵游戏物体,将其命名为“door”。将该游戏物体作为关卡出口。新建一个2D碰撞体组件,将其放置于场景最右边。考虑到游戏效果,需要将碰撞体和贴图进行一定偏移,让碰撞体只包住门的右半边即可。通关的门和碰撞体如图2-23所示。

图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所示。

图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所示。

图2-25

图2-26

(39)调整进度条位置。将游戏物体 MagnetHp 调整到画面的左边偏下的位置,使磁吸时间条在磁吸状态下放置于角色头顶。游戏物体MagnetHp的坐标如图2-27所示,可以作为参考。

图2-27

(40)创建遮挡背景图。在画布下新建一个 UI 图片,将其命名为“black”,当游戏结束时(角色死亡或者通关都会结束游戏),显示该 UI,用于遮挡整个场景,所以需要将该 UI 图片设为横纵拉伸模式。单击检视窗口(Inspector)中的Rect Transform左上角的大方格,按住“Alt”键并选择最后一行的最后一个按钮,将该UI图片的对齐方式设为横纵拉伸模式,如图2-28所示。

图2-28

将游戏物体black上的Image组件的参数Color设为半透明黑色,如图2-29所示。这样当游戏暂停时就有一个半透明幕布遮挡的效果。

图2-29

(41)创建“游戏结束”窗口。在画布下新建一个UI图片,将其命名为“FailPanel”,这是游戏失败时显示“游戏结束”的UI。将FailPanel的Image组件的参数Source Image设为17.png (见表2-1)。新建脚本“FailPanel”,并将其挂载到FailPanel上。将FailPanel放置于游戏界面中央,其位置和脚本组件设置如图2-30所示。

图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所示。

图2-31

(43)创建“游戏通关”窗口。在画布下新建一个UI图片,将其命名为“SuccessPanel”,游戏通关时将会显示该窗口,与FailPanel类似。将SuccessPanel的Image组件的参数Source Image设为17.png(见表2-1)。新建脚本,将其命名为“SuccessPanel”,并将其挂载到SuccessPanel上。将SuccessPanel放置于游戏界面中央,其位置和脚本组件设置如图2-32所示。

图2-32

(44)完善“游戏通关”窗口。在SuccessPanel下新建一个按钮,将该按钮下的游戏物体Text删除,并且将该按钮的Image组件上的参数Source Image设为20.png(见表2-1)。“游戏通关”窗口的效果如图2-33所示。

图2-33

(45)至此,完成《冰火人》游戏的场景搭建与设置。

注意:本节中的关卡设计仅供参考,读者在练习时可以按照自己的喜好创建一个更简单的小型关卡,以便调整和测试。