代码创建动画状态机

Unity的动画状态机有以下一些特性:

1:动画状态机是无法直接获取到指定名称的状态的,这也就意味着,你不能加载一个已有的状态机,然后对其中的状态或状态连线做修改,只能是完全重新创建整个状态机。

2:在子状态机中,无法手动创建(Up)Base Layer节点到其他节点的连线。

3:假设有子状态机,play_anim和Jump_Fall 如下图:

当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:

当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:

此时(Up)Base Layer是没有到其他状态的连线的。

当没有AnyState状态连接到Jump_Fall,但有其他节点连接到它时,如下图:

代码创建动画状态机_第1张图片

此时可以看到(Up)BaseLayer自动连接到了Entry状态。此时AnyState状态也没有到其他状态的连线。

4:在子状态机中,如果想创建AnyState到其他节点的连线,需要调用如下语句:


machine是父状态机,forward是子状态,结果如下:


5:machine.AddStateMachineTransition()可以创建子状态机到子状态机,状态到子状态机,子状态机到状态的连线。

6state.AddTransition()可以创建状态到子状态机,状态到状态的连线。

7state.AddExitTransition()可以创建状态到Exit状态的连线。

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

代码创建动画状态机_第2张图片

如果想手动添加Entry连线到其他状态(非默认状态)的连线,则需要如下所示:


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

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

如果条件参数类型枚举为If,IfNot,则第二个参数无作用,表示bool类型参数,If表示trueIfNot表示false,与参数的默认值无关。

如果条件参数为触发器类型,则条件参数类型枚举需要选择Equals,第二个参数无作用,填0即可。

代码创建动画状态机_第3张图片

10:在UI界面上,只有AnyState到其他节点的连线才会有canTransitionToSelf选项。:

11:创建控制器

AnimatorController.CreateAnimatorControllerAtPath

12:添加创建参数:

原来的API不带默认参数,我增加了扩展方法:

13:获取状态机

AnimatorControllerLayer layerBase = ctrl.layers[0];

AnimatorStateMachine machine = layerBase.stateMachine;

14:创建状态机,并设置AnyState,Entry,Exit,(UpBaseLayer)节点的位置:

添加状态:

代码创建动画状态机_第4张图片

15:所有节点的坐标是从左向右,从上到下依次增大。

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


你可能感兴趣的:(Unity开发工具)