代码创建动画状态机
2018-01-19 09:54
387 查看
Unity的动画状态机有以下一些特性:
1:动画状态机是无法直接获取到指定名称的状态的,这也就意味着,你不能加载一个已有的状态机,然后对其中的状态或状态连线做修改,只能是完全重新创建整个状态机。
2:在子状态机中,无法手动创建(Up)Base Layer节点到其他节点的连线。
3:假设有子状态机,play_anim和Jump_Fall 如下图:
当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:
当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:
此时(Up)Base Layer是没有到其他状态的连线的。
当没有AnyState状态连接到Jump_Fall,但有其他节点连接到它时,如下图:
此时可以看到(Up)BaseLayer自动连接到了Entry状态。此时AnyState状态也没有到其他状态的连线。
4:在子状态机中,如果想创建AnyState到其他节点的连线,需要调用如下语句:
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里的属性才会自动变化,当然某些选项是需要用户手动编辑的,无法自动生成。
1:动画状态机是无法直接获取到指定名称的状态的,这也就意味着,你不能加载一个已有的状态机,然后对其中的状态或状态连线做修改,只能是完全重新创建整个状态机。
2:在子状态机中,无法手动创建(Up)Base Layer节点到其他节点的连线。
3:假设有子状态机,play_anim和Jump_Fall 如下图:
当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:
当只有AnyState到play_anim的连线,没有其他状态连接到它,如下图:
此时(Up)Base Layer是没有到其他状态的连线的。
当没有AnyState状态连接到Jump_Fall,但有其他节点连接到它时,如下图:
此时可以看到(Up)BaseLayer自动连接到了Entry状态。此时AnyState状态也没有到其他状态的连线。
4:在子状态机中,如果想创建AnyState到其他节点的连线,需要调用如下语句:
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里的属性才会自动变化,当然某些选项是需要用户手动编辑的,无法自动生成。
相关文章推荐
- 代码创建动画状态机
- Silverlight实用窍门系列:20.后台CS代码中创建四种常用的动画效果【附带源码实例】
- 【游戏开发】[用代码创建unity5.X的动画状态机]
- Silverlight 代码创建动画 原创示例
- unity 代码创建控制骨络动画
- 用代码动态创建状态机
- 从Flash到Silverlight进阶教程-用代码来创建动画
- 代码创建 WPF 旋转、翻转动画(汇总)
- 【iOS开发-50】利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验,附带个动画
- 代码创建 WPF 旋转动画
- silverlight如何在运行时用代码动态控制(或创建)动画
- 第15章 动画基础(1)——概述、通过代码创建动画和动画的生命周期
- Silverlight后台CS代码中创建四种常用的动画效果
- proxool代码创建数据库连接与获取监控状态
- cs代码创建的控件实现属性动画
- Silverlight后台CS代码中创建四种常用的动画效果
- cocos2d-x 3.2用代码创建UI动画,暂时最好不要用Cocos Studio 1.6导出的UI动画
- 代码创建 WPF 旋转动画