Есть несколько способов достижения этого, которые, как мне кажется, сводятся к вкусу: сохранить данные в файл, использовать DoNotDestroyOnLoad ...
Но из того, что я понимаю, сейчас рекомендуется создайте «сцену менеджера», которая будет оставаться активной в течение всего времени жизни вашего приложения и передавать данные в и из других ваших сцен по мере их открытия и закрытия вместо использования DontDestroyOnLoad:
Рекомендуется Избегайте использования DontDestroyOnLoad для сохранения менеджера GameObjects, который вы хотите выжить при загрузке сцены. Вместо этого создайте сцену менеджера, в которой есть все ваши менеджеры, и используйте SceneManager.LoadScene (, LoadSceneMode.Additive) и SceneManager.UnloadScene для управления процессом игры. ср c
См. Руководство по Unity здесь . По сути, в любой момент вы можете открыть 2 сцены одновременно: сцену менеджера и любую активную игровую сцену. Затем вы можете общаться между сценариями в двух открытых сценах через делегатов событий. Вот как это будет работать:
- Игрок выбирает цвет в scene1
- Цвет отправляется со сцены 1 на сцену менеджера через делегата события
- scene1 выгружается, а scene2 - загружено
- Цвет отправляется со сцены менеджера в сцену2
Этот подход я использовал для проекта, который выглядит следующим образом:
"0-Attract", "1-Sealant", "2-Paint" и "3-Заключение" - мои реальные игровые сцены, а "Scene менеджера" содержит все, что существует в любой другой сцене (таким образом, нет причин убивать и перезапускать их), а также все мои сценарии «менеджера», которые обрабатывают передачу данных между сценами.
Обратите внимание, что многостадийное редактирование может сначала сбивать с толку, так как новые вещи, на которые нужно обратить внимание (то есть, какая сцена в настоящее время «активна» и что это значит), поэтому обязательно go в руководстве по единству, которое я изложил выше. Удачи!