首页 理论教育虚拟现实应用开发实践:Tanks游戏管理

虚拟现实应用开发实践:Tanks游戏管理

【摘要】:图8-131GameManager公共变量初始化接下来先整理一下我们的游戏逻辑。GameManager可以分为若干个Tank Manager,Game Manager负责管理每个Tank Manager,而具体的游戏坦克的行为则交给每一个Tank Manager负责。图8-135新建Audio Mixer文件确保左上角选中的是MainMix,然后在Groups选项下单击“+”来创建三个子对象,并分别命名为Music、SFX、Driving。在Prefabs文件夹找到TankExplosion,把Audio Source的Output选择为SFX。整个Tanks游戏的开发流程到此完毕。

本小节的目标是创建一个管理脚本,统一管理该游戏场景中的两辆坦克,并且添加输赢的游戏逻辑,让游戏有始有终。

在上一节中,我们把根目录下的Tank删除了,需要在游戏的过程中动态生成两个Tank,而不是一开始就设置好。因此我们需要两个Tank的出生点。在Hierarchy下新建两个空对象,分别命名为SpawnPoint1和SpawnPoion2。

选中SpawnPoint1,做以下修改(见图8-126)。

选中SpawnPoint2,做以下修改(见图8-127)。

图8-126 创建空对象1

图8-127 创建空对象2

接着,在Hierarchy层级下新建一个Canvas(GameObject→UI→Canvas),重命名为MessageCanvas。接着,在Scene View中单击2D模式,如图8-128所示。

图8-128 新建Canvas

选中MessageCanvas,右键新建一个Text,让其成为MessageCanvas的子对象,选中Text对象,修改它的数据,如图8-129所示。

下一步,在Text内新建一个组件:Shadow,为Text添加阴影效果(见图8-130)。

图8-129 Text对象设置

图8-130 为Text添加阴影

接着,取消刚才设置的2D视图模式。

选中CameraRig,单击Edit→Frame Selected按钮,在CameraRig的脚本组件那里,之前设置了m_Targets为已经被删除的Tank,所以我们要把该数组长度设置为0,并按回车确认。再打开CameraControl脚本来编辑:这里只需要把之前提及的“HideInInspector”的注释去掉即可,也就是说隐藏掉该公共变量

下面就来创建我们的游戏管理者,在Hierarchy层级创建一个空对象,命名为GameManager,在/Scripts/Managers文件夹内找到GameManager脚本,把它拖拽到GameManager对象内。先初始化它的几个公共变量,如图8-131所示。

图8-131 GameManager公共变量初始化

接下来先整理一下我们的游戏逻辑。

(1)先从游戏的整个流程来梳理(见图8-132)。从官方的教程中可以知道,Game Manager充当一个管理全局的角色,首先它初始化的过程中,会在出生点生成两个坦克供玩家控制,并且把摄像机的目标设置为该两辆坦克,由此完成初始化。接着是正常的游戏流程,这里涉及游戏的输赢判定,使用的是分回合的形式,每一回合获胜则获得一分,经过若干回合后,总分最高者获胜。每一回合结束之后,会回到初始化过程,重新生成坦克。具体到每一个回合上,坦克的控制就交给Tank Manager来控制。

图8-132 游戏流程(1)

从图8-133可以看出,Tank Manager控制了坦克的移动和射击的脚本以及UI的展示。

(2)从游戏者的角度来梳理(见图8-134)。GameManager可以分为若干个Tank Manager,Game Manager负责管理每个Tank Manager,而具体的游戏坦克的行为则交给每一个Tank Manager负责。这里就实现了解耦的作用,假如以后需要拓展游戏功能,如增加多个玩家,那么只需要修改Game Manager就可以了。

图8-133 游戏流程(2)

(www.chuimin.cn)

图8-134 游戏流程(3)

接着,我们打开GameManager脚本,对它进行完善与编辑。

编辑完毕之后,再来看看TankManager这个脚本,该文件也在Manager文件夹内,但是不需要把它拖拽到任何游戏对象上。因为它由GameManager来管理。

经过上一小节的测试后,游戏已经算是高度完成了,最后这一小节还需要完善一下音效效果。

首先,右键单击AudioMixer文件夹,新建一个Audio Mixer,命名为MainMix。双击打开该文件(见图8-135)。

图8-135 新建Audio Mixer文件

确保左上角选中的是MainMix,然后在Groups选项下单击“+”来创建三个子对象,并分别命名为Music、SFX、Driving(如果无法重命名,则单击开始游戏再结束游戏)。接着对三个子对象的属性进行更改:

(1)选 中Music,把Attenuation选 择 为-12,并 且 通 过“Add...”按钮新建一个Duck Volume。

(2)选中SFX,新建一个Send,设置Receive为Music\Duck Volume。

(3)选中Driving,把Attenuation选择为-25。

(4)重新选择Music,在Inspectior界面做更改,如图8-136所示。

然后,在Prefabs文件夹内找到Tank,展开第一个Audio Source,把Output选择为Driving(见图8-137)。

展开第二个Audio Source,把Output选择为SFX(见图8-138)。

在Prefabs文件夹内找到Shell,展开,选中ShellExplosion,把Audio Source的Output选择为SFX。在Prefabs文件夹找到TankExplosion,把Audio Source的Output选择为SFX。在Hierarchy选择GameManager,新建Audio Source组件,音效选择为BackgroundMusic,Output选择为Music。选择Loop项。

图8-136 Inspectior界面修改

图8-137 Audio Source的Output设置

图8-138 Output设置

最后,保存场景,运行游戏。整个Tanks游戏的开发流程到此完毕。