Unity как сделать так, чтобы переменные не сбрасывались при повторном открытии сцены?

Чтобы переменные не сбрасывались при повторном открытии сцены в 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. Выбор правильного подхода зависит от особенностей вашей игры и требуемой функциональности.