【Unity】管理クラスの補足 ~シングルトンとは~

Unityシングルトンとは unity

プレイするゲームがないなら、自分で作ればいいじゃない!

ということで Unity 初心者が「ゲームを作る」ゲームをやっていきます!

今回は「シングルトンについて」の補足記事です

 

スポンサーリンク

内容

たびたび出てきている「シングルトン」についての説明

 

シングルトンとは

クラスのデザインパターンの1つで簡単に言うと

「1つしか作成することができないクラス」

のことをシングルトンと言います

  • 複数存在する必要がない
  • 様々な箇所で呼び出す必要がある

という処理が必要な時に役に立ちます

例)音を鳴らす、実績の解除、オプションの状態等

 

Unityでのシングルトン

Unityでシングルトンを実装するには

下記スクリプトをオブジェクトにアタッチして

各シーンに同オブジェクトを追加すればOKです

 

シングルトンのスクリプト

static で「静的メンバー」にして、クラスで共有の値にします

public class Manager : MonoBehaviour
{
    public static Manager Instance { get; private set; } = null;   // シングルトン

    void Awake()
    {
        if (Instance == null)
        {
            // インスタンスがない場合は代入
            Instance = this;

            // シーン切り替え時に消さないようにする
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            // ある場合は2つ目なのでゲームオブジェクトを消す
            Destroy(this.gameObject);
        }
    }
}
DontDestroyOnLoad(this.gameObject);

これを実行するとシーン切り替えの際にオブジェクトが削除されないようになります

 

呼び出す際は「Manager.Instance.~」という感じです

 

処理の流れ

例えばタイトルシーンにシングルトンオブジェクトがあって

ゲームシーンでも同じシングルトンオブジェクトがあるとします

 

1.タイトルシーン

ヒエラルキービューにオブジェクトがあるので

  • オブジェクトが作成される
  • Instance が空なので自身を代入する
  • オブジェクトが削除されなくなる

その後ゲームシーンへ遷移する

オブジェクトは削除されない

 

2.ゲームシーン

ヒエラルキービューにオブジェクトがあるので

  • オブジェクトが作成される(この時点では2つ存在する)
  • 既に Instance に値が入っている
  • 自身のオブジェクトを削除する

となり、

ゲームシーンのオブジェクトは削除されて

タイトルシーンで作成されたオブジェクトが残り続けます

 

さいごに

シングルトンは「1つしか作成することができないクラス」なので

厳密に言えばシングルトンではないのかもしれませんが’(一瞬2つ存在することがあるため)

これが Unity 式シングルトンのようです

 

シングルトンは非常に便利なので有効に活用したいですね!

かれいど

ゲームをしたり、作ったり
色々な事に挑戦していきたい!

サッカー観戦も趣味で
主にJ1リーグを観ています。

かれいどをフォローする
unity
スポンサーリンク
シェアする

コメント