5 методов изменения статических переменных в других скриптах в Unity

Статические переменные в Unity используются во всех экземплярах скрипта, что делает их полезными для хранения и доступа к данным, которые необходимо совместно использовать различными объектами или скриптами. Однако изменение статических переменных в других скриптах может быть немного сложнее, чем изменение переменных экземпляра. В этой статье мы рассмотрим пять различных методов изменения статических переменных в других скриптах Unity, а также приведем примеры кода для каждого метода.

Метод 1: использование модификаторов публичного доступа
Пример кода:

// ScriptA.cs
public static int score;
// ScriptB.cs
ScriptA.score = 100;

Метод 2: использование шаблона Singleton
Пример кода:

// ScriptA.cs
public static ScriptA Instance;
public int score;
private void Awake()
{
    Instance = this;
}
// ScriptB.cs
ScriptA.Instance.score = 100;

Метод 3: использование событий и делегатов
Пример кода:

// ScriptA.cs
public delegate void ScoreChangedDelegate(int newScore);
public static event ScoreChangedDelegate OnScoreChanged;
public static int score;
// ScriptB.cs
ScriptA.score = 100;
ScriptA.OnScoreChanged?.Invoke(ScriptA.score);

Метод 4: использование ScriptableObject
Пример кода:

// ScoreData.cs (ScriptableObject)
[CreateAssetMenu(fileName = "ScoreData", menuName = "Data/ScoreData")]
public class ScoreData : ScriptableObject
{
    public int score;
}
// ScriptA.cs
public ScoreData scoreData;
// ScriptB.cs
ScriptA.scoreData.score = 100;

Метод 5: использование PlayerPrefs
Пример кода:

// ScriptA.cs
public static string scoreKey = "Score";
// ScriptB.cs
PlayerPrefs.SetInt(ScriptA.scoreKey, 100);

В этой статье мы рассмотрели пять различных методов изменения статических переменных в других скриптах Unity. Каждый метод предлагает свои преимущества и может быть более подходящим в зависимости от конкретного случая использования. Используя модификаторы общего доступа, шаблон Singleton, события и делегаты, ScriptableObjects или PlayerPrefs, вы можете легко изменять статические переменные в других скриптах и ​​повышать интерактивность и функциональность ваших проектов Unity.