【Unity】どこでもデータ共有できるオブジェクトをつくろう

Unity

今回の記事では以下のような要望を解決します!

  • データ(変数の値)を色んなオブジェクト(スクリプト)から使いたい
  • シーン遷移させても値が残っていて欲しい

まずは、スクリプトを用意

DataManager.csというスクリプトを作成し、中身は↓

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 );
		}
	}
}

その後、空のGameOjectを作成し↑のスクリプトをアタッチする。
そのGameObjectにタグ名を「DataManager」と付ける。

これで完成。

使用方法

・DataManagerに適当な変数を用意

public int hoge;

他のスクリプトからこの値を参照したい時は↓のようにする

DataManager.Instance.hoge = 3;
int huga = DataManager.Instance.hoge;

っと、こんな感じで簡単に使用することができます。
DataManagerに変数以外に関数を作成したりし、SoundManagerみたいなものもコレで作成できます。

コメント

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