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

添加瞄准

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

添加敌人

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

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

151630qez3x63i613tze68.png
在Scripts文件夹下,新建C#脚本TargetBoom绑定到所有的圆柱上,TargetBoom代码如下:

[C#] 纯文本查看 复制代码public class TargetBoom : MonoBehaviour { public GameObject explode; // Use this for initialization使用这来初始化 void Start () { } // Update is called once per frame逐帧召唤更新一次 void Update () { } void OnTriggerEnter(Collider other) { Instantiate(explode, gameObject.transform.position, gameObject.transform.rotation); Destroy(gameObject); Destroy(other); } }
当有物体与触发器发生交互时,就会调用onTriggerEnter函数,以上代码将在触碰到目标后,就出现爆炸效果,然后消除和目标。爆炸是用粒子效果来模拟的,您可以自己新建一个Particle System模拟简单的爆炸效果,也可以使用Asset Store已有的资源。新建文件夹Particles,将爆炸效果命名为Explode保存为Prefab,存放于Particles文件夹下。接着,将该Prefab赋给所有圆柱Target Boom脚本的Explode字段。

151632ikzbe2eyzhfbn55z.png
下面添加让对象左右移动的脚本ObjectMove,代码如下:
[C#] 纯文本查看 复制代码public class ObjectMove : MonoBehaviour { public float amounttomovex; public float speed; private float currentposx; private float currentposy; private int facing; void Start() { currentposx = gameObject.transform.position.x; facing = 0; } void Update() { if (facing == 1 gameObject.transform.position.x < currentposx - amounttomovex) { facing = 0; } if (facing == 0 gameObject.transform.position.x > currentposx) { facing = 1; } if (facing == 0) { transform.Translate(Vector2.right * speed * Time.deltaTime); } else if (facing == 1) { transform.Translate(-Vector2.right * speed * Time.deltaTime); } } }
将脚本绑定到需要移动的对象上,并在检视面板中为脚本各字段赋值。以上步骤完成后,可以点击运行看看游戏效果。

151633lbpg2djjszsjz11n.png
添加移动平台的输入

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

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

151635sumldb9x9fdfmxij.png
触摸或点击屏幕任意位置时,枪就会发射。因为原脚本中的逻辑是,首次检测到鼠标左键或触摸会触发射击,这对于控制移动来说其实不太合适。可以对上一篇的代码稍作改动,加入一些判断来改善这点。这里我给大家留下一些想象的空间,思考一下应该如果去实现呢?
在移动设备运行

到此整个游戏就完成得差不多了,下面将游戏运行到真机上。依次点击File > Build Settings,点击界面上的Add Open Scenes,将当前场景加入构建,确保平台为Android,选择“Texture Compression”为“ECT(Default)”,以保证最大化兼容Android设备,但该压缩格式不支持透明纹理。如果您手上的设备是支持OpenGL ES 3.0的,您可以考虑选择“ECT2(GLES 3.0)”。因为这是ETC2压缩格式,它能保证比较好的压缩效果的同时,兼顾透明纹理。

151638lpgbvlrq4lhvmdbd.png
点击“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目录。

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

第二关

首先,使用纯色的纹理创建“一扇传送门”(立方体),放入第一关的场景中,作为第一关结束的触发器。在Scripts文件夹下新建C#脚本Gateway,代码如下:
[C#] 纯文本查看 复制代码public class Gateway : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter(Collider other) { if (other.tag == Player) { Application.LoadLevel(level2); } } }
将Gateway脚本绑定到门上,当玩家接触到门,就加载第二关。在检视面板上更改FPSController的Tag为Player。选中之前保存的场景“Level 1”,依次点击菜单项Edit > Duplicate或直接用快捷键Cmd/Ctrl + D复制新的场景命名为“Level 2”。
在“Level 2”中新建Terrain,并加入一些树木等对象。也可以使用Unity自带的资源包,在项目视图中右键点击Assets文件夹,弹出菜单中选择Import Package > Environment,其中包含一些可以免费使用的3D模型,包括树木、草地等。

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

结论

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

关于本教程如有任何疑问,请在下面留言评论。

原文连接:http://www.androidauthority.com/ ... nity-part-2-715939/
原文作者:ADAM SINICKI
译者:yushuw
转载请注明来源:Unity官方中文社区(forum.china.unity3d.com)。请勿私自更改任何版权说明信息。 Unity, 教程, 入门, 3D游戏锐亚教育

锐亚教育 锐亚科技 unity unity教程