Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
来源:互联网 发布:机器视觉主流算法 编辑:程序博客网 时间:2024/06/06 09:12
Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
1.动画混合树
混合树表示多个状态的混合调用,一般根据某些参数来实现这些动画状态之间的混合与切换,根据参数的个数可以分为1D混合、2D混合和直接混合。比如在之前的案例中,我们通过控制Float参数Speed实现了Idle、Run、Walk之间的过渡,我们这里也可以通过混合树来实现。1D混合如下图所示。
- 设定混合类型为1D
- 添加混合参数Speed
添加Motion,并设定Motion在的门坎值。
我们通过一个混合树就实现了之前通过三个状态并设定过渡条件实现的功能。
除了1D混合,我们还可以2D混合,2D混合有三种不同类型:
- 2D simple Directional,表示在二维每个空间方向只能有一个动作;
- 2D Freedom Directional,表示在二维每个空间方向可以有两个动作,但是必须一个是Idle。
2D Freedom Cartesian,表示在笛卡尔二维空间中各个方向可以随便设定动作。这个是最常用的。
下面我们在1D的基础上,增加三个动作,后退、左转和右转,那么1D混合满足不了需求了,我们需要用2D混合类型,通过2D类型控制了6个Motion的切换。
2.子状态机子状态相当于在目前层的状态机下面建立一个自状态集合,可以将类似的动画装填结合在一起,简化动画逻辑。典型的子状态机如下所示(Attack是子状态机):
3.状态行为状态行为即为状态机中的状态添加脚本,在状态进入、更新事件、IK、根动画时进行一些脚本控制。
状态行为脚本继承的类是StateMachineBehaviour,包括五个回调函数。他们的回调时机可以从Unity提供的注释得知:
using UnityEngine;using System.Collections;public class Test : StateMachineBehaviour { // OnStateEnter is called before OnStateEnter is called on any state inside this state machine //override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateUpdate is called before OnStateUpdate is called on any state inside this state machine //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateExit is called before OnStateExit is called on any state inside this state machine //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateMove is called before OnStateMove is called on any state inside this state machine //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateIK is called before OnStateIK is called on any state inside this state machine //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateMachineEnter is called when entering a statemachine via its Entry Node //override public void OnStateMachineEnter(Animator animator, int stateMachinePathHash){ // //} // OnStateMachineExit is called when exiting a statemachine via its Exit Node //override public void OnStateMachineExit(Animator animator, int stateMachinePathHash) { // //}}
状态行为可以用于添加状态发生时的音效、控制碰撞检测代码等。
阅读全文
0 0
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity Mecanim动画的实现(七):动画曲线
- Unity Mecanim动画的实现(七):动画曲线
- C# FSM (仿Unity 中的Mecanim动画系统的状态机)
- Unity Mecanim动画的实现(二):Avatar的配置
- Unity Mecanim动画的实现(一):基本程序
- Unity Mecanim动画的实现(四):Animation Controller设置
- Unity Mecanim动画的实现(八):Animation视图
- Unity Mecanim动画的实现(八):Animation视图
- Unity Mecanim动画的实现(四):Animation Controller设置
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Unity Mecanim动画的实现(九):动画层、遮罩与Ik动画
- Unity Mecanim动画的实现(九):动画层、遮罩与Ik动画
- Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关
- Unity 动画系统-Mecanim
- Unity Mecanim动画的实现(五):实现武器的切换
- 在Linux的Eclipse中编译使用动态链接库
- DES加解密工具类
- python 中trick 总结(一)
- Android_UI:Drawable
- Spring管理hibernate
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Android中怎样防止内存泄漏?
- 收集各种API文档,提供下载.chm文件,HTML、java、w3school、servlet、js、spring、等等。
- 远程检测客户机上的共享设置情况
- 日志的生成
- 谈谈对「工控安全」和「产品经理」的理解
- AOP学习笔记(一)—— 代理
- 线程间通信的方式
- H5游戏研发发展