Maison >développement back-end >C++ >Pourquoi mon script Unity Game Manager ne s'exécute-t-il qu'une seule fois et comment puis-je le rendre persistant dans toutes les scènes ?
Unity Game Manager : Problèmes de persistance entre scénarios et solutions
Question :
Les scripts Game Manager conçus pour être persistants dans toutes les scènes ne seront exécutés qu'une seule fois lors de l'initialisation du projet, même s'ils sont présents dans toutes les scènes.
Raison :
Chaque projet Unity nécessite une « scène de préchargement » comme plaque tournante centrale pour les objets et systèmes persistants. Ce scénario doit être spécifié comme scénario 0 dans les paramètres de build.
Solution :
Créer une scène préchargée :
Ajouter un objet de jeu préchargé :
Appliquer DontDestroyOnLoad :
Placer le comportement courant dans la scène de préchargement :
Trouver des composants dans d'autres scènes :
Pour accéder à ces composants persistants depuis d'autres scènes, vous pouvez utiliser la méthode statique "Object.FindObjectOfType
<code class="language-C#">SoundEffects sound = Object.FindObjectOfType<SoundEffects>(); GameState state = Object.FindObjectOfType<GameState>();</code>
Optimisation optionnelle :
Pour réduire la duplication de code, pensez à utiliser le script global suivant :
<code class="language-C#">public static class App { public static SoundEffects SoundEffects { get; private set; } public static GameState GameState { get; private set; } static App() { GameObject appObject = GameObject.Find("__app"); SoundEffects = appObject.GetComponent<SoundEffects>(); GameState = appObject.GetComponent<GameState>(); } }</code>
À l'aide de ce script, vous pouvez accéder à ces composants en utilisant une syntaxe simplifiée :
<code class="language-C#">App.SoundEffects.PlayExplosion(); App.GameState.CurrentLevel = 5;</code>
Confort de développement :
Afin d'améliorer l'efficacité du développement, vous pouvez envisager d'ajouter un script à la scène "preload". Si l'objet "__app" n'existe pas, la scène "preload" sera automatiquement chargée lors de l'initialisation du projet. Cela garantit que le jeu démarre à partir de la scène « préchargement » à chaque fois que l'on clique sur « Jouer ».
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!