プレイするゲームがないなら、自分で作ればいいじゃない!
ということで 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 式シングルトンのようです
シングルトンは非常に便利なので有効に活用したいですね!
コメント