【问题标题】:Where is OnLevelWasLoaded on Unity 5?Unity 5 上的 OnLevelWasLoaded 在哪里?
【发布时间】:2016-09-30 22:47:38
【问题描述】:

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

老办法:

void OnLevelWasLoaded(){
// do something
}

当我尝试旧方法时,我得到了这个:

在 MusicManager 上找到 OnLevelWasLoaded 此消息已被弃用,并将在更高版本的 Unity 中删除。 将委托添加到 SceneManager.sceneLoaded 以在场景加载完成后获取通知

我不知道怎么用

SceneManager.sceneLoaded();

不知道该通过什么...

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    你必须sceneLoaded作为一个事件。

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

    SceneManager.sceneLoaded += this.OnLoadCallback;
    

    然后在加载场景时调用OnLoadCallback 函数。

    OnLoadCallback 函数签名:

    void OnLoadCallback(Scene scene, LoadSceneMode sceneMode)
    {
    
    }
    

    【讨论】:

    • 为什么他们甚至改变了...我不明白为什么我需要这样做+= ??
    • 我仍然不明白为什么我需要这样做+=。但它有效。谢谢
    • += 用于订阅事件。-= 用于取消订阅事件。请在使用 Unity 之前学习基本的 C# 知识。 Here 是事件和委托的教程。
    • @MikeB 这个问题解释了如何订阅OnLoadCallback 函数并解决了OP的问题。如果它不适合您,请创建一个新问题,然后将此答案链接为您尝试过的内容。还要在该帖子中提及您的 Unity 版本。
    • @JonathanWalker “令人沮丧”?如果那是我想做的,我不会提供教程链接来帮助 OP 理解这一点。我的评论没有误导性。 +=-= 确实用于许多其他目的,但这个答案是关于订阅一个事件,所以我只谈到了这一点。 您似乎对这个答案和评论中的几乎所有内容感到冒犯,但这对我来说很好。请注意我是如何在该声明前添加“请”的。您需要基本的 C# 知识才能使用 Unity 制作游戏,我会根据人们发布的问题或评论告诉他们这一点。
    【解决方案2】:

    这在this post中有很好的解释:

    老办法:

     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 函数中看到的是 委托订阅。这仅仅意味着我们正在设置一个 我们选择的函数(在这种情况下,OnLevelFinishedLoading) 收听SceneManager 了解关卡变化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      相关资源
      最近更新 更多