(1)新建一个工程TankDemo,保存场景TankGame,导入Tank 模型资源。在Hierarchy视图中创建一个Plane 作为地板,创建一个空物体Floor,在Floor 里创建四堵墙(Create Cube),调整到适当的位置,并赋予它们不同的颜色材质。将Project视图中坦克的预制体“Tank”→“Models”→“Tank”拖到场景中,如图6-19 所示。
图6-19 搭建场景
(2)创建脚本Move,挂载给Tank,实现用键盘方向键和W、S、A、D 键控制坦克的前进后退和左右旋转,具体代码如下:
(3)给坦克添加刚体组件和碰撞器,防止坦克穿墙。如果给父节点Tank 加网格碰撞组件Mesh Collider,会发现碰撞器关联的网格为空(见图6-20),那么碰撞器就不起作用了。因为,坦克的模型被拆分了,比如单独选中盖子,单独加网格碰撞器,则会自动寻找盖子的模型添加网格,如图6-21所示;身子也是一样,会自动寻找网格。这里就不用网格碰撞器,Hirearchy视图中选中Tank,添加盒子碰撞组件BoxCollider,减少了计算量。点击盒子碰撞组件的调整按钮,让它包围整个坦克,当然不能碰到地面,否则会跟地面碰撞。
图6-20 Tank 的Mesh Collider 组件
图6-21 TankTurret 坦克头网格碰撞组件
图6-22 调整Tank 盒子碰撞器大小
(4)给场景添加自转道具,当坦克碰到道具,道具会自动销毁。在Hierarchy视图中创建空物体CoinObject,在CoinObject下创建一个Cube,重命名为Coin,调整它的位置。新建一个脚本Coin,挂载给道具Coin,具体代码如下:
调试程序时发现坦克开过去,道具Coin销毁掉,对象窗口的Coin对象也被销毁。在Project视图中新建文件夹Prefabs,将Hierarchy视图中Coin游戏对象拖到该文件夹中,形成预制体。预制体可以理解为一个游戏对象及组件的集合,目的是使游戏对象及资源能够被重复使用。再把预制体拖到Hierarchy视图中的CoinObject空物体下,形成一样功能的道具,调整它们在场景中的位置,会发现预制体拖动过来的道具是蓝色,如图6-23 所示。
图6-23 生成道具
图6-24 子弹发射的组件设置(www.xing528.com)
(5)为了得到更好的视觉效果,新建脚本“Follow”,挂载在Main Camera 上,实现摄像机的跟随效果,具体代码如下:
(6)制作炮弹。在Hierarchy视图中Tank对象下,创建一个Cube,重命名为FirePoint,把FirePoint 调整到炮口的位置,同时把它的渲染组件取消(隐藏Cube),盒子碰撞器也取消(以免和子弹发生碰撞),把这个位置作为炮弹生成的起始位置,如图6-24 所示。
制作炮弹。创建一个胶囊体Fire,给Fire 添加刚体组件(RigidBody),以及添加盒子碰撞器Box Collider,并调整它的大小。创建一个脚本Fire,挂载给炮弹Fire,实现当炮弹射击到道具Coin 时,道具消失,如果没有射中道具,2 s 后自我销毁。具体代码如下:
把炮弹Fire拖到Project视图中,形成炮弹预制体,然后把Hirearchy视图中的Fire 物体删除。此时修改脚本“Coin”如下:
(7)制作炮弹射击功能。先给坦克添加射击音效。给坦克添加Audio Source组件,把Project视图中“Tank”→“Music”→“SheellExplosion”声音文件拖给AudioClip,取消勾选Loop(循环播放)和Play On Awake(自动播放),这样这个组件里就有了射击的声音,如图6-25所示。
图6-25 给Tank 添加声音组件
图6-26 参数赋值
新建一个脚本“Shooting”,挂载给Tank,实现当按下空格键时坦克发射炮弹,并伴有音效,Inspector视图中各参数的赋值如图6-26所示,具体代码如下:
(8)随机生成道具。首先要测量道具生成的范围,创建一个用于测量的Cube,在围墙内拖动Cube,在属性窗口看Z 轴和X 轴的范围,并记录下来;接着新建一个空物体BornCoin,创建脚本“BornCoin”,挂载给空物体BornCoin,具体代码如下:
(9)按下[Ctrl+S],保存场景。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。