Heim >Backend-Entwicklung >C++ >Warum wird mein Unity Game Manager-Skript nur einmal ausgeführt und wie kann ich es szenenübergreifend persistent machen?
Unity Game Manager: Szenarioübergreifende Persistenzprobleme und Lösungen
Frage:
Game Manager-Skripte, die so konzipiert sind, dass sie szenenübergreifend bestehen bleiben, werden bei der Projektinitialisierung nur einmal ausgeführt, auch wenn sie in allen Szenen vorhanden sind.
Grund:
Jedes Unity-Projekt erfordert eine „Preload-Szene“ als zentralen Hub für persistente Objekte und Systeme. Dieses Szenario muss in den Build-Einstellungen als Szenario 0 angegeben werden.
Lösung:
Erstellen Sie eine vorinstallierte Szene:
Vorinstalliertes Spielobjekt hinzufügen:
DontDestroyOnLoad anwenden:
Übliches Verhalten in der Preload-Szene platzieren:
Komponenten in anderen Szenen finden:
Um auf diese persistenten Komponenten aus anderen Szenen zuzugreifen, können Sie die statische Methode „Object.FindObjectOfType
<code class="language-C#">SoundEffects sound = Object.FindObjectOfType<SoundEffects>(); GameState state = Object.FindObjectOfType<GameState>();</code>
Optionale Optimierung:
Um die Codeduplizierung zu reduzieren, sollten Sie das folgende globale Skript verwenden:
<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>
Mit diesem Skript können Sie mit einer vereinfachten Syntax auf diese Komponenten zugreifen:
<code class="language-C#">App.SoundEffects.PlayExplosion(); App.GameState.CurrentLevel = 5;</code>
Entwicklungskomfort:
Um die Entwicklungseffizienz zu verbessern, können Sie erwägen, der „Preload“-Szene ein Skript hinzuzufügen. Wenn das „__app“-Objekt nicht vorhanden ist, wird die „Preload“-Szene während der Projektinitialisierung automatisch geladen. Dadurch wird sichergestellt, dass das Spiel jedes Mal, wenn auf „Play“ geklickt wird, mit der „Preload“-Szene beginnt.
Das obige ist der detaillierte Inhalt vonWarum wird mein Unity Game Manager-Skript nur einmal ausgeführt und wie kann ich es szenenübergreifend persistent machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!