Если использовать метод SceneManager.LoadScene или SceneManager.LoadSceneAsync, то старая (уже активная) сцена будет земенена новой, а все объекты старой сцены уничтожены.
Часто бывает нужно, чтобы объект сохранился.
Для примера я взял обучающий проект ScriptableObjectDemo.
Здесь сначала загружается сцена MainMenu, а после выбора всех параметров игры можно нажать кнопку «Play» и будет загружена новая сцена, но музыка прерываться не будет. Чтобы это реализовать, на начальную сцену к объекту MusicPlayer, у которого был компонент «Audio Source» добавили скрипт MusicPlayer.cs:
using UnityEngine;
public class MusicPlayer : MonoBehaviour
{
private static MusicPlayer _instance;
public void OnEnable()
{
_instance = this;
DontDestroyOnLoad(gameObject);
}
public void Awake()
{
if (_instance) DestroyImmediate(gameObject);
}
}
Теперь после того, как будет загружена новая сцена, кроме новой сцены будет сгенерирована сцена DontDestroyOnLoad, в которой будет сохранен объект MusicPlayer из старый сцены:
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024