2014年12月15日月曜日

Unity4.2:違うシーンをロードしても変数の内容を消さない

タイトル>ゲーム>タイトル>ゲーム
の繰り返しをするとして、ゲーム中に変更したオプションなんかを、一度タイトルに戻った後でも継続して持っていたい!
というわけで、調べたら(ちょっとどのサイトだったか忘れた)、ありました。

DontDestroyOnLoad (this);

これをしておけば、LoadLevelした時に、スクリプトがアサインされているオブジェクトが消えません。

//ObjAはインスタンス化しておく
--ObjA
-scriptA
function Awake(){
    DontDestroyOnLoad (this);
}


やったー!
って・・・
ロードするたびにオブジェクトが増える!

というわけで、一工夫。
先ほどのオブジェクト(ObjA)をプレハブ化しておき、別のオブジェクトのスクリプトからロード時に呼び出させます。

--ObjB
-scriptB
var objA :GameObject;   //InspectorでObjAを登録しておく
if(GameObject.Find("/ObjA(Clone)") == null){   //(Clone)で探す
    Instantiate(ObjA, Vector3(0,0,0), Quaternion.identity);
}


これで、シーンがロードされるたびに、壊したくないオブジェクトがあるか無いか判断して、あったら作りません。
ここで注意は(Clone)を付けておくっていうこと。
if文がいつまでたってもtrueにならなくて困りました。

0 コメント:

コメントを投稿