unity SceneManager.sceneLoaded 每次sceneLoaded完成后callBack互相覆盖?

unity SceneManager.sceneLoaded callBack overlay each other when sceneLoaded is finished every time?

SceneManager.sceneLoaded += jumpCallBack;

我把它放在 Start() 中并使用

private void jumpCallBack(Scene scene, LoadSceneMode sceneType)
{
    Debug.Log("ok");
}

作为回调打印,我也有一个按钮,点击并再次加载这个场景。

第一次sceneLoaded完成,它打印了一次“ok”,我点击按钮再次加载场景,但是这次,它打印了两次“ok”。同时单击按钮并再次加载它打印 3 次。为什么 ?每次调用 sceneLoaded 时如何使此回调仅 运行 一次?

一般来说如果你想避免多次回调

  • 首先我通常会先退订再订阅。这是有效的,即使回调从未被添加过,但要确保它确实只存在一次 - 对于 this object

     SceneManager.sceneLoaded -= jumpCallBack;
     SceneManager.sceneLoaded += jumpCallBack;
    
  • 然后我认为到目前为止你很幸运你只使用了一个静态方法 Debug.Log 但你的回调中没有其他任何东西。我怀疑你的对象被销毁时忘记取消订阅了

    private void OnDestroy()
    {
        SceneManager.sceneLoaded -= jumpCallBack;
    }
    

除此之外,如果没有关于您的项目的更多详细信息,就很难说了。如果您正在使用例如DontDestroyOnLoad 那么您还需要确保该对象只有一个实例(单例模式)。