Version: 2021.1

SceneManager.activeSceneChanged

切换到手册

参数

value 使用 UnityAction<Scene, Scene> 或某种方法(采用两个 Scene 类型参数)的订阅。

描述

订阅此事件可在活动场景发生变化时收到通知。

此添加到 activeSceneChanged 中的脚本具有两个隐藏参数,它们是被替换的场景和下一个场景。参数不可见。

在编辑器中,此事件仅在播放模式(而非编辑模式)下发送。如果需要在编辑模式下发送事件,请使用 EditorSceneManager.activeSceneChanged。

// 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"); } }