В этой статье мы настроим наш игровой менеджер, используя шаблон проектирования singleton. Это означает, что в игре будет только один из них, и он всегда будет в памяти. Это позволяет другим скриптам всегда иметь к нему доступ. Там нет необходимости использовать GetComponent.

Статический

Помещение static перед нашим типом заставляет его всегда оставаться в памяти. Мы сделали это для нашего класса, так что теперь наш класс всегда в памяти. Это полезно, когда у нас есть только один из них в сцене.

Характеристики

Теперь мы можем создавать свойства. Точно так же, как вы видите во всплывающей подсказке для transform.position, там написано «получить, установить». Это означает, что мы можем получить значение и установить значение. В нашем случае с игровым менеджером мы не хотим, чтобы другой скрипт устанавливал для игрового менеджера что-то другое, поэтому мы настраиваем только get.
Далее мы можем добавить код для вызова get. Делаем нулевую проверку.

Назначать

В Awake() нашего сценария игрового менеджера мы назначаем игровой менеджер самому себе.

Публичный метод в нашем статическом классе

Нам нужна переменная, которая отслеживает, взял игрок ключ-карту или нет. В нашем сценарии игрового менеджера мы создаем следующую функцию. В нем мы делаем доступными свойства get и set. Теперь это доступно для использования из других скриптов.

Доступ из других скриптов

Из нашего другого скрипта мы, конечно, могли бы использовать GetComponent для получения менеджера игры, а затем вызвать публичную функцию в нашем скрипте менеджера игры. Сила этого одноэлементного метода заключается в том, что мы можем просто вызвать класс напрямую, не используя компонент get.

Таким образом, мы можем легко изменить значение HasCard на true, и другие игровые объекты также могут легко получить к нему доступ.

Недостатки

Недостатком использования синглтона в классах-менеджерах является то, что Unity не видит свойства/публичные переменные в инспекторе. Только если в инспекторе включен режим отладки, мы можем это увидеть.