Betrachten Sie ein Skript wie das folgende, um die Antwort von Tetrad zu erweitern:
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.
}
Sie können dann ein Objekt mit dem Namen "GameSystem" im Stammverzeichnis Ihrer Szene erstellen. Die einzige Komponente, die es hätte, wäre die eingebaute Transformationskomponente (setzen Sie ihre Position auf den Ursprung, ihre Rotation auf die Identität und ihre Skalierung auf eins; nicht, dass es darauf ankommt, aber es ist eine gute Praxis). Hängte die GameSystem-Komponente an dieses Objekt an.
Sie können jetzt auf Ihr globales Objekt zugreifen, indem Sie einfach GameSystem.Instance.blah () verwenden. Die Event-Handler-Methoden werden von Unity automatisch aufgerufen, da sie von MonoBehavior abgeleitet und als Komponente vorhanden sind. Sie können ihm Felder hinzufügen, die auf andere Spielobjekte oder -komponenten verweisen, und diese in der Unity-Objekthierarchie verbinden.
Ja, das ist alles ein bisschen "komisch". Es kann sich ein wenig schmutzig anfühlen, ein Objekt erstellen zu müssen (das sogar eine Transformation aufweist), das immer nur ein globaler Singleton ist. Es ist jedoch erforderlich, dass Unity globale Objekte erstellt, die eine Aktualisierungsnachricht erhalten und mit dem standardmäßigen Unity-Eigenschafteneditor bearbeitet werden können.
Erstellen Sie einfach ein Manager-Objekt, in das Sie das Skript einfügen. Erstellen Sie möglicherweise eine statische Variable für das Skript, das Sie zuweisen,
Awake
damit Sie einen einfachen globalen Zugriff darauf haben.quelle