【Unity】Manager系統でよく使われるシングルトンをちょっぴり軽くする方法

Unity

SoundManagerやDataManager等でよく使われるシングルトン。
以前の記事でも紹介させて頂きました。
【Unity】どこでもデータ共有できるオブジェクトをつくろう

こちらを少し見直し、ちょっぴり軽くする方法を公開したいと思います。

■以前(よく見かける方法)

public class DataManager : MonoBehaviour {
	private static DataManager instance;

	public static DataManager Instance{
		get{
			if( null == instance ){
				instance = (DataManager)FindObjectOfType(typeof(DataManager));
				if( null == instance ){
					Debug.Log(" DataManager Instance Error ");
				}
			}
			return instance;
		}
	}

	void Awake(){
		GameObject[] obj = GameObject.FindGameObjectsWithTag("DataManager");
		if( 1 < obj.Length ){
			// 既に存在しているなら削除
			Destroy( gameObject );
		}else{
			// シーン遷移では破棄させない
			DontDestroyOnLoad( gameObject );
		}
	}
}

■改良版

public class DataManager : MonoBehaviour {
	public static DataManager Instance;

	void Awake(){
		if( null != Instance ){
			// 既に存在しているなら削除
			Destroy( gameObject );
		}else{
			// 存在していないなら指定する
			Instance = this;
		}

		// シーン遷移では破棄させない
		DontDestroyOnLoad( gameObject );
	}
}

ちょっぴり軽くなったポイント

  • getでのnullチェックを無くした事により、もしUpdate文などで呼んでも毎フレームnullチェックをしなくなる
  • Find関数を使わない

ちょっぴりの高速化とはいえ、
モバイル環境での開発ではパフォーマンスは出せるだけ出したいところだと思いますので、
是非活用してみてください!

コメント

タイトルとURLをコピーしました