Параметры
target | Объект не уничтожается при изменении Scene. |
Описание
Не уничтожайте целевой объект при загрузке новой Сцены.
Загрузка новой Scene уничтожает все текущие объекты Scene. Вызовите Object.DontDestroyOnLoad, чтобы сохранить объект во время загрузки уровня. Если целевой объект является компонентом или GameObject, Unity также сохраняет все дочерние элементы Transform. Object.DontDestroyOnLoad не возвращает значение.
В следующем примере сценария используется Object.DontDestroyOnLoad. В примере есть scene1
, который запускает воспроизведение фоновой музыки из AudioSource. Музыка продолжается, когда загружается scene2
. Переключайтесь между сценами с помощью кнопки. Чтобы реализовать этот пример, создайте две новые Scene с именами scene1
и сцена2
. Откройте scene1
и добавьте скрипт SceneSwap.cs
в пустой GameObject и назовите его Меню
. Затем добавьте DontDestroy.cs
в новый GameObject и назовите его BackgroundMusic
. . Добавьте AudioSource в BackgroundMusic
— Add Component > Audio > Audio Source
— и импортируйте Аудиоклип в свой проект. Назначьте AudioClip в поле AudioSource AudioClip. Создайте тег, назовите его music
и добавьте в BackgroundMusic
. Переключитесь на scene2
. Снова добавьте SceneSwap.cs
в новый GameObject и назовите его Menu
. Сохраните проект. Вернитесь в scene1
и запустите проект из Редактора
.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 MenuGameObject 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);
}
}