美文网首页
OnLevelWasLoaded废弃

OnLevelWasLoaded废弃

作者: carber | 来源:发表于2017-02-13 19:58 被阅读1558次

    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;
        }
    }
    
    

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

    相关文章

      网友评论

          本文标题:OnLevelWasLoaded废弃

          本文链接:https://www.haomeiwen.com/subject/qfytwttx.html