LoginSignup
9
7

More than 5 years have passed since last update.

【殴り書き】ゲームオブジェクトをグローバルなインスタンス1つ作って使いまわすぞー

Last updated at Posted at 2015-05-28

シングルトンなクラスにすれば、Staticなグローバルなクラスになる。
シーンが移動してもDestroy(開放)されることはなく、最初に呼び出されたときに自身で作ったオブジェクトが生き続け、それを返し続ける。

ポイントは、ゲームオブジェクトがあるかどうかをシングルトンなクラス自身が管理して、なければ作って、あればそれを返す様にする為、
どのシーンで呼び出しても同じ実装でいける。ゲームオブジェクトが生きてるかどうかを気にする必要もない。

手順

  • Bridge.csをシングルトンなゲームオブジェクトにする。
  • homeが実行と同時に呼ばれるシーン
  • secondはサブシーン
  • homeでゲームオブジェクトを作成し、secondで呼び出してみる。

bridge.cs
public class Bridge: MonoBehaviour {

    private static Bridge instance; 
    public static Bridge Instance {
        get { 
            if (instance == null ) {
                GameObject gmObj = new GameObject ( "Bridge" );
                instance = gmObj.AddComponent< Bridge > ();
            } 
        return instance; 
        } 
    }

    public void printTest () {
        Debug.Log ("ブリッジ、生きてるよ。");
    }

    private void Awake () {
        DontDestroyOnLoad (this);
    }
}
home.cs



void Start () {
    Bridge bi = Bridge.Instance;    // instance つくる
    bi.printTest ();     //なにか実行してみる

    if (Button ("scene change" )) {
        Application .LoadLevel ("second" );    // シーンの移行
    }
}



second.cs
public class second : MonoBehaviour {

             // Use this for initialization
             void Start () {
                        Bridge bi = Bridge.Instance;    // 2回目なのでさっきhomeで作られたオブジェクトが返される
                        bi.printTest ();
            }
}

※Unity見習い中です!変なとこあったらどしどしコメントください!

9
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7