Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

SceneManager.LoadScene

Declaration

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

Параметры

Параметр Описание
sceneName Имя или путь файла Scene для загрузки.
sceneBuildIndex Индекс Scene в настройках сборки для загрузки.
режим Позволяет определить, загружается ли Scene аддитивно. Подробнее об этих параметрах см. в LoadSceneMode.

Описание

Загружает Scene по его имени или индексу в настройках сборки.

Примечание: В большинстве случаев во избежание пауз или просадок производительности при загрузке следует использовать асинхронную версию этой команды: LoadSceneAsync.

При использовании SceneManager.LoadScene Scene загружается в следующем кадре, а не немедленно. Такое частично асинхронное поведение может вызвать рывки кадров и затруднить понимание процесса, поскольку загрузка завершается не сразу.

Поскольку загрузка должна завершиться в следующем визуализированном кадре, вызов SceneManager.LoadScene принудительно завершает все предыдущие AsyncOperations, даже если для AsyncOperation.allowSceneActivation задано значение false. Чтобы избежать этого, используйте LoadSceneAsync вместо синхронного варианта.

В sceneName можно передать только имя Scene без расширения .unity либо путь, указанный в окне BuildSettings, также без расширения .unity. Если указано только имя Scene, будет загружена первая соответствующая Scene в списке. Если одинаковое имя имеют несколько Scene с разными путями, используйте полный путь.

Обратите внимание: sceneName не учитывает регистр, кроме случаев загрузки Scene из AssetBundle.

Сведения об открытии Scene в Editor см. в описании EditorSceneManager.OpenScene. SceneA позволяет аддитивно загрузить SceneB несколько раз. Для каждой загруженной Scene используется обычное имя. Если SceneA загружает SceneB десять раз, каждая SceneB будет иметь одно и то же имя. Найти конкретный добавленный экземпляр Scene невозможно.

При загрузке Scene в режиме Single 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 могут загружать Сцены из Настроек Build. LoadSceneA использует имя Scene для загрузки. LoadSceneB использует номер Scene для загрузки. Скрипты работают вместе.

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

Declaration

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

Параметры

Параметр Описание
sceneName Имя или путь файла Scene для загрузки.
sceneBuildIndex Индекс Scene в настройках сборки для загрузки.
параметры Различные параметры, используемые для загрузки Scene.

Возвращаемое значение

Scene Ручка для загрузки Scene.

Описание

Загружает Scene по его имени или индексу в настройках сборки.

Пример использования двух сцен, называемых Scene1 и Scene2. 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)); } }