StateMachineBehaviour 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 controls how behaviours are instantiated.
StateMachineBehaviour has some predefined messages:
OnStateEnter, OnStateExit, OnStateIK, OnStateMove, OnStateUpdate.
      
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; Rigidbody 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) { Debug.Log("On Attack Update "); }
override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("On Attack Move "); }
override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Debug.Log("On Attack IK "); } }
| OnStateMachineEnter | Called on the first Update frame when making a transition to a state machine. This is not called when making a transition into a state machine sub-state. | 
| OnStateMachineExit | Called on the last Update frame when making a transition out of a StateMachine. This is not called when making a transition into a StateMachine sub-state. | 
| OnStateEnter | Called on the first Update frame when a state machine evaluate this state. | 
| OnStateExit | Called on the last update frame when a state machine evaluate this state. | 
| OnStateIK | Called right after MonoBehaviour.OnAnimatorIK. | 
| OnStateMove | Called right after MonoBehaviour.OnAnimatorMove. | 
| OnStateUpdate | Called at each Update frame except for the first and last frame. | 
| hideFlags | Should the object be hidden, saved with the Scene or modifiable by the user? | 
| name | The name of the object. | 
| GetInstanceID | Gets the instance ID of the object. | 
| ToString | Returns the name of the object. | 
| Destroy | Removes a GameObject, component or asset. | 
| DestroyImmediate | Destroys the object obj immediately. You are strongly recommended to use Destroy instead. | 
| DontDestroyOnLoad | Do not destroy the target Object when loading a new Scene. | 
| FindAnyObjectByType | Retrieves any active loaded object of Type type. | 
| FindFirstObjectByType | Retrieves the first active loaded object of Type type. | 
| FindObjectOfType | Returns the first active loaded object of Type type. | 
| FindObjectsByType | Retrieves a list of all loaded objects of Type type. | 
| FindObjectsOfType | Gets a list of all loaded objects of Type type. | 
| Instantiate | Clones the object original and returns the clone. | 
| CreateInstance | Creates an instance of a scriptable object. | 
| bool | Does the object exist? | 
| operator != | Compares if two objects refer to a different object. | 
| operator == | Compares two object references to see if they refer to the same object. | 
| Awake | This function is called when the ScriptableObject script is started. | 
| OnDestroy | This function is called when the scriptable object will be destroyed. | 
| OnDisable | This function is called when the scriptable object goes out of scope. | 
| OnEnable | This function is called when the object is loaded. | 
| OnValidate | Editor-only function that Unity calls when the script is loaded or a value changes in the Inspector. | 
| Reset | Reset to default values. |