查看原文
其他

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

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

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


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

创建游戏世界

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



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

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


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

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


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




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

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

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




效果如下:




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

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




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



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

在Assets下新建文件夹Scripts,在文件夹下新建C#脚本Forward,该脚本用来控制子弹向前移动。Foward脚本具体代码请点击[阅读原文]查阅。
新建文件夹Prefabs存放可能需要被多次使用的游戏对象,对象可以包含多个不同属性及脚本。将Sphere拖拽至Prefabs文件夹下存为预设体(Prefab),删除场景中的Sphere。注意:记得保存场景。
在Scripts文件夹下新建C#脚本Fire,表示每次点击鼠标左键就会在gameObject的位置生成新的游戏对象blast。将该脚本绑定到枪上,将子弹预设体拖拽至脚本的blast字段。玩家点击鼠标左键,子弹就会出现在枪的中心,并开始向前移动。 Fire脚本具体代码请点击[阅读原文]查阅。

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




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

以上就是本期简单教学了,有兴趣动手的同学,请点击[阅读原文]查看教程涉及的源码。如果有任何疑问,请访问Unity官方中文社区。


本文来源于:androidauthority.com

原作者:Adam Sinick


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


重要提醒



点击“阅读原文”访问官方中文社区!

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

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