2013年7月17日水曜日

AwakeがStartに負けた!

前提:
static varにドラッグしてGameIbjectを登録できなかった。
普通のvarに入れてから改めでstaticに代入してた。

こんな感じ。
どの関数にも入れてないから、Awakeで実行されるはずー。
static var num :int =8;
var objsTmp =new GameObject[num];
static var objs =new GameObject[num];
for (var l:int=0; l<num; l++){
objs[l] = objsTmp[l];
}

(ちなみに、staticの配列を定義する時に使っている"num"をstaticにしないで使うと、
上記"objsTmp"には使えるけれど、staticなobjsでは使えない!)


と、こ、ろ、が!

Startでこれを利用しようとしたら、何故かnullが帰ってくる。

Updateを使って代入タイミングをみると最初のフレームではまだnullのまま。
あれー?
Awake > Start > Update
の順で実行されるんじゃなかったっけ?
ちなみに、最初の1フレーム目だけnullで後は正常に代入されていた。


Updateでも間に合ってないって...

とりあえずStartを最初にyieldしたら読めた。
なんでこうなるのかわかんないけど、動くからいいかー。

追記=========
これは、間に合ってないんじゃなかった。

オブジェクトA・・・変数をAwakeで定義するスクリプトを保持
オブジェクトB・・・オブジェクトAの変数をStartで参照

という構成だったので、つまりはオブジェクトの表示タイミングが違ったために起こったわけです。
最初からシーンに表示していても、これは起こるので、現在は、オブジェクトAのAwake処理の最後に、終了フラグを仕込んで、オブジェクトBのスクリプトのStartはそちらのフラグを見て実行するように変更しています。

0 コメント:

コメントを投稿