ホームページ >バックエンド開発 >C++ >Unity ゲーム マネージャー スクリプトが 1 回しか実行されないのはなぜですか? シーン間で永続的にするにはどうすればよいですか?

Unity ゲーム マネージャー スクリプトが 1 回しか実行されないのはなぜですか? シーン間で永続的にするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-14 08:06:43816ブラウズ

Why Does My Unity Game Manager Script Only Run Once, and How Can I Make It Persistent Across Scenes?

Unity Game Manager: クロスシナリオ永続性の問題と解決策

質問:

シーン間で持続するように設計されたゲーム マネージャー スクリプトは、すべてのシーンに存在する場合でも、プロジェクトの初期化時に 1 回だけ実行されます。

理由:

すべての Unity プロジェクトには、永続オブジェクトとシステムの中心ハブとして「プリロード シーン」が必要です。このシナリオは、ビルド設定でシナリオ 0 として指定する必要があります。

解決策:

  1. プリロードされたシーンを作成します:

    • ビルド設定で、「プリロード」という新しいシーンを追加し、シーン 0 として指定します。
  2. プリロードされたゲームオブジェクトを追加します:

    • プリロード シーンで、「__app」という名前の空のゲーム オブジェクトを作成します。
  3. DontDestroyOnLoad を適用します:

    • 「DontDestroyOnLoad」スクリプト (またはコンポーネント) を「__app」ゲーム オブジェクトに追加します。このスクリプトにより、シーンが切り替わってもオブジェクトとそのコンポーネントが永続的に維持されます。
  4. プリロードシーンに共通の動作を配置します:

    • データベース接続、サウンドエフェクト、スコアリングなどのすべての共有ゲーム ロジックは、プリロードされたシーンの「__app」ゲーム オブジェクトに配置する必要があります。

他のシーン内のコンポーネントを検索:

他のシーンからこれらの永続コンポーネントにアクセスするには、静的メソッド「Object.FindObjectOfType()」を使用できます。例:

<code class="language-C#">SoundEffects sound = Object.FindObjectOfType<SoundEffects>();
GameState state = Object.FindObjectOfType<GameState>();</code>

オプションの最適化:

コードの重複を減らすには、次のグローバル スクリプトの使用を検討してください:

<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>

このスクリプトを使用すると、簡略化された構文を使用してこれらのコンポーネントにアクセスできます:

<code class="language-C#">App.SoundEffects.PlayExplosion();
App.GameState.CurrentLevel = 5;</code>

開発上の利便性:

開発効率を向上させるために、「__app」オブジェクトが存在しない場合、プロジェクトの初期化中に「preload」シーンが自動的にロードされるように、「preload」シーンにスクリプトを追加することを検討できます。これにより、「Play」をクリックするたびにゲームが「プリロード」シーンから開始されるようになります。

以上がUnity ゲーム マネージャー スクリプトが 1 回しか実行されないのはなぜですか? シーン間で永続的にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。