Unity シングルトンパターン技術資料 – GameDirector の実装と動作確認

この技術資料では、Unityでシングルトンパターンを使用して、ゲームオブジェクトが一つしか作成されないことを保証する方法を解説します。具体的には、GameDirectorクラスを使ったシングルトンの実装例を示し、その動作を確認する方法をステップごとに説明します。

シングルトンパターンとは

シングルトンパターンは、クラスのインスタンスが1つしか存在しないことを保証し、グローバルなアクセスを提供するデザインパターンです。ゲームの進行管理など、1つのインスタンスだけで管理したい場合に有効です。

実装例

GameDirector.cs のコード

以下はシングルトンパターンを使用したGameDirectorクラスの実装例です。このクラスは、ゲーム中に1つだけ存在するゲームディレクションを担当します。

using UnityEngine;

public class GameDirector : MonoBehaviour
{
    private static GameDirector instance;

    // GameDirectorのインスタンスを公開
    public static GameDirector Instance => instance;

    // Awakeはオブジェクトが生成されたときに呼び出される
    void Awake()
    {
        // instanceがまだ設定されていない場合は、このインスタンスを設定
        if (instance == null)
        {
            instance = this;
            Debug.Log("GameDirectorインスタンスが作られました。");
        }
        else
        {
            // 既にインスタンスがある場合、2つ目のインスタンスを破棄
            Debug.LogWarning("2つ目のGameDirectorインスタンスが作られたため、破棄されます。");
            Destroy(gameObject);
        }
    }
}

コードの説明

  1. instance フィールド:
    • GameDirectorクラスの静的フィールドで、唯一のインスタンスを保持します。
  2. Instance プロパティ:
    • 他のスクリプトからGameDirectorのインスタンスにアクセスするためのプロパティです。
  3. Awake() メソッド:
    • ゲームオブジェクトが生成された際に最初に呼ばれるメソッドです。
    • 最初のインスタンスが生成された場合にはそれを保持し、2つ目以降が作成された場合にはそのインスタンスを破棄します。

Unity でのセットアップと動作確認

ステップ1: Unity プロジェクトの作成

  1. Unity Hubを開き、新しいプロジェクトを作成します。
    • テンプレート: 2Dまたは3Dプロジェクト
    • プロジェクト名: 任意(例: SingletonSampleProject

ステップ2: GameDirector スクリプトの作成

  1. Assetsフォルダを右クリックし、Create > C# Scriptを選択して、新しいスクリプトファイルを作成します。
  2. ファイル名を GameDirector に変更し、ダブルクリックしてスクリプトを開きます。
  3. 上記のGameDirector.csのコードをスクリプトファイルに貼り付け、保存します。

ステップ3: ゲームオブジェクトにスクリプトをアタッチ

  1. Hierarchy ウィンドウで右クリックし、Create Empty を選択して空のゲームオブジェクトを作成します。
  2. Inspector ウィンドウで、GameDirector スクリプトをアタッチします。

ステップ4: 2つ目のGameDirectorオブジェクトを作成

  1. 同様に、もう一つ空のゲームオブジェクトを作成し、そこにも GameDirector スクリプトをアタッチします。
  2. これにより、シーン内には2つの GameDirector が存在します。

ステップ5: 実行と結果確認

  1. Play ボタンを押してゲームを実行します。
  2. UnityのConsoleウィンドウにメッセージが表示されます。
    • 最初のGameDirectorインスタンスが生成された際に、以下のメッセージが表示されます。
      「GameDirectorインスタンスが作られました。
    • 2つ目のインスタンスが生成された場合、以下の警告メッセージが表示され、2つ目のインスタンスは破棄されます。
      2つ目のGameDirectorインスタンスが作られたため、破棄されます。

実行結果の解説

  1. 最初のインスタンス: 正常に作成され、インスタンスはinstanceフィールドに保持されます。
  2. 2つ目以降のインスタンス: 既にインスタンスが存在しているため、Destroy() メソッドで破棄されます。

まとめ

この技術資料では、Unityでシングルトンパターンを使用し、ゲーム内にオブジェクトが1つしか作成されないことを保証する方法について解説しました。シングルトンパターンを理解することで、ゲーム全体を管理するシステムやリソースを効率的に制御することが可能になります。

Unityのデバッグメッセージを使うことで、シングルトンの動作を視覚的に確認できるため、初心者でも理解しやすい構造になっています。

Unity

Posted by hidepon