下面是演示环节, 我们将开始《慕课英雄》第一人称完整版的制作。
本次演示的主要内容包括,项目的创建以及第一人称玩家的创建。
首先我们打开 Unity 编辑器,点击窗口右上角的 NEW 按钮。
打开项目新建窗口,首先我们输入项目的名称,
这里我们将项目命名为 Mooc Hero- FPS。
然后选择项目的保存路径, 接着我们设置项目的类型为
3D 游戏项目, 并点击 Create project 按钮创建项目。
[空白_录音] Unity
编辑器会自动打开我们新建的项目。
接下来我们导入本项目所需的资源包, 在 Project
视图的 Assets 标签下, 点击鼠标右键,在弹出的快捷菜单中依次选择
Import Package, Custom Package,在打开的路径选择窗口中
找到我们提供的资源包,Project 3: Mooc Hero- FPS。
选择它并点击打开按钮。
然后在弹出的小窗口中点击 Import 按钮。
[空白_录音]
打开的过程可能需要一些时间,
请大家耐心等待。
完成资源包 的导入后,我们就可以在
Project 视图中看到我们导入的资源文件了。
导入资源 文件后在 Project
视图中打开 Scenes 文件夹下的 Gameplay 场景。
这是我们为大家准备的基本场景。
接下来的演示都将在该场景中进行。
现在我们已经将 Scene 视图的视角
移动到了地形系统的中央,下面我们 开始第一人称射击游戏中玩家对象的创建。
在 Hierarchy 视图中我们创建一个空的游戏对象。
我们将它重命名为 FPSPlayer,
表示第一人称玩家对象。
并在 Inspector 视图中将它的 Tag 设置为 Player。
我们使用移动工具 将 FPSPlayer 对象移动到地形系统的中央。
接着 我们为玩家对象添加
Rigidbody 缸体组件 添加完毕后将它的
Mass 属性 也就是质量设置为 10。
接着,勾选 Constraint 标签下 Freeze Rotation 中的 XYZ 属性。
接下来, 我们为玩家对象添加 Capsule Collider 文件。
[空白_录音] 添加完毕后我们将
Radius 半径属性设置为 0.5。
将 Height 高度属性设置为 1.8。
这样我们就设置了合适的
胶囊碰撞体大小。
接下来我们设置场景中的摄像机。
我们在 Hierarchy 中选中 Main Camera 对象。
我们将它拖拽到 FPSPlayer 对象上。
使 Main Camera 成为 FPSPlayer 对象的子对象。
接着我们设置摄像机的位置, 在 Inspector
视图中我们将 Transform 组件中的 Position 属性 设置为
0, 0.6,
0。
接下来我们给第一人称射击游戏的玩家添加枪械。
我们在 Project 视图中打开 FPSPlayer 文件夹。
我们将 FPSPlayer 文件夹下的
Gun 预置键 拖拽到 Main Camera 对象上, 使它成为
Main Camera 的子对象, 同时设置
Gun 的 Position 属性。
我们在 Inspector 视图中 Transform
属性下, 设置 Position 属性的值为
-0.2,-0.6, 以及
0.4。
接下来 我们在
Project 视图中打开 Scripts 文件夹, 将其中的 PlayerHealth
脚本 与 FPSPlayerMove 脚本拖动到 FPSPlayer 玩家对象上。
[空白_录音]
这样我们就完成了玩家生命值管理脚本 与第一人称移动脚本的绑定。
当我们 通过脚本来移动 FPSPlayer 玩家对象时, 由于
Main Camera 是 FPSPlayer 的子对象 因此它会跟随玩家对象一起移动。
在脚本中我们还控制 Main Camera 的旋转 来调整第一人称的视角,而
Gun 作为 Main Camera 的子对象 则会跟随 Main Camera
一起旋转,这样就产生了用鼠标控制射击方向的效果。
最后我们将制作完成的第一人称玩家对象 FPSPlayer
拖入到 Project 视图的 FPSPlayer 文件夹中。
生成玩家预置键,接下来我们预览游戏。
在预览 中,我们可以通过
wsad 来控制玩家前后左右移动。
我们可以通过鼠标来调整第一人称的视角
以及枪口的方向。
下面我们停止预览。
[空白_录音] 在刚才的预览中我们发现
僵尸对象一直追着玩家进行攻击,这是由于僵尸的移动速度是
8,而我们的玩家对象的移动速度为
6,这样僵尸的移动速度始终高于玩家。
因此我们将玩家的速度调至 10。
[空白_录音] 接下来我们讲解本次演示中用到的脚本。
打开 Scripts 文件夹,我们就可以看到本项目用到的全部脚本文件了。
这里敌人的生成脚本,追踪脚本以及攻击脚本等 都和
Project 2 《慕课英雄》第三人称简易版中使用的完全相同。
唯一不同的就是 FPSPlayerMove 脚本了,
因此我们重点讲解 FPSPlayerMove 脚本。
首先双击打开它, 在
FPSPlayerMove 脚本中,我们分别控制玩家对象与摄像机对象的
行为逻辑,首先是 Start 函数,在 Start
函数中我们获取 FPSPlayer 的 Camera 子对象, 也就是我们的主摄像机。
还获取它的 RigidBody 组件以及 capsuleCollider
组件, 用来控制之后的玩家移动。
接下来我们查看 FixedUpdate 函数。
在 FixedUpdate 函数中我们通过 Physics.Raycast
函数 来判断玩家是否位于地面上。
我们用 isGrounded 来保存
判断的结果,这个结果会在之后的 Update 中 来实现玩家的跳跃。
然后是 Update 函数, 在 Update
函数中我们首先判断当前的游戏状态, 如果当前的游戏状态处于
Playing 状态, 也就是游戏正在进行中,那么我们就允许玩家通过
键盘和鼠标来控制玩家的移动和 朝向。
首先我们 使用 CrossPlatformManager 来代替之前的 Input。
用于接收用户的输入,CrossPlatformManager 能够兼容手机和电脑的输入方式。
我们也会在之后章节中对它进行一个详细的介绍。
当我们 接收到了用户在垂直方向和水平方向的输入后,
我们调用 Move 函数来实现玩家的移动。
在 Move 函数中,我们使用 FPSPlayer 对象的 transform
组件 调用它的 Translate 函数来实现玩家的水平移动。
我们回到 Update
函数, 在 Update 函数的 Move
之后, 我们继续使用 CrossPlatformInputManager
来获取玩家鼠标的移动,我们将 鼠标移动的结果保存在
rv 与 rh 变量当中。
然后以 rh 和 rv 作为参数调用 Rotate
函数来实现玩家视角朝向的改变。
在 Rotate 函数中,
我们使用鼠标水平轴上的 移动来控制角色的左右转向。
接着我们使用鼠标在水平方向上的输入,
乘以旋转角速度, 获取当前帧中摄像机在
X 方向上应有的旋转角度。
然后计算出摄像机的新的朝向。
接着我们使用 Mathf.Clamp
函数, 将这个旋转角限制在一个合理的范围当中。
最后我们设置摄像机 Tanform 组件的自身 Euler 角。
即可实现摄像机的俯仰行为。
下面我们还是回到 Update 函数, 在 Update
函数的最后,我们通过 Jump 函数来实现玩家的跳跃。
在 Jump 函数中,
如果玩家按下了跳跃按钮, 同时玩家处在地面上的时候,
我们就通过 rigid.AddForce 函数
来给玩家的刚体添加垂直方向上的作用力。
继而实现跳跃,下面我们回到 Unity
编辑器, 点击 File 菜单下的 Save Scene
选项, 保存我们对场景进行的修改,
以上就是本节演示的全部内容。