ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

ゲーム全体で共有するデータの管理

ゲーム全体で保持するデータを管理するためのオブジェクトを作成。
DontDestroyOnLoad()を呼ぶことにより、シーンを切り替えてもオブジェクトが破棄されなくなる。
実際に実装してみたのは次のような感じ。
DataMgrというGameObjectを作成して、ゲームで最初に実行されるシーンに登録。DontDestroyOnLoad()でシーンが切り替わっても破棄されないようにする。

public class DataMgr : MonoBehaviour {
    private int value = 123;
    void Start () {
        DontDestroyOnLoad(this);	
    }
    public int GetValue() { return value; }
}

実際にゲームプレイ中のシーンにあるGameMgrでDataMgrのオブジェクトを取得してスクリプトのメソッド関数を呼び出して値取得。

public class GameMgr : MonoBehaviour {
    GameObject refDataMgr;
    void Start () {
        refDataMgr = GameObject.Find("DataMgr");
        int value = refDataMgr.GetComponent<DataMgr>().GetValue();
        Debug.Log(value);
    }
}

GameObjectを取得するのにFind()を利用している。これは処理が重いので、最初に変数に取得している。スクリプトも頻繁に呼ぶようなら最初に変数に取得して参照で使うほうがよいかもしれない。