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;
}
}
新接口需要我们更加妥善的管理新版本委托函数的注册
网友评论