Unity ゲーム開発では、シーン全体にわたる永続的なゲーム マネージャーが非常に重要です。 ただし、よくある問題は、スクリプトがすべてのシーンに存在するにもかかわらず、最初に 1 回だけ実行されることです。
Unity には自動プリロード メカニズムがありません。 専用のプリロード シーンがないと、ゲーム マネージャーの初期化と重要なコンポーネントはシーンの遷移に耐えることができません。
これを修正する方法は次のとおりです:
すべてのコア ゲーム マネージャー機能 (データベース接続、サウンド管理、スコア追跡など) は、プリロード シーンの「_app」ゲームオブジェクトにコンポーネントとしてアタッチされる必要があります。 これにより、後続のすべてのシーンでの永続性が保証されます。
他のスクリプトからゲーム オブジェクトにアクセスするには、2 つのメソッドが存在します。
方法 1: FindObjectOfType
これをスクリプトの Awake()
メソッドで使用します:
<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>(); Game game = Object.FindObjectOfType<Game>();</code>
方法 2: 静的グローバル変数 (より効率的)
より合理化されたアプローチでは、静的グローバル変数を使用します。
<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>
プリロード シーンを作成し、ゲーム マネージャー コンポーネントを永続的なゲームオブジェクトにアタッチすることで、すべての Unity シーンで一貫した実行が保証されます。 コーディング スタイルに最適なオブジェクト アクセス方法を選択してください。
以上がUnity ゲーム マネージャー スクリプトが 1 回しか実行されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。