首页 > 解决方案 > Unity OnStateExit StateMachineBehaviour 永远不会被调用

问题描述

我的动画状态附加了一个脚本,如下所示: 动画

脚本如下:

using UnityEngine;

public class TrackHelpDuration : StateMachineBehaviour 
{
     // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 
    {
        Debug.Log("entering state");
        if (GameSession.timeSpentOnRemedialHint > 0)
            GameSession.updateTime(11);
    }

    // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) 
    {
        Debug.Log("exiting state");
        if (GameSession.timeSpentOnRemedialHint > 0)
            GameSession.updateTime(11);
    }
}

虽然OnStateEnter按预期工作,但OnStateExit永远不会被调用。我如何使它工作?


我发现一个问题说同样的话,但那是 3 年前。 https://issuetracker.unity3d.com/issues/mecanim-onstateexit-method-never-gets-called-when-next-state-becomes-active

标签: unity3d

解决方案


这是一个迟到的答案,但可能会帮助其他有同样问题的人。

override public void OnStateExit

回调将在“状态更改”时自动调用,这意味着当“当前状态退出”时,您可能假设它在动画完成时调用。

TL;博士。

就调用该函数而言,您必须将动画状态移动到另一个状态。希望能帮助到你


推荐阅读