Unity-Statemachinebehaviour状态机行为脚本
状态机行为脚本是什么?
状态机行为脚本时一类特殊的脚本,继承指定的基类
它主要用于关联到状态机中的状态矩形上我们可以按照一定规则编写脚本
当进入、退出、保持在某一个特定状态时我们可以进行一些逻辑处理
简单解释就是为 Animator Controller 状态机窗口中的某一个状态添加一个脚本
利用这个脚本我们可以做一些特殊功能
比如
进入或退出某一状态时播放声音
仅在某些状态下检测一些逻辑,比如是否接触地面等等
激活和控制某些状态相关的特效
如何使用状态机脚本
新建一个脚本继承 StateMachineBehaviour 基类
实现其中的特定方法进行状态行为监听
OnStateEnter 进入状态时,第一个 Update 中调用
OnStateExit 退出状态时,最后一个 Update 中调用
OnStateIK OnAnimatorIK 后调用
OnStateMove OnAnimatorMove 后调用
OnStateUpdate 除第一帧和最后一帧,每个 Update 上调用
OnStateMachineEnter 子状态机进入时调用,第一个 Update 中调用
OnStateMachineExit 子状态机退出时调用,最后一个 Update 中调用
处理对应逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class lesson18 : StateMachineBehaviour
{public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){if(stateInfo.IsName("HumanoidIdle"))Debug.Log("进入状态");}public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){if (stateInfo.IsName("HumanoidIdle"))Debug.Log("退出状态");}public override void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){if (stateInfo.IsName("HumanoidIdle"))Debug.Log("OnAnimatorIK被调用");}public override void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){if (stateInfo.IsName("HumanoidIdle"))Debug.Log("OnAnimatorMove被调用");}public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){if (stateInfo.IsName("HumanoidIdle"))Debug.Log("除第一帧和最后一帧,每个 Update 上调用");}}
效果