查看原文
其他

Unity教程|制作一款3D射击游戏(下)

2016-10-05 Unity官方 Unity官方平台

本教程是面向对Unity使用还不太熟悉的新手入门教程。上一篇介绍了在Unity中创建基本的3D环境,添加了第一人称控制器和相机,并为枪添加了发射子弹的逻辑。本文将继续添加瞄准目标和一些动画,加入敌人和关卡,并尝试制作不同的地形。然后,针对Android设备选择正确的纹理,以及触摸控制来改进游戏体验。


点击[阅读原文]查阅文中涉及的所有代码。


添加瞄准
在层级视图中,将枪从FPSController下拖拽至FirstPersonCharacter,作为FirstPersonCharacter的子物体。FirstPersonCharacter是控制相机的对象,将枪设为其子物体,即可让枪一直跟随相机朝向,也就是玩家角色的“头部”。


添加敌人
有了瞄准后,现在就准备在场景中添加一些供射击的目标。依次点击菜单项GameObject > 3D Object > Cylinder添加圆柱,然后改变Scale的值将它尽量缩至扁平直到变成靶状,也就是敌人。


在圆柱正前方新增另一个圆柱,在Materials文件夹下新建两个材质,分别将颜色设为红色和白色,红色材质赋给外围的圆柱,白色则给里面的圆柱。两个圆柱均带有胶囊碰撞器(Capsule Collider),在红色圆柱的检视面板上勾选Capsule Collider的“Is Trigger”,因为只需判断子弹何时接触目标,而不需要响应碰撞。




在Scripts文件夹下,新建C#脚本TargetBoom绑定到所有的圆柱上。TargetBoom脚本具体代码请点击[阅读原文]查阅当有物体与触发器发生交互时,就会调用onTriggerEnter函数,以上代码将在子弹触碰到目标后,就出现爆炸效果,然后消除子弹和目标。爆炸是用粒子效果来模拟的,您可以自己新建一个Particle System模拟简单的爆炸效果,也可以使用Asset Store已有的资源。新建文件夹Particles,将爆炸效果命名为Explode保存为Prefab,存放于Particles文件夹下。接着,将该Prefab赋给所有圆柱Target Boom脚本的Explode字段。



下面添加让对象左右移动的脚本ObjectMove,并且将脚本绑定到需要移动的对象上,并在检视面板中为脚本各字段赋值。ObjectMove脚本具体代码请点击[阅读原文]查阅。以上步骤完成后,可以点击运行看看游戏效果。 




添加移动平台的输入
导入Characters资源包后项目中,已经包含了名为“MobileSingleStick Controll”的Prefab,在项目视图的搜索框搜索名称即可找到。将该Prefab拖拽至层级视图,会自动在场景中生成按钮和摇杆。如果看不见,请依次点击File > Build Settings将平台切换为Android或iOS。


点击运行,可以用鼠标或真机的触摸屏进行操作,按钮用来控制跳跃,摇杆用来控制方向。在检视面板中设置按钮和摇杆的Anchor,让它们固定在屏幕一角,还可以改变按钮颜色和纹理等。


触摸或点击屏幕任意位置时,枪就会发射子弹。因为原脚本中的逻辑是,首次检测到鼠标左键或触摸会触发射击,这对于控制移动来说其实不太合适。可以对上一篇的代码稍作改动,加入一些判断来改善这点。这里我给大家留下一些想象的空间,思考一下应该如果去实现呢?
在移动设备运行
到此整个游戏就完成得差不多了,下面将游戏运行到真机上。依次点击File > Build Settings,点击界面上的Add Open Scenes,将当前场景加入构建,确保平台为Android,选择“Texture Compression”为“ECT(Default)”,以保证最大化兼容Android设备,但该压缩格式不支持透明纹理。如果您手上的设备是支持OpenGL ES 3.0的,您可以考虑选择“ECT2(GLES 3.0)”。因为这是ETC2压缩格式,它能保证比较好的压缩效果的同时,兼顾透明纹理。


点击“Player Settings”在检视面板中设置发布信息,在“Publishing Settings”下设置应用名称和签名。取消勾选“Resolution and Presentation”下的“Portrait”和“Portrait Upside Down”,因为3D射击游戏通常不需要竖屏。还可以设置Minimum API Level来过滤一些Android设备。


下面点击“Build and Run”来生成APK安装包,请确保在Unity > Preferences > External Tools中指定了正确的Android SDK目录。


点击运行,如果觉得摇杆和按钮的操作位置不够舒服,可以回到Unity编辑器进行调整。现在已经有了敌人(靶),也可以进行瞄准射击了。下面来加入第二个关卡。

第二关

首先,使用纯色的纹理创建“一扇传送门”(立方体),放入第一关的场景中,作为第一关结束的触发器。在Scripts文件夹下新建C#脚本Gateway,并且将Gateway脚本绑定到门上,当玩家接触到门,就加载第二关。在检视面板上更改FPSController的Tag为Player。选中之前保存的场景“Level 1”,依次点击菜单项Edit > Duplicate或直接用快捷键Cmd/Ctrl + D复制新的场景命名为“Level 2”。Gateway脚本具体代码请点击[阅读原文]查阅。


在“Level 2”中新建Terrain,并加入一些树木等对象。也可以使用Unity自带的资源包,在项目视图中右键点击Assets文件夹,弹出菜单中选择Import Package > Environment,其中包含一些可以免费使用的3D模型,包括树木、草地等。




选中场景中的地形,可以自由发挥创建一些好玩的东西,或者加入其它的3D模型。

结论

到此,整个使用Unity制作3D射击游戏的教程就结束了,我们完成了一款比较简单的3D射击游戏。您还可以在这个基础上发挥创作,继续添加一些游戏元素,如游戏计分和射击音效等等。如果有任何疑问,请访问官方社区。


本文来源于:androidauthority.com

原作者:Adam Sinick


更多Unity教程以及技术文章:


重要提醒



点击“阅读原文”查看教程源码!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存