Чтобы расширить ответ Тетрада, рассмотрим такой сценарий:
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
Затем вы можете создать объект под названием «GameSystem» в корне вашей сцены. Единственными компонентами, которые он имел бы, был бы встроенный компонент преобразования (установите его положение в начало координат, поворот в единицу и масштаб в единицу; не то, чтобы это имело значение, но это хорошая практика). Прикрепил компонент GameSystem к этому объекту.
Теперь вы можете получить доступ к своему глобальному объекту, просто используя GameSystem.Instance.blah (). Его методы-обработчики событий вызываются автоматически Unity, поскольку он является производным от MonoBehavior и существует как компонент. Вы можете добавить к нему поля, которые ссылаются на другие игровые объекты или компоненты, и соединить их в представлении иерархии объектов Unity.
Да, все это немного "странно". Может показаться немного грязным создание объекта (который даже имеет преобразование), который всегда является просто глобальным синглтоном. Это то, что требуется Unity для создания глобальных объектов, которые получают сообщение об обновлении и могут работать с редактором свойств Unity по умолчанию.
Просто создайте объект менеджера, на который вы поместите этот скрипт. Возможно, создайте статическую переменную для того сценария, который вы назначаете,
Awake
чтобы иметь легкий глобальный доступ к нему.источник