Maison >développement back-end >C++ >Pourquoi mon script Unity Game Manager ne s'exécute-t-il qu'une seule fois ?
Dans le développement de jeux Unity, un gestionnaire de jeu persistant à travers les scènes est crucial. Cependant, un problème courant est un script qui ne s'exécute qu'une seule fois au début, malgré sa présence dans toutes les scènes.
Unity ne dispose pas d'un mécanisme de préchargement automatique. Sans une scène de préchargement dédiée, l'initialisation de votre gestionnaire de jeu et les composants essentiels ne survivront pas aux transitions de scène.
Voici comment résoudre ce problème :
Toutes les fonctionnalités principales de votre gestionnaire de jeu (connexions à la base de données, gestion du son, suivi des scores, etc.) doivent être attachées en tant que composants au GameObject "_app" dans votre scène de préchargement. Cela garantit leur persistance dans toutes les scènes suivantes.
Deux méthodes existent pour accéder aux objets du jeu à partir d'autres scripts :
Méthode 1 : FindObjectOfType
Utilisez ceci dans la méthode Awake()
de votre script :
<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>(); Game game = Object.FindObjectOfType<Game>();</code>
Méthode 2 : Variables globales statiques (plus efficaces)
Une approche plus rationalisée utilise des variables globales statiques :
<code class="language-C#">public static class GameManager { public static Sound sound; public static Game game; static GameManager() { GameObject app = GameObject.Find("_app"); sound = app.GetComponent<Sound>(); game = app.GetComponent<Game>(); } }</code>
En créant une scène de préchargement et en attachant les composants de votre gestionnaire de jeu à un GameObject persistant, vous garantissez une exécution cohérente dans toutes vos scènes Unity. Choisissez la méthode d'accès aux objets qui convient le mieux à votre style de codage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!