Animator

1.      准备工作

a)        通过FBX创建AnimationClip文件。(目的:更新动作后不会对动作状态机产生影响)

核心代码:

Animator

b)        替换动画状态机内的文件(目的:动画文件进行修改后,替换进入动画状态机)

核心代码:

Animator

2.      创建动画状态机

基本原则:状态之间的转换都需要经过Idle

平行状态使用Blend Tree_1D,通过Float变量进行控制(比如:角色吃饭,睡觉,交谈等目的:减少参数数量,使用BlendTree设置效果和使用多个Trigger设置所达到的效果是一样的)

 

通过子状态机和BlendTree的使用简化AnimatorController以及使用的参数数量

使用AnimatorOverrideController

使用AvatarMask

使用IK


3.      驱动动画状态机

a)        SetTrigger()/SetInt()/SetBool()/SetFloat()设置参数,控制状态

b)        AnimatorStateInfo获取当前状态

c)        AnimatorStateInfo.normalizedTime获取当前播放进度

d)        Anim.IsInTransition (0) 判断是否在过渡

 

e)        控制脚本主要提供方法 PlayAnim(AnimType type)/Reset()

f)         使用协同程序等待进入Idle状态后,再进行下一个状态的转换

 

4.      遇到的问题

a)        BlendTree:

                        i.             Speed = 1/-1  正向/反响播放(eg:抽刀,收刀)

                      ii.             AdjustTimeScale:Homogeneous Speed(通过对Speed的调整,统一BlendTree中的动作)

b)        ResetTrigger() 可以将Bool类型参数还原

c)        动画过渡(Transitions Setting)细活

d)        移动速度和动作播放速度的匹配

e)        滑步问题

                        i.             出现滑步的基本原因是移动速度和动画播放不匹配

                      ii.             NavmeshAgent + AnimatorController

从Walk->Idle,NavmeshAgent.velocity.magnitude =0后,切换Idle状态。

f)         状态的转换

                        i.             HasExitTime

                      ii.             AnimatorStateInfo.normalizedTime>0.8f+ 参数控制