Unity 5上的OnLevelWasLoaded在哪里?
本文关键字:在哪里 OnLevelWasLoaded 上的 Unity | 更新日期: 2023-09-27 18:09:50
在这个新的unity版本中,我认为使用了SceneManager。但是我找不到如何在关卡上加载SceneManager。
旧方式:
void OnLevelWasLoaded(){
// do something
}
当我尝试旧的方式,我得到这个:
在MusicManager上发现了OnLevelWasLoaded此消息已被弃用,并将在Unity的后续版本中删除。向SceneManager添加一个委托。而不是在场景加载完成后获得通知
我不知道如何使用
SceneManager.sceneLoaded();
不知道传递什么
你必须把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'是我自己编的名字。你可以给你的方法起任何你喜欢的名字
您在
OnEnable
和OnDisable
函数中看到的是委托订阅。这仅仅意味着我们设置了a我们选择的函数(在本例中为OnLevelFinishedLoading
)听SceneManager
的电平变化还要注意,由于这个委托有两个参数(
Scene
和SceneMode
),你必须包括这两个参数,甚至如果你不打算在你的函数中使用这些信息。