Unity中AnimatorController的配置

AnimatorController(动画控制器)的配置编辑是在Unity的Animator视图中完成的,通过在Animator视图中创建动画状态,以及设置过渡条件,构建动画状态机,以可视化地控制动画的播放。
下面介绍一些配置动画控制器的要点,主要是个人总结的一些心得。

动画状态机行为

状态机行为可以附加在动画状态(AnimationState)或者子状态机上,可以在状态进入、退出等时机执行指定代码。
在想要添加行为的动画状态的属性面板上点击“Add Behaviour”按钮,或者把预先写好的行为脚本拖拽到面板上。操作方法类似MonoBehaviour脚本。在这里插入图片描述
一个状态机行为脚本应当写有一个继承自StateMachineBehaviour类的类。
查阅官方API文档可知StateMachineBehaviour类有一些特定时机的回调方法,列举一些常用的回调方法及调用时机:

  • OnStateMachineEnter:整个状态机进入时
  • OnStateMachineExit:整个状态机退出时
  • OnStateEnter:状态进入时(第一帧)
  • OnStateExit:状态退出时(最后一帧)
  • OnStateUpdate:处于此状态时的每一帧(除第一帧和最后一帧)

可重写这些方法,以在特定时机执行指定代码。

public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
	//dosomething
}

在方法的参数中可以获取一些上下文和动画状态的数据:

  • Animator animator:当前状态所属的Animator组件的引用。
  • AnimatorStateInfo stateInfo:当前动画状态信息。
  • int layerIndex:当前状态所属的动画层索引值。

OnStateMachineEnter和OnStateMachineExit在状态机进入和退出时调用,但子状态机的进入和退出并不会调用此方法。

若在子状态机上挂载行为脚本,那么子状态中每一个状态都将在相应的时机调用子状态机上行为相应的回调方法。例如,在子状态机M上挂载行为脚本,重写OnStateEnter方法。状态A时子状态机中一个状态。当进入状态A时,也会调用子状态机M上的OnStateEnter方法。

过渡条件

过渡条件表示从状态A(下文称之为初始状态)过渡到状态B(下文称之为目标状态)时需满足的条件。
过渡条件
过渡,个人理解是:初始状态和目标状态的动画各取一定比例混合,混合比例在时间上线性变化。如下图所示:
混合比例在时间上线性变化
蓝色色块覆盖的区域是动画在时间轴上播放实际表现情况。开始时,蓝色色块覆盖了Run的第一个灰色色块,表示过渡开始之前播放的都是Run的动画;而播放到过渡开始时,下方开始有Tumble色块,而蓝色色块也从Run色块开始斜向下走向Tumble色块,表示过渡从这开始,动画开始逐渐混入Tumble的部分;然后蓝色色块又变水平向,这时过渡已经结束,播放的完全是Tumble的动画。

Has Exit Time

初始状态转换到目标状态的过渡开始需满足特定的条件(下文称之为条件A),条件A由“Exit Time”参数决定。而此参数表示是否启用条件A对过渡发生的限制。

Exit Time

退出时间。这个参数可以和“Has Exit Time”配合使用,是条件A的组成部分。
这个参数是一个标准化时间(英文是normalized time,不知道这个直译准不准),取值介于0到1,其表示的时间长度为初始状态播放长度乘以其数值。例如初始状态的动画剪辑的播放时长是1秒,“Exit Time”取值0.5,表示的时长就是1*0.5(秒)=0.5(秒)。也可以理解为初始状态的播放时长的百分比。后面提到的标准化时间的原理和此处一致。
上文提到的条件A的具体定义:初始状态已播放的长度百分比大于“Exit Time”所表示的百分比。
所以,若勾选了“Has Exit Time”,那么需当初始状态已播放的长度百分比大于“Exit Time”所表示的百分比时,才开始过渡。
例如,勾选了“Has Exit Time”,“Exit Time”设置为0.75,那么初始状态播放完75%才能开始过渡。(若触发条件在75%之后,那直接开始过渡)

Transition Duration

过渡持续的时长。此参数只是表示时长的数值,通俗地讲就是不带单位的。单位由“Fixed Duration”决定,可能是秒或者“%”。

Fixed Duration

表示“Transition Duration”参数单位,配合其表示过渡持续的时长。勾选后表示“Transition Duration”的单位是秒,不勾选表示“Fixed Duration”是标准化时间,是初始状态时长的百分比(下文表述为初始状态的标准化时间)。例如,“Transition Duration”取0.5,勾选“Fixed Duration”,表示过渡持续的时长为0.5秒;不勾选,时长是初始状态时长的50%。

Transition Offset

目标状态的过渡偏移。 表示过渡开始时,目标状态从哪里开始参与过渡,是目标状态的标准化时间。

Interruption Source

打断来源(个人直译)。过渡的过程中是可以由某些其他过渡的触发而打断的,此参数指定过渡打断的方式。(具体参见我的另一个篇文章)

上述的参数在图中表示的位置如下:
参数在图中表示的位置
“Exit Time”决定过渡开始在初始状态上的百分比,“Transition Offset”决定过渡结束在目标状态上的百分比。
而“Transition Duration”决定过渡的时长。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值