Unity 5上的OnLevelWasLoaded在哪里?

本文关键字:在哪里 OnLevelWasLoaded 上的 Unity | 更新日期: 2023-09-27 18:09:50

在这个新的unity版本中,我认为使用了SceneManager。但是我找不到如何在关卡上加载SceneManager。

旧方式:

void OnLevelWasLoaded(){
// do something
}

当我尝试旧的方式,我得到这个:

在MusicManager上发现了OnLevelWasLoaded此消息已被弃用,并将在Unity的后续版本中删除。向SceneManager添加一个委托。而不是在场景加载完成后获得通知

我不知道如何使用

SceneManager.sceneLoaded();

不知道传递什么

Unity 5上的OnLevelWasLoaded在哪里?

你必须把sceneLoaded作为一个事件。

sceneLoaded事件注册到Start()Awake()函数中

SceneManager.sceneLoaded += this.OnLoadCallback;

OnLoadCallback函数将在场景加载时被调用。

OnLoadCallback函数签名:

void OnLoadCallback(Scene scene, LoadSceneMode sceneMode)
{
}

这篇文章很好地解释了这一点:

旧方式:

 void OnLevelWasLoaded (int level)
 {
 //Do Something
 }

新方法:

     using UnityEngine.SceneManagement;
             void OnEnable()
             {
              //Tell our 'OnLevelFinishedLoading' function to start listening for a scene change as soon as this script is enabled.
                 SceneManager.sceneLoaded += OnLevelFinishedLoading;
             }
             void OnDisable()
             {
             //Tell our 'OnLevelFinishedLoading' function to stop listening for a scene change as soon as this script is disabled.
//Remember to always have an unsubscription for every delegate you
  subscribe to!
                 SceneManager.sceneLoaded -= OnLevelFinishedLoading;
             }
             void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
             {
                 Debug.Log("Level Loaded");
                 Debug.Log(scene.name);
                 Debug.Log(mode);
             }

注意'OnLevelFinishedLoading'是我自己编的名字。你可以给你的方法起任何你喜欢的名字

您在OnEnableOnDisable函数中看到的是委托订阅。这仅仅意味着我们设置了a我们选择的函数(在本例中为OnLevelFinishedLoading)听SceneManager的电平变化

还要注意,由于这个委托有两个参数(SceneSceneMode),你必须包括这两个参数,甚至如果你不打算在你的函数中使用这些信息。