今回の記事では以下のような要望を解決します!
- データ(変数の値)を色んなオブジェクト(スクリプト)から使いたい
- シーン遷移させても値が残っていて欲しい
まずは、スクリプトを用意
DataManager.csというスクリプトを作成し、中身は↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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に適当な変数を用意
1 |
public int hoge; |
他のスクリプトからこの値を参照したい時は↓のようにする
1 2 |
DataManager.Instance.hoge = 3; int huga = DataManager.Instance.hoge; |
っと、こんな感じで簡単に使用することができます。
DataManagerに変数以外に関数を作成したりし、SoundManagerみたいなものもコレで作成できます。
コメント