代码建立动画状态机

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()能够建立子状态机到子状态机,状态到子状态机,子状态机到状态的连线。

6state.AddTransition()能够建立状态到子状态机,状态到状态的连线。

7state.AddExitTransition()能够建立状态到Exit状态的连线。

8:以下图,在JumpFall状态机中,不须要手动添加Entry到fall的连线,系统会自动添加上,前提是fall状态是第一个被建立的自定义状态,必定要注意第一个被建立的状态就是该状态机的默认状态,Entry到此默认状态的连线时黄色的,若是手动添加,连线上会出现多箭头的状况。

若是想手动添加Entry连线到其余状态(非默认状态)的连线,则须要以下所示:


9:以下图,AddCondition添加一个转换条件,其中第一个参数为条件参数类型枚举。第三个参数为条件参数名。

若是条件参数类型枚举为less,Greater,Equals,NotEqual,则第二个参数的值为条件参数的值,表示Intfloat类型参数。

若是条件参数类型枚举为If,IfNot,则第二个参数无做用,表示bool类型参数,If表示trueIfNot表示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:全部节点的坐标是从左向右,从上到下依次增大。

16state.motion设置状态对应的clip文件。只有设置了clip文件,Settings里的属性才会自动变化,固然某些选项是须要用户手动编辑的,没法自动生成。