シングルトンなクラスにすれば、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見習い中です!変なとこあったらどしどしコメントください!