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
那么您还需要确保该对象只有一个实例(单例模式)。
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
那么您还需要确保该对象只有一个实例(单例模式)。