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

SceneManager.LoadScene

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public static void LoadScene(int sceneBuildIndex, SceneManagement.LoadSceneMode mode = LoadSceneMode.Single);

声明

public static void LoadScene(string sceneName, SceneManagement.LoadSceneMode mode = LoadSceneMode.Single);

参数

sceneName 要加载的场景的名称或路径。
sceneBuildIndex 要在构建设置中加载的场景的索引。
mode 允许您指定是否以附加方式加载场景。有关选项的更多信息,请参阅 LoadSceneMode

描述

根据其在构建设置中的名称或索引加载场景。

注意:在大多数情况下,为了避免加载期间出现暂停或性能问题,您应该使用此命令的异步版本,即:LoadSceneAsync

当使用 SceneManager.LoadScene 时,场景将在下一帧加载,也就是说它不会立即加载。这种半异步行为会导致帧卡顿,并且可能令人困惑,因为加载不会立即完成。

因为加载设置为在下一渲染帧完成,所以调用 SceneManager.LoadScene 会强制所有先前的 AsyncOperations 完成,即使 AsyncOperation.allowSceneActivation 设置为 false。为避免这种情况,请改用 LoadSceneAsync

给定的 sceneName 可以是场景名称本身(不带 .unity 扩展名),也可以是 BuildSettings 窗口中显示的路径(同样不带 .unity 扩展名)。如果只给出场景名称,这将加载列表中第一个匹配的场景。如果您有多个具有相同名称但路径不同的场景,则应使用完整路径。

请注意,sceneName 不区分大小写,除非您从 AssetBundle 加载场景。

有关在编辑器中打开场景,请参阅 EditorSceneManager.OpenSceneSceneA 可以多次附加加载 SceneB。常规名称用于每个加载的场景。如果 SceneA 加载 SceneB 十次,则每个 SceneB 将具有相同的名称。无法找到特定的已添加场景。

如果加载单个模式场景,Unity 会自动调用 Resources.UnloadUnusedAssets。

using UnityEngine;
using UnityEngine.SceneManagement;

public class ExampleClass : MonoBehaviour { void Start() { // Only specifying the sceneName or sceneBuildIndex will load the Scene with the Single mode SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive); } }
// Load an assetbundle which contains Scenes.
// When the user clicks a button the first Scene in the assetbundle is
// loaded and replaces the current Scene.

using UnityEngine; using UnityEngine.SceneManagement;

public class LoadScene : MonoBehaviour { private AssetBundle myLoadedAssetBundle; private string[] scenePaths;

// Use this for initialization void Start() { myLoadedAssetBundle = AssetBundle.LoadFromFile("Assets/AssetBundles/scenes"); scenePaths = myLoadedAssetBundle.GetAllScenePaths(); }

void OnGUI() { if (GUI.Button(new Rect(10, 10, 100, 30), "Change Scene")) { Debug.Log("Scene2 loading: " + scenePaths[0]); SceneManager.LoadScene(scenePaths[0], LoadSceneMode.Single); } } }

以下两个脚本示例显示了 LoadScene 如何从构建设置中加载场景。LoadSceneA 使用场景的名称进行加载。LoadSceneB 使用场景的编号进行加载。这些脚本协同工作。

LoadSceneA 文件。

// SceneA.
// SceneA is given the sceneName which will
// load SceneB from the Build Settings

using UnityEngine; using UnityEngine.SceneManagement;

public class LoadScenesA : MonoBehaviour { void Start() { Debug.Log("LoadSceneA"); }

public void LoadA(string scenename) { Debug.Log("sceneName to load: " + scenename); SceneManager.LoadScene(scenename); } }

LoadSceneB 文件。

// SceneB.
// SceneB is given the sceneBuildIndex of 0 which will
// load SceneA from the Build Settings

using UnityEngine; using UnityEngine.SceneManagement;

public class LoadScenesB : MonoBehaviour { void Start() { Debug.Log("LoadSceneB"); }

public void LoadB(int sceneANumber) { Debug.Log("sceneBuildIndex to load: " + sceneANumber); SceneManager.LoadScene(sceneANumber); } }

声明

public static SceneManagement.Scene LoadScene(int sceneBuildIndex, SceneManagement.LoadSceneParameters parameters);

声明

public static SceneManagement.Scene LoadScene(string sceneName, SceneManagement.LoadSceneParameters parameters);

参数

sceneName 要加载的场景的名称或路径。
sceneBuildIndex 要在构建设置中加载的场景的索引。
parameters 用于加载场景的各种参数。

返回值

Scene 加载的场景的句柄。

描述

根据其在构建设置中的名称或索引加载场景。

一个使用名为 Scene1Scene2 的两个场景的示例。ExampleScript1.cs 用于 scene1,ExampleScript2.cs 用于 scene2

using UnityEngine;
using UnityEngine.SceneManagement;

// This is scene1. It loads 3 copies of scene2. // Each copy has the same name.

public class ExampleScript1 : MonoBehaviour { private Scene scene;

private void Start() { var parameters = new LoadSceneParameters(LoadSceneMode.Additive);

scene = SceneManager.LoadScene("scene2", parameters); Debug.Log("Load 1 of scene2: " + scene.name); scene = SceneManager.LoadScene("scene2", parameters); Debug.Log("Load 2 of scene2: " + scene.name); scene = SceneManager.LoadScene("scene2", parameters); Debug.Log("Load 3 of scene2: " + scene.name); } }

Scene2

using UnityEngine;

// create a randomly placed cube

public class ExampleScript2 : MonoBehaviour { private void Start() { GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.position = new Vector3(Random.Range(-5.0f, 5.0f), 0.0f, Random.Range(-5.0f, 5.0f)); } }