版本:Unity 6 (6000.0)
语言英语
  • C#

SceneManager.activeSceneChanged

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

参数

使用 UnityAction<Scene, Scene> 的订阅或一个接收两个 Scene 类型参数的方法。

描述

订阅此事件以在活动场景发生更改时收到通知。

添加到 activeSceneChanged 的此脚本接受两个隐藏参数。它们分别是替换的场景和下一个场景。这些参数不可见。

在编辑器中,此事件仅在播放模式下发送(不在编辑模式下发送)。如果在编辑模式下需要此事件,请使用 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"); } }