本阶段功能实现-第三人称角色控制

在上一阶段,我们已经完成了角色的换装界面UI以及其背后的逻辑,上阶段回顾在这,为此需要完善从进入游戏到开始游戏主菜单->创建角色->实际的游戏场景整个流程,并在这一阶段着重完成第三人称的角色控制并为之后的技能系统做准备。具体内容如下:

  • 新增开始游戏菜单界面,串起开始游戏->创建角色->游戏场景这个流程
  • Playable APl:播放动画、播放技能
  • CineMachine:做相机镜头控制
  • 实现第三人称角色控制

为什么要Playable API

常见动画方案自由度低

  • Animation:使用简单,但功能太少(不支持混合树,也没有IK,遮罩)
  • Animator+AnimatorController:好用、功能多,但是有束缚(需要离线预先设置好状态)
  • Animator+Playable:使用麻烦,但是自由度最高

Animation是老版的动画系统,其好处在于可以像Flash一样编辑每一帧的动画片段,但功能较为单一。Animator作为新的动画系统,使用状态机进行动画流程控制并支持IK,混合树,状态过渡,骨骼匹配等高级功能,但并不能对动画片段进行编辑(除非是自己新建的)。 alt

animator和animation创建的动画不一样,Animation可以用Animator创建的片段,但Animator状态机不支持老版的Animation动画。 alt 两种动画方案都可以添加帧事件,方法类似,都需要动画所在游戏对象上有同名的事件方法。

alt

动画帧事件复杂

Unity提供的动画事件是基于AnimationClip上打帧事件,虽然也支持运行时增加,但是AniamtionClip本质上是一个实例,如果你打上事件,意味着所有运行这个AnimationClip的Aniamtor都会执行这个事件,如果这个Animator所在游戏物体上没有任何脚本存在同名的函数就会报错。

举个例子,某武器如果在攻击状态下使用者是特定角色(专武),可以额外触发特效刀光,这就需要在这把武器的攻击动画上添加帧Event,但对于其他角色使用这把武器攻击时,还是用这个动画但没有专门的启用特效的方法就会报错。(当然也可以麻烦点用缺省参数来包容所有情况,相对麻烦)。

我们的编辑器以及战斗系统,可能需要定义非常多的帧事件,因此需要将动画的播放和事件的响应分开,相当于将帧事件打在单独的事件clip上。

需要运行时修改State

Animator可以在运行时更换AnimatorController以及AnimatorOverrideController,但是对于动画状态的增删改查依然特别不灵活以及麻烦,如果游戏技能特别多问题会更大,而且AnimatorController加载后意味着其中的所有AnimationClip也都加载了!

虽然课程中技能不会特别多,但是希望得到避开动画状态这种设定。

配合技能编辑器以及运行时战斗系统

技能编辑器中的成果其实就是可视化的技能配置,然后在运行时去跑这份配置。

后续将使用Playable去驱动技能,所以我们相当于用Playable做了一个“技能播放器”,当然我们同时也支持只播放动画, 在第二阶段里我们先完成动画播放器功能。