前阵子在做动画相关的内容,整理一下Animator。
1.动画切换
1.1状态之间的切换,在状态间连线(Make Transition),并且设置触发条件,代码里调用SetTrigger、SetBool等进行触发。
1.2Transition的属性
Has Exit Time:勾选表示需要播完动画才能退出
Exit Time:动画退出的时间,例如0.8表示播放80%的动画就可以转换到下一个状态。
Fixed Duration:勾选表示固定时间,不勾选表示百分比。
Transition Time:过渡时间
Transition Offset:目标状态开始的时间,0.2表示是20%开始播放。
Interruption Source和Ordered Interruption我也没用过。。。只是看过一篇关于这个的文章http://www.manew.com/thread-142391-1-1.html
Conditions:可以设置N个跳转的条件。
1.3动画融合的函数
CrossFade函数,CrossFade(string stateName, float normalizedTransitionDuration, int layer, float normalizedTimeOffset)
stateName:目标状态的名字
normalizedTransitionDuration:过渡的时间为百分比,和上面的Transition Time相似
layer:层级,-1和0都是BaseLayer
normalizedTimeOffset:目标动画开始的偏移量,和上面的Transition Offset相似
CrossFadeInFixedTime(int stateHashName, float fixedTransitionDuration, int layer, float fixedTimeOffset)函数,第二个和第四个参数表示具体时间。其他和CrossFade一样
当crossfade的参数和上面连线的Transition参数一样时,可以获得一样的过渡效果。
1.4play函数
play函数,直接播放动画,没有融合。
2.子状态机
可以把相关状态的做成一个状态集合,比如一个防御状态集合下面有普通防御、防御格挡、防御反击的子状态。可以使逻辑更清晰。
3.Blend Tree混合树
最适合做移动动画的混合树,把前后左右移动的动画混合,通过参数的具体数值表现不同的混合动画。
4.layer动画层级
baselayer可以用来处理基本的动作切换,层级更高的动画可以做附加的一些动画用于混合,比如表情。
新建层级
weight:层的权重
Mask:身体遮罩(下图表示只显示头部动画)
Blending:override表示覆盖,addtive表示叠加
sync:表示与某个层(source layer里选择)的状态机同步,但是可以替换其中的动画。可以用在受伤时或者其他类似的情况。
Timing:勾选就是按复制层播放,不勾选就是按source层播放
IK pass:使用IK(反向动力学)动画,根据骨骼节点推算其父节点的位置。
想到之前的游戏有硬直打断感觉与Animator息息相关,又能说好些东西,之后捋一捋发吧。。。