Pour développer la réponse de Tetrad, considérez un script comme celui-ci:
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.
}
Vous pouvez ensuite créer un objet appelé "GameSystem" à la racine de votre scène. Les seuls composants qu'il aurait seraient le composant de transformation intégré (définissez sa position sur l'origine, sa rotation sur l'identité et son échelle sur un; ce n'est pas important, mais c'est une bonne pratique). Attaché le composant GameSystem à cet objet.
Vous pouvez maintenant accéder à votre objet global en utilisant simplement GameSystem.Instance.blah (). Ses méthodes de gestionnaire d'événements sont invoquées automatiquement par Unity car elles dérivent de MonoBehavior et existent en tant que composant. Vous pouvez y ajouter des champs qui font référence à d'autres objets ou composants de jeu et les connecter dans la vue de la hiérarchie des objets Unity.
Oui, tout cela est un peu "bizarre". Cela peut sembler un peu sale de devoir créer un objet (qui a même une transformation) qui n'est toujours qu'un singleton global. C'est ce dont Unity a besoin pour créer des objets globaux qui reçoivent un message de mise à jour et sont manipulables avec l'éditeur de propriétés Unity par défaut, cependant.
Créez simplement un objet gestionnaire sur lequel vous mettez ce script. Créez peut-être une variable statique pour ce script que vous attribuez
Awake
afin d'avoir un accès global facile à celui-ci.la source