class in UnityEngine/Inherits from: ScriptableObject
tateMachineBehaviour is a component that can be added to a state machine state. It's the base class every script on a state derives from.
状态机行为是个可以添加状态机状态的组件。这是来自基类上的每个脚本派生的状态。
By default the Animator does instantiate a new instance of each behaviour define in the controller. The class attribute SharedBetweenAnimatorsAttribute control how behaviours are instantiated.
默认情况下,Animator示例化一个新的实例的每个行为在控制器中定义。该类属性SharedBetweenAnimatorsAttribute 控制如何实例化该行为。
StateMachineBehaviour has some predefined messages: OnStateEnter, OnStateExit, OnStateIK, OnStateMove, OnStateUpdate.
StateMachineBehaviour 有一些预定义的信息:OnStateEnter, OnStateExit, OnStateIK, OnStateMove, OnStateUpdate。
JavaScript:
#pragma strict public class AttackBehaviour extends StateMachineBehaviour { public var particle: GameObject; public var radius: float; public var power: float; protected var clone: GameObject; public override function OnStateEnter(animator: Animator, stateInfo: AnimatorStateInfo, layerIndex: int) { clone = Instantiate(particle, animator.rootPosition, Quaternion.identity) as GameObject; var rb: var = clone.GetComponent.<Rigidbody>(); rb.AddExplosionForce(power, animator.rootPosition, radius, 3.0f); } public override function OnStateExit(animator: Animator, stateInfo: AnimatorStateInfo, layerIndex: int) { Destroy(clone); } public override function OnStateUpdate(animator: Animator, stateInfo: AnimatorStateInfo, layerIndex: int) { Debug.Log("On Attack Update "); } public override function OnStateMove(animator: Animator, stateInfo: AnimatorStateInfo, layerIndex: int) { Debug.Log("On Attack Move "); } public override function OnStateIK(animator: Animator, stateInfo: AnimatorStateInfo, layerIndex: int) { Debug.Log("On Attack IK "); } }
C#:
using UnityEngine; public class AttackBehaviour : StateMachineBehaviour { public GameObject particle; public float radius; public float power; protected GameObject clone; override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { clone = Instantiate(particle, animator.rootPosition, Quaternion.identity) as GameObject; var rb = clone.GetComponent<Rigidbody>(); rb.AddExplosionForce(power, animator.rootPosition, radius, 3.0f); } override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Destroy(clone); } override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)