这个系列的介绍已经完成,有兴趣的朋友可以查看以下链接
Unity开发一个FPS游戏_unity 模仿开发fps 游戏-优快云博客
Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-优快云博客
Unity开发一个FPS游戏之四_unity fps-优快云博客
所有的代码和资源已经上架Unity Asset Store, 链接是FPS basic package | Systems | Unity Asset Store
在前面的系列中,我已介绍了如何实现一个基本的FPS游戏,这里将继续进行完善,主要是增加更换武器以及更多动作动画的功能。
之前我是采用了网上一个免费的3D模型来构建角色,这个模型自带了一把AR自动步枪,并且自带了一些动作的动画,例如更换弹药,射击,瞄准等。我准备在这个模型的基础上进行扩展,增加AK47这个武器,以及重新制作并增加更多的动画,例如奔跑,走路等动画。
动画制作
设置关联骨骼
在Blender中导入网上下载的3D模型。导入后需要重新设置手的IK反向运动学骨骼,在姿态模式下,选择hand_IK的骨骼,然后按shift选择hand骨骼,然后shift-I来进行关联,设置IK骨骼约束的链长为3,即根控制骨骼是到upper_arm骨骼。现在点击hand_IK骨骼,按G键调整位置,可以看到整个手臂的骨骼会自动按照hand_IK的变化来运动。
调整模型大小
调整缩放比例,对于这个模型,我是把缩放比例调到0.6,可以通过Blender的测量工具进行测量。调整后的模型高度大致在2米。另外就是调整模型的朝向,因为Blender和Unity采用不同的坐标系,模型的朝向是相反的。
设置模型姿态
为了调整姿态,导入一个AK的模型,和枪械的相关骨骼进行关联。调整模型的骨骼,设置模型的多个相关动画。
稍微介绍一下在Blender中制作动画,需要进入姿态模式,然后移动骨骼,调整到合适的位置,然后按A全选,然后按I插入关键帧即可。
武器切换
要实现武器切换,有两个思路,一个是分别制作玩家和每一种武器对应的模型和动画,然后分别导出为不同的FBX文件。另一个思路是把玩家和武器分开来导出。可以看到第2种思路更合理,因为玩家的模型只需保留一个就可以,然后武器保存为不同的模型文件。但需要切换时就加载相应的武器模型即可。
当然这两种思路在制作模型动画时还是需要一起制作的,不然没法把武器的动作和玩家的动作很好的吻合在一起,我们只需要在导出时,把不需要的物体隐藏即可。
把制作好的玩家和武器的模型导入到Unity,并保存为Prefab。然后就可以进行代码改造了。
Animator定义
每个武器有自己的动画,然后玩家对应不同的武器也有不同的动画,要如何根据武器来进行动画的管理切换呢,我们可以用Unity的Animator override来进行处理。定义两个通用的Animator,分别对应Player和Weapon,在里面定义好状态的转换,例如以下是Player的Animator定义:
在以上的状态切换,我都是通过Trigger来触发的,没有用到Bool。因为我是在PlayerController脚本里面来维护状态。对于需要循环播放的动画,例如Sprint, Walk, Aim这些动画剪辑,我们需要在模型的Animation里面勾选Loop Time。
然后对于每一种武器,我们都定义一个Animator override,继承这个通用的Animator,只是覆盖相应状态的动画即可。对于Player也是需要定义多个Animator override来对应不同的武器,覆盖相应的动画。
之后在每一种武器的Prefab里面,增加一个Animator的组件,里面选择对应的Animator override。
代码重构
在之前的代码里面,武器的属性管理都是放在PlayerContr