Unity的动画状态机有如下一些特性:less
1:动画状态机是没法直接获取到指定名称的状态的,这也就意味着,你不能加载一个已有的状态机,而后对其中的状态或状态连线作修改,只能是彻底从新建立整个状态机。动画
2:在子状态机中,没法手动建立(Up)Base Layer节点到其余节点的连线。spa
3:假设有子状态机,play_anim和Jump_Fall 以下图:blog
当只有AnyState到play_anim的连线,没有其余状态链接到它,以下图:ip
当只有AnyState到play_anim的连线,没有其余状态链接到它,以下图:it
此时(Up)Base Layer是没有到其余状态的连线的。io
当没有AnyState状态链接到Jump_Fall,但有其余节点链接到它时,以下图:cli
此时能够看到(Up)BaseLayer自动链接到了Entry状态。此时AnyState状态也没有到其余状态的连线。扩展
4:在子状态机中,若是想建立AnyState到其余节点的连线,须要调用以下语句:float
machine是父状态机,forward是子状态,结果以下:
5:machine.AddStateMachineTransition()能够建立子状态机到子状态机,状态到子状态机,子状态机到状态的连线。
6:state.AddTransition()能够建立状态到子状态机,状态到状态的连线。
7:state.AddExitTransition()能够建立状态到Exit状态的连线。
8:以下图,在JumpFall状态机中,不须要手动添加Entry到fall的连线,系统会自动添加上,前提是fall状态是第一个被建立的自定义状态,必定要注意第一个被建立的状态就是该状态机的默认状态,Entry到此默认状态的连线时黄色的,若是手动添加,连线上会出现多箭头的状况。
若是想手动添加Entry连线到其余状态(非默认状态)的连线,则须要以下所示:
9:以下图,AddCondition添加一个转换条件,其中第一个参数为条件参数类型枚举。第三个参数为条件参数名。
若是条件参数类型枚举为less,Greater,Equals,NotEqual,则第二个参数的值为条件参数的值,表示Int或float类型参数。
若是条件参数类型枚举为If,IfNot,则第二个参数无做用,表示bool类型参数,If表示true,IfNot表示false,与参数的默认值无关。
若是条件参数为触发器类型,则条件参数类型枚举须要选择Equals,第二个参数无做用,填0便可。
10:在UI界面上,只有AnyState到其余节点的连线才会有canTransitionToSelf选项。:
11:建立控制器
AnimatorController.CreateAnimatorControllerAtPath
12:添加建立参数:
原来的API不带默认参数,我增长了扩展方法:
13:获取状态机
AnimatorControllerLayer layerBase = ctrl.layers[0];
AnimatorStateMachine machine = layerBase.stateMachine;
14:建立状态机,并设置AnyState,Entry,Exit,(UpBaseLayer)节点的位置:
添加状态:
15:全部节点的坐标是从左向右,从上到下依次增大。
16:state.motion设置状态对应的clip文件。只有设置了clip文件,Settings里的属性才会自动变化,固然某些选项是须要用户手动编辑的,没法自动生成。