订阅此事件可在活动场景发生变化时收到通知。
此添加到 activeSceneChanged 中的脚本具有两个隐藏参数,它们是被替换的场景和下一个场景。参数不可见。
In the Editor this event is sent only in Play mode (not in Edit mode). If the event is needed for Edit mode then use
EditorSceneManager.activeSceneChangedInEditMode.
// SceneManager.activeSceneChanged // // This example configures Scene1 to wait for 1.5 seconds before switching to Scene2. // Scene1 is the replaced Scene; Scene2 is the new loaded Scene.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;
public class ScriptExample1 : MonoBehaviour { public delegate void Change(); public static event Change TimeChanged;
public void Start() { SceneManager.activeSceneChanged += ChangedActiveScene;
// wait 1.5 seconds before change to Scene2 StartCoroutine(TimeChangedScene()); }
IEnumerator TimeChangedScene() { print(Time.time + " seconds"); yield return new WaitForSeconds(1.5f); print(Time.time + " seconds");
// call the event TimeChanged(); }
private void ChangedActiveScene(Scene current, Scene next) { string currentName = current.name;
if (currentName == null) { // Scene1 has been removed currentName = "Replaced"; }
Debug.Log("Scenes: " + currentName + ", " + next.name); }
void OnEnable() { Debug.Log("OnEnable"); ScriptExample1.TimeChanged += ChangeScene; }
void ChangeScene() { Debug.Log("Changing to Scene2"); SceneManager.LoadScene("Scene2");
Scene scene = SceneManager.GetSceneByName("Scene2"); SceneManager.SetActiveScene(scene); }
void OnDisable() { ScriptExample1.TimeChanged -= ChangeScene; Debug.Log("OnDisable happened for Scene1"); } }
ScriptExample2
直接声明这是活动场景。
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ScriptExample2 : MonoBehaviour { void Start() { Debug.Log("Script2 starting"); } }