本文将由Adam Sinicki教大家如何使用Unity制作一款3D射击游戏,并且可以直接运行到Android手机。

教程将分为两部分,第一部分讲解基础概念和项目设置。第二部分将在前面的基础上,因为在移动平台开发3D射击游戏会一定的挑战,所以针对会有Android平台进行改善和优化。今天先分享上半部分的内容,明天再继续讲解下半部分。

准备事项

如果您尚未安装Unity,请先至官网下载安装,本文使用Unity 5.3.5f1。首先打开Unity并新建一个3D项目:

141243n2qm2m2k1mf1mjqs.png
点击创建项目,会看到如下画面:

141244pc4cj49cjejvqoof.png
创建游戏世界

下面来创建一个可以让玩家角色四处走动的游戏世界。依次点击菜单项GameObject > 3D Object > Plane新建平面,在场景中会出现一块平面网格,它将作为游戏地图。然后,依次点击菜单项GameObject > 3D Object >Cube新建立方体,使用界面上方的移动工具,将立方体移至平面上方,的工具还可以用来旋转和缩放等。

141246zdmy5xmgpkdnla0x.png
下面来为立方体添加物理属性,这就需要添加碰撞器(Collider)和刚体(Rigidbody)组件:碰撞器用来进行碰撞检测,刚体则提供一些简单的物理特性如重力和摩擦力等。

在场景视图或层级视图选中立方体后,依次点击检视面板上的Add Component > Physics > Box Collider添加碰撞器(默认已有则无需添加),同样的步骤选择Add Component > Physics > RigidBody添加刚体。

141246h9vzjfjqjsjjkx1v.png
此前已将立方体拖拽至平面上方,点击运行会看到立方体下落至平面后静止。按下Ctrl/Cmd + S保存场景,任意命名为“Level1”或。

场景美化

如果仅在乎游戏功能部分,可以先跳过这一节直接阅读后面的内容。但是,现在的场景看起来不够美观:

141247bewk9rxdra7x9i77.png
首先为平面和立方体添加纹理,使用任意你喜欢的图片即可,Asset Store上也有大量的免费资源。在Assets目录下新建文件夹Scenes和Textures,将此前保存的场景存放在Scenes文件夹下,将要添加的纹理存放在Textures文件夹下。然后将纹理直接拖拽至场景视图上的对象,即可为对象添加纹理:

141248soss2blhopsr1hch.png
上图的纹理分辨率看起来不够高,将纹理拖拽至对象时Unity会自动生成Materials文件夹,可以选中Materials文件夹下的材质做一些参数调整,更改Metallic滑块的值,并将Tilling的X和Y值均设为3(表示每个方向重复3次)。

下面来添加自定义天空盒。在Materials文件夹下点击右键Create > Material新建材质,选择Shader类型为Skybox > 6 Sided,设置6张天空盒贴图。如果没有天空盒贴图,也可以选择Shader类型为Procedural使用默认材质。

141249v9qmc9mycmci9wmc.png
接着,依次点击菜单项Window > Lighting > Skybox新建天空盒,将刚才新建的材质拖拽至Skybox字段:

141249ipqjjp9qvdv83ck6.png
效果如下:

142520kt9r7q4944kz4apd.png
添加玩家

这里要用到Unity自带的“FPSController”,右键点击Assets文件夹选择Import Package > Characters。导入成功后,在Assets下会出现“Standard Assets”文件夹。打开Standard Assets > Characters > FirstPersonCharacter > Prefabs,将FPSController拖拽至场景, 删除场景上的主相机。默认的FPSController已经实现了输入、物理碰撞等行为的代码,其中还带有音效。

点击运行,即可使用W、A、S、D来移动玩家,使用鼠标改变玩家朝向,按空格键跳跃。

141252re22eezfe8s8zgbe.png
加入射击

为了效果更逼真,可使用3D型,Asset Store就有大量的免费模型,也可以访问这里下载。新建文件夹Objects,将枪的模型放在此文件夹下。将枪的模型拖拽至场景,放在FPSController上方,并调整枪的大小与方向与FPSController一致。接着,在层级视图中,将枪拖拽至FPSController下作为子对象,现在玩家移动枪即跟随移动。

142521tba2kztvqaak0dss.png
有了枪,下面来创建。新建Sphere作为,添加Rigidbody组件,并取消勾选Use Gravity,以免发射后下坠。

在Assets下新建文件夹Scripts,在文件夹下新建C#脚本Forward,该脚本用来控制向前移动,代码如下:

[C#] 纯文本查看 复制代码public class Forward : MonoBehaviour { private float timetodestroy; // Use this for initialization使用它来初始化 void Start () { //GameObject.rigidbody.constantForce游戏对象、刚体、恒力 timetodestroy = 3; } // Update is called once per frame逐帧召唤更新一次 void Update () { timetodestroy = timetodestroy - Time.deltaTime; gameObject.transform.position += transform.forward * Time.deltaTime * 30; if (timetodestroy < 0) { Destroy(gameObject); } } }

Transform 表示坐标,上面代码就是让以每秒30个单位的速度向前飞行。浮点数timetodestroy 随时间减小,减至0时消除对象。gameObject表示脚本所绑定的游戏对象。将Forward脚本添加至Sphere球体()上:

141253ahvj29o572hvahjo.png
新建文件夹Prefabs存放可能需要被多次使用的游戏对象,对象可以包含多个不同属性及脚本。将Sphere拖拽至Prefabs文件夹下存为预设体(Prefab),删除场景中的Sphere。注意:记得保存场景。
在Scripts文件夹下新建C#脚本Fire,代码如下:
[C#] 纯文本查看 复制代码public class Fire : MonoBehaviour { public GameObject blast; // Use this for initialization使用这来初始化 void Start () { } // Update is called once per frame逐帧召唤更新一次 void Update () { if (Input.GetKeyDown(KeyCode.Mouse0)) { Instantiate(blast, gameObject.transform.position, gameObject.transform.rotation); } } }
以上代码表示,每次点击鼠标左键就会在gameObject的位置生成新的游戏对象blast。将该脚本绑定到枪上,将预设体拖拽至脚本的blast字段。玩家点击鼠标左键,就会出现在枪的中心,并开始向前移动。

141254k3fmnteqzhn16f1f.png
可以在场景中添加更多的地板和立方体进行测试:

142522f2ic5jocouz4ioin.png
处理射击的方式还有很多,Raycast就是很常见的一种。到此已经实现了在3D世界中走动并射击,下一篇将继续添加瞄准目标和一些动画,加入敌人和关卡,并尝试制作不同的地形,然后针对Android设备选择正确的纹理和触摸控制来优化游戏。

142523tov6oddjx71za611.png

原文连接:http://www.androidauthority.com/ ... ty-part-one-712425/
原文作者:ADAM SINICKI
感谢Unity官方翻译组成员“yushuw”对本文翻译所做的贡献。
转载请注明来源:Unity官方中文社区(forum.china.unity3d.com)。请勿私自更改任何版权说明信息。 Unity, 3D游戏, 入门, 教程锐亚教育

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