Unity-Animator深入系列---状态机面板深入
1.状态
1.1状态简介
简单的不做介绍了,需要特别注意:
Paramter勾选后可以指定参数控制具体属性
Write Defaults勾选后表示播放这个状态时,是只运用动画剪辑修改的几个关键字属性(不勾选),还是应用所有属性(勾选)。
举个例子,一个第三人称角色动画状态机,走跑跳等都齐全。
现在要加入一个只有挥手动画的动画剪辑到状态,期望是不管角色是站立还是坐下,都只播放挥手就行,
并且这个动画剪辑的FBX里,也只给了挥手;手部关节做了关键帧。
这时不勾选Write Defaults是正常的,不管站立坐下,播到这个状态就挥手。勾选Write Default会覆盖动画已写的属性,如果动画
初始化时是站立,就一直都是站立挥手,如果动画初始化时是坐下,就一直是坐下挥手。
Foot IK 勾选上之后会有一个脚部IK修正,有一次角色跑动不自然,
当我勾选上就好了(http://www.cnblogs.com/hont/p/5602447.html)
至于斜坡地形的脚步自适配,这个好像不是很好用
Mirror镜像可以反转当前动画,大幅减少动画师工作量
Cycle Offset
周期偏移,会影响动画开始的起始位置
1.1子状态机
右键即可添加子状态机,子状态机中可以放入若干状态,一般都会用到。
这里有个小技巧,在子状态机里双击空白处可以立即跳回主状态
另一个小技巧是,直接往子状态机里拖拽状态,可以直接拖进去(方便再点开编辑)。
1.2混合树
混合树可以参考官方状态机项目的Generic Skeleton Example
右键Create State>From New Blend Tree即可创建混合树
Blend Type可以设置混合树类型,右下角加号可以添加新的运动进入混合树,或者添加子混合树
回到状态机面板可以点击左上角:
这里不多做介绍,可以看官方的Generic Skeleton Example
补充:具体项目中,可以用AssetDatabase接口单独创建独立的混合树,更有利于开发。
2.Transition
2.1 has exit time
下图左边是Has Exit Time勾上,右边是没勾
可以看见勾上后,等状态结束才会切换状态。而不勾上任何时候都可以切换
2.2 Interruption Source
假设有状态A,B,C。当前状态机为:A-(传递中)>B->C
此时设置打断源为下一个状态,即Next State,这时即使在动画传递中,也会相应下一状态的传递条件,
直接传递。
该功能非常重要,如果经常感觉状态机反应慢,不及时。可查看其设置是否正确。
2.3.Solo与Mute
这个功能用在调试时,Mute相当于把目标过渡禁用掉。Solo表示只生效这一条过渡
可以多选,当选中后会出现箭头提示
条件满足优先于Solo/Mute,当条件没有满足时依然不会过渡
3.FBX设置面板
3.1.循环匹配(面板红绿灯)
当设置了根骨骼后,Unity会自动帮你进行循环匹配的测试
所以匹配就是指动画开始和结束的根骨骼位置是否有偏离
但有些动画肯定是要有偏离的,所以这个匹配只是作为参考
通过拖动时间轴,可以看见运动曲线:
3.2 Curves
可在动画片段处配置曲线,曲线名和Animator参数同名即可被驱动:
4.Layers Setting
4.1.层的设置
点击齿轮按钮,即可设置层的参数
Weight - 层的权重,多个层时可以设置
Mask - 身体遮罩对层的影响,在Create>Avatar Mask中可以创建。这个可以参考Unity状态机例子工程的Animator Controller场景
Blending - 混合模式,可以看下图
Sync - 同步层,打开后2个层所有状态同步,且不可编辑。但可以替换动画剪辑。类似Animator Override Controller,官方表示比如需要做负伤状态的动画,可以使用该功能,替换成负伤状态的移动,空闲等
Timing - 当打开Sync时,才可以打开该选项。这时同步层可以取得被同步层的控制权
下图中默认的剪辑长度是90帧,而同步层的剪辑长度是299帧。可见,如果同步层的剪辑长度不一致,会出现加速的情况
如果不想加速就打开这个开关
(左边是开启Timing,右边是未开启)
IK Pass - 开启这个选项后,脚本才可以控制IK。