Щоб розширити відповідь Тетрада, розгляньте такий сценарій:
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 за замовчуванням.