Unity StateMachineBehaviour
在unity animator中单个Animator Clip中点击Add Behaviour增加当执行该动画时的一些状态代码,请看如下

创建完之后基本代码结构如下:(如果想修改默认代码结构,请看示例:教程示例)
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Hero_walk : StateMachineBehaviour
6 {
7 // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
8 //override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
9 //{
10 //
11 //}
12
13 // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
14 //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
15 //{
16 //
17 //}
18
19 // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
20 //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
21 //{
22 //
23 //}
24
25 // OnStateMove is called right after Animator.OnAnimatorMove()
26 //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
27 //{
28 // // Implement code that processes and affects root motion
29 //}
30
31 // OnStateIK is called right after Animator.OnAnimatorIK()
32 //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
33 //{
34 // // Implement code that sets up animation IK (inverse kinematics)
35 //}
36 }
我们在来看一下StateMachineBehaviour元数据
1 #region 程序集 UnityEngine.AnimationModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
2 // D:\WorkTools\Unity\2019.4.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll
3 #endregion
4
5 using UnityEngine.Animations;
6 using UnityEngine.Scripting;
7
8 namespace UnityEngine
9 {
10 //
11 // 摘要:
12 // StateMachineBehaviour is a component that can be added to a state machine state.
13 // It's the base class every script on a state derives from.
14 [RequiredByNativeCode]
15 public abstract class StateMachineBehaviour : ScriptableObject
16 {
17 protected StateMachineBehaviour();
18
19 public virtual void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex);
20 public virtual void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller);
21 public virtual void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex);
22 public virtual void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller);
23 public virtual void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex);
24 public virtual void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller);
25 //
26 // 摘要:
27 // Called on the first Update frame when making a transition to a state machine.
28 // This is not called when making a transition into a state machine sub-state.
29 //
30 // 参数:
31 // animator:
32 // The Animator playing this state machine.
33 //
34 // stateMachinePathHash:
35 // The full path hash for this state machine.
36 public virtual void OnStateMachineEnter(Animator animator, int stateMachinePathHash);
37 public virtual void OnStateMachineEnter(Animator animator, int stateMachinePathHash, AnimatorControllerPlayable controller);
38 //
39 // 摘要:
40 // Called on the last Update frame when making a transition out of a StateMachine.
41 // This is not called when making a transition into a StateMachine sub-state.
42 //
43 // 参数:
44 // animator:
45 // The Animator playing this state machine.
46 //
47 // stateMachinePathHash:
48 // The full path hash for this state machine.
49 public virtual void OnStateMachineExit(Animator animator, int stateMachinePathHash);
50 public virtual void OnStateMachineExit(Animator animator, int stateMachinePathHash, AnimatorControllerPlayable controller);
51 public virtual void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex);
52 public virtual void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller);
53 public virtual void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex);
54 public virtual void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex, AnimatorControllerPlayable controller);
55 }
56 }
是不是很方便呢,今天刚好找到了这个东西
Unity StateMachineBehaviour的更多相关文章
- Unity的stateMachineBehaviour
Unity5新增的StateMachineBehaviour是对状态机的内置,确实方便了很多,这里记录它的两个问题: 1.如果正在执行的状态被打断,当前状态的OnStateExit不会被执行,该问题在 ...
- Unity 动画系统 StateMachineBehaviour 动画状态机
- Unity-Animator深入系列---StateMachineBehaviour初始化时间测试
回到 Animator深入系列总目录 结果和想的有点出入 测试结果: 1.SMB初始化会被调用多次,次数不可控,当Animator组件重复开关则重复初始化. 2.SMB支持构造函数 MyClass p ...
- 从Unity中的Attribute到AOP(七)
本章我们将依然讲解Unity中的Attribute,继续命名空间在UnityEngine里的. PropertyAttribute,这个特性主要来控制变量或者类在Inspector里面的显示方式.和P ...
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- 【Unity】状态机的状态改变及其回调
问:怎么知道状态机发生了改变?即如何得知从一个状态切换到了另一个状态? 答:Unity使用StateMachineBehaviours类来描述状态机的行为,当状态机处于不同的状态时,会触发不同的回调. ...
- Unity 动画系统目录 之 Animation
返回 Unity 动画系统目录 官方文档 Animation:https://docs.unity3d.com/ScriptReference/Animation.html Animator:http ...
- Unity C# 关于Attribute的使用
最近在研究Attribute,感觉挺好玩,搜到一篇不错的文章,分享给大家 原文:未知?找到后补上! 举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Uni ...
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
随机推荐
- 普里姆算法(Prim)
概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图(带权图)里搜索最小生成树.即此算法搜索到的边(Edge)子集所构成的树中,不但包括了连通图里的所有顶点(Vertex)且其所有边的权 ...
- 啥?SynchronousQueue和钟点房一个道理
今天这篇文章,我们继续讲架构师大刘的故事. 大刘有段时间经常会给一些程序员讲课.这一方面是由于团队培训的需要,一方面也是大刘自身想搞搞凡尔赛,嘚瑟一下自身的实力. 大刘讲课是允许公司任何一个人进去听的 ...
- [bug] eclipse 点击new菜单后没有新建java project或class选项
参考 https://blog.csdn.net/u013001763/article/details/54405758
- [PTA]7-3 逆序的三位数 (10分)
要求: 程序每次读入一个正3位数,然后输出按位逆序的数字.注意:当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 正确思路: 拆分字符串后拼接成整数 1 #includ ...
- [前端] AJAX
背景 Asynchronous JavaScript And XML:异步js和XML,可实现异步刷新 用途 验证提交的用户名是否已存在 不使用AJAX,需要提交数据后,刷新页面来验证 使用AJAX, ...
- 有没有一种组合字体,中文是宋体,英文是times new roman?
有没有一种组合字体,中文是宋体,英文是times new roman? 由于日常科研工作书写需要,想问问各位大神有没有一种字体,中文是宋体,西文是times new roman,这样写论文好方便啊有没 ...
- 攻防世界-WEB-新手练习区
附:|>>>攻防世界-WEB-高手进阶区<<<|
- Scala 函数式编程思想
Spark 选择 Scala 作为开发语言 在 Spark 诞生之初,就有人诟病为什么 AMP 实验室选了一个如此小众的语言 - Scala,很多人还将原因归结为学院派的高冷,但后来事实证明,选择 S ...
- Markdown 使用文档
MarkDown 简介 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分 ...
- C/C++ 复习
本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, ne ...