Чтобы переменные не сбрасывались при повторном открытии сцены в Unity, можно использовать различные подходы, в зависимости от требуемой функциональности.
1. Сериализация переменных: Один из способов сохранения значения переменных между сценами - это сериализация. Для этого нужно создать скрипт, содержащий необходимые переменные, и добавить атрибут [System.Serializable] перед классом. После этого Unity будет сохранять значения переменных при переключении между сценами. Однако, стоит учитывать, что это решение сохраняет значения только в пределах одной сессии работы с Unity.
[System.Serializable] public class MyVariables { public int myInt; public string myString; } public class MyScript : MonoBehaviour { public MyVariables myVariables; }
2. Сохранение настроек игры: В Unity есть специальный механизм для сохранения настроек игры, который позволяет сохранять переменные и значения в файлы или базы данных. Для этого можно использовать PlayerPrefs - удобный класс для хранения и получения PlayerPrefs. Он позволяет сохранять и получать значения по ключу. PlayerPrefs значения хранятся в системе и сохраняются между запусками игры.
public class MyScript : MonoBehaviour { public int myInt; public string myString; private void Start() { myInt = PlayerPrefs.GetInt("MyIntKey", 0); myString = PlayerPrefs.GetString("MyStringKey", ""); } private void OnDestroy() { PlayerPrefs.SetInt("MyIntKey", myInt); PlayerPrefs.SetString("MyStringKey", myString); PlayerPrefs.Save(); } }
3. Глобальные переменные: Вы можете создать статический класс или используете существующий для сохранения глобальных переменных. Этот класс будет существовать во время работы игры и будет доступен из любой сцены. Однако, следует быть осторожными с использованием глобальных переменных, так как они могут усложнить отладку и выполнение правильного управления памятью.
public static class GlobalVariables { public static int myInt; public static string myString; } public class MyScript : MonoBehaviour { private void Start() { GlobalVariables.myInt = 42; GlobalVariables.myString = "Hello, world!"; } }
Описанные методы показывают основные подходы для сохранения переменных между сценами в Unity. Выбор правильного подхода зависит от особенностей вашей игры и требуемой функциональности.