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

Object.DontDestroyOnLoad

Declaration

public static void DontDestroyOnLoad(Object target);

Параметры

Параметр Описание
Цель Объект не уничтожен на Scene изменении.

Описание

Не уничтожать целевой Объект при загрузке нового Scene.

Загрузка новой Scene уничтожает все текущие Scene объектов. Вызов Object.DontDestroyOnLoad Если целевой Объект является компонентом или фрагментом объекта, то его можно сохранить в GameObject, Unity также сохраняет все TransformДети. Object.DontDestroyOnLoad работает только для root GameObjects или компонентов на корне GameObjects. Object.DontDestroyOnLoad не возвращает значение.

Следующий пример скрипта использует Object.DontDestroyOnLoad. Пример имеет scene1 который начинает играть фоновую музыку из AudioSourceМузыка продолжается, когда scene2 Переключайтесь между сценами с помощью кнопки.

Чтобы реализовать этот пример, создайте два новых Scenes, названный scene1 и scene2. Открытая scene1 и добавить SceneSwap.cs скрипт в пустое GameObject и назвать его MenuЗатем добавить: DontDestroy.cs к новому GameObject и назвать его BackgroundMusic. Добавить AudioSource до BackgroundMusicAdd Component > Audio > Audio Source — и импортировать AudioClip в вашу Project. Назначить AudioClip к Генеральной Ассамблее AudioSource’s AudioClip поле. Создать метку, вызвать ее music, и добавить его в BackgroundMusic. Переключиться на scene2Опять же добавить SceneSwap.cs к новому GameObject и назвать его Menu. Сохранить Project. Вернуться к scene1 и запустить Project от Editor.

SceneSwap.cs скрипт:

using UnityEngine;
using UnityEngine.SceneManagement;

// Object.DontDestroyOnLoad example. // // Two scenes call each other. This happens when OnGUI button is clicked. // scene1 will load scene2; scene2 will load scene1. Both scenes have // the Menu GameObject with the SceneSwap.cs script attached. // // AudioSource plays an AudioClip as the game runs. This is on the // BackgroundMusic GameObject which has a music tag. The audio // starts in AudioSource.playOnAwake. The DontDestroy.cs script // is attached to BackgroundMusic.

public class SceneSwap : MonoBehaviour { private void OnGUI() { int xCenter = (Screen.width / 2); int yCenter = (Screen.height / 2); int width = 400; int height = 120;

GUIStyle fontSize = new GUIStyle(GUI.skin.GetStyle("button")); fontSize.fontSize = 32;

Scene scene = SceneManager.GetActiveScene();

if (scene.name == "scene1") { // Show a button to allow scene2 to be switched to. if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Load second scene", fontSize)) { SceneManager.LoadScene("scene2"); } } else { // Show a button to allow scene1 to be returned to. if (GUI.Button(new Rect(xCenter - width / 2, yCenter - height / 2, width, height), "Return to first scene", fontSize)) { SceneManager.LoadScene("scene1"); } } } }

Скрипт DontDestroy.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// Object.DontDestroyOnLoad example. // // This script example manages the playing audio. The GameObject with the // "music" tag is the BackgroundMusic GameObject. The AudioSource has the // audio attached to the AudioClip.

public class DontDestroy : MonoBehaviour { void Awake() { GameObject[] objs = GameObject.FindGameObjectsWithTag("music");

if (objs.Length > 1) { Destroy(this.gameObject); }

DontDestroyOnLoad(this.gameObject); } }