はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】シングルトンを上手く活用しよう

はじめに

シーンをまたいでもずっと残っているオブジェクトを使いたいときってよくありませんか?
そういうときはdontdestroyonloadを使えばいいんでしょ?と思うかもしれませんが、少し気を付けないとオブジェクトが増えていた!?という状況になるときもあります。
そこで、シングルトンをつかえばその問題も楽々解決します。

使い方

一番シンプルだと思う実装方法はこれになります。

static public SampleClass instance;
void Awake ()
{
 if (instance == null) {
 
     instance = this;
     DontDestroyOnLoad (gameObject);
 }
 else {
 
     Destroy (gameObject);
 }
}

SampleClassというのは、シングルトンにしたいクラスの名前を入れてください。
上のコードをシングルトンにしたいクラスの中身に入れます。
実際にサンプルとして入れてみました。

using UnityEngine;

public class SampleClass : MonoBehaviour {

    static public SampleClass instance;
    public int hoge;


    void Awake()
    {
        if (instance == null)
        {

            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {

            Destroy(gameObject);
        }
    }

    public void Hoge()
    {
        Debug.Log("Hoge!");
    }

}

また、このスクリプトをアタッチしたオブジェクトをシーンに配置するのを忘れないようにしてください(ゲームならタイトルのシーンのみに配置するとか)。

また、シングルトンの持つ変数やメソッドを使いたいときはGetComponentなどを使う必要はなく、

SampleClass.instance.hoge = 1;
SampleClass.instance.Hoge();

のようにしてみてください。

さらに、上のコードを継承を使ってもっと簡単にしたりしたものなどを他の方が作ったりしているので、よければそちら等も参照してみてください!
[Unity]シングルトンを使ってみよう - Qiita
Unityで少しだけ高速なシングルトン(Singleton) - テラシュールブログ

【Unity】なんちゃらManagerクラスを作ろう(シングルトン) | naichilab - Android iOSアプリ開発メモ

さいごに

シングルトンをうまく活用して、立派なシングルトン使いを一緒に目指しましょう!

またゲームオブジェクトにアタッチしないシングルトンの作り方もよかったらどうぞ。
www.hanachiru-blog.com