OnLevelWasLoaded废弃

2017-02-13  本文已影响1558人  carber

Unity 5.4的版本移除了OnLevelWasLoaded接口。
这个接口可以在MonoBehaviour Awake之后,在过场景的结束的时候被调用。
新版本提供SceneManager.sceneLoaded这个委托函数来做更灵活的调用。

为了和以前的逻辑一致一般我们会在Awake之后注册这个委托函数,然后再这个函数执行结束之后取消注册,当对象的生命周期为只在当前场景的时候。

using UnityEngine;
using UnityEngine.SceneManagement;
class MyClass : MonoBehaviour {
    void Awake() {
        // do somethings
        SceneManager.sceneLoaded += OnSceneLoaded;
    }

    void OnSceneLoaded(UnityEngine.SceneManagement.Scene scene, LoadSceneMode mode) {
        // do things after scene loaded.
        // Remove the delegate when no need.
        SceneManager.sceneLoaded -= OnSceneLoaded; 
    }
}

如果我们想在第一个场景被加载之前就注册这个函数,可以通过RuntimeInitializeLoadType来做到

using UnityEngine;
using UnityEngine.SceneManagement;
class MyClass : MonoBehaviour {
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void OnRuntimeMethodLoad() {
        // Add the delegate to be called when the scene is loaded, between Awake and Start.
        SceneManager.sceneLoaded += SceneLoaded;
    }
    static void SceneLoaded(Scene scene, LoadSceneMode loadSceneMode) {
        Debug.Log(System.String.Format("Scene{0} has been loaded ({1})", scene.name, loadSceneMode.ToString()));
    }
    void OnDestroy() {
        // Remove the delegate when the object is destroyed
        SceneManager.sceneLoaded -= SceneLoaded;
    }
}

新接口需要我们更加妥善的管理新版本委托函数的注册

上一篇下一篇

猜你喜欢

热点阅读