トップ > 【Unity】シングルトンパターンを実装する方法を紹介します!
更新日 2024/3/1

【Unity】シングルトンパターンを実装する方法を紹介します!

シングルトンパターンについて簡単な例を作り、Unityへの導入方法を紹介します。

singleton thumbnail

Unityでシングルトンパターンを実装したいんだけどどうやるんだろう?

初めての方にも分かりやすく簡単に解説しますね。

シングルトンパターンについて

シングルトンパターンはクラスのインスタンスが1つしか生成されないようにするデザインパターンだよね!

簡単にまとめると2つの特徴がありますよ。

1.public staticなインスタンスを1つ持ち外部へのアクセスを提供する!
2.privateなコンストラクタを持ち外部でのインスタンス化を防ぐ!

これらをコードに落とすと次のようになります。

public class SimpleSingleton
{
// 1
public static SimpleSingleton Instance
{
get;
private set;
} = new SimpleSingleton();

// 2
private SimpleSingleton() {}

public void Test() => Debug.Log("Hello Singleton");
}

使い方はこんな感じです。

SimpleSingleton.Instance.Test();

シングルトンパターンのおさらいだね!

1つのインスタンスを他から使いまわす感じのデザインパターンですね。有名なデザインパターンなので利用されている方も多いと思います。


Unityにおけるシングルトン

Unityで使えるように先ほど作成したシングルトンクラスを改良します。まず始めにコンポーネントとしてUnityエディター上で追加できるようにMonoBehaviourクラスを継承します。MonoBehaviourクラスはnewすると怒られますのでAwakeでインスタンスの参照を受け取るように変更します。

using UnityEngine;

public class SimpleSingleton : MonoBehaviour {
public static SimpleSingleton Instance { get; private set; }
private SimpleSingleton() { }
private void Awake() => Instance = this;

public void Hello() => Debug.Log("Hello Singleton");
}

MonoBehaviourでシングルトンパターンを実装しようとするとこんな感じになるんだね!

このままゲームオブジェクトに追加してもシーンを変更してしまうと解放されてしまいます。ゲームオブジェクトを常駐化してシングルトンを常駐しましょう。常駐方法は常駐オブジェクトにまとめてありますので一度確認して下さい。そこで作ったDontDestroyOnLoadクラスも一緒にゲームオブジェクトへ追加します。

Singleton
resident_object
【Unity】ゲームオブジェクトを常駐化させるための方法を紹介します!2024/3/1

他にもシングルトンクラスを作成したらここへ追加しましょう。一ヶ所で管理できるようになり便利ですね。


シングルトンのテンプレート化

テンプレートを使ってシングルトンクラスを簡単に利用できるようにSingletonMonoBehaviourクラスを実装しましょう。継承して使えるようにするため、コンストラクタのアクセシビリティをprotectedにします。

using UnityEngine;

public class SingletonMonoBehaviour<T> : MonoBehaviour where T : SingletonMonoBehaviour<T>
{
public static T Instance { get; private set; }
protected SingletonMonoBehaviour() { }
protected void Awake() => Instance = (T)this;
}

ソースコードはGitHubにアップしてありますのでご利用ください。

code-examples/unity/SingletonMonoBehaviour.cs

使い勝手がいいようにテンプレート化するんだね!

SingletonMonoBehaviourを継承して先ほどのSimpleSingletonクラスを修正します。

using UnityEngine;

public class SimpleSingleton : SingletonMonoBehaviour<SimpleSingleton>
{
public void Test() => Debug.Log("Hello Singleton");
}

シングルトンパターンの実装部分がキレイに消えたね!

視認性も良くなり開発効率も上がりそうですね。

まとめ

今回の記事のまとめだよ!

1.シングルトンパターンを理解しよう!
2.DontDestroyOnLoadと一緒に使おう!
3.テンプレートを利用して簡潔化しよう!

Unityでシングルトンパターンを使う方法が分かったよ!

Unityでのシングルトンパターンを理解して効率良く開発しましょう。


関連ページ

こちらのページも合わせてご覧下さい

http_client_manager
【Unity】HttpClientをシングルトン化したHttpClientManagerの実装方法について紹介します!2024/3/1
unity_cs_reference
【Unity】公式GitHubで公開されているリファレンスコードをゲットしよう!2022/7/7
resident_object
【Unity】ゲームオブジェクトを常駐化させるための方法を紹介します!2024/3/1
resource
【Unity】スクリプトからテクスチャーなどのリソースを読み込む様々な方法を紹介します!2024/2/9
json
【Unity】UnityでJSONを扱う方法を紹介します!配列のシリアライズ対応方法やディープコピーのテクニックなども紹介しますよ!2024/3/28

Copyright ©2022 - 2024 うにぉらぼ