2013年6月8日土曜日

UNITY 2D ゲーム開発: public static 変数使ってて地味にはまる。

はいはいはい。
10分ぐらいですが、小ハマリしたので、メモがわりにブログエントリ。

C#にはグローバル変数のような物がない代わりに、クラスのメンバ変数をpublic staticで宣言する事でどこからでも参照できるようになっています。

例えば、

[GameObject]->[ScriptABC]->[public static int ImportantNumber]

のような感じですね。

コード的には、
public ScriptABC : monoBehavior

{
  public static int ImportantNumber;

  void Awake()
   {
        ImportantNumber = 10;
   }
}
のような感じに、ゲーム開始すぐ、変数に値をセットしてあげればいいわけです。

で、何でもいいので空のGameObjectをてきとーに作って、ドラッグ&ドロップで完成…

あれ?

と、ここから小ハマリです。

今回のスクリプトは、実はこんな順番で動いてほしかったんですね。
[ScriptABC]-->[ScriptXYZ]
でも、どうやら順番が逆みたい。うーん。
で、Unity Answers先生で調べてみた所、ありました。


アセットでスクリプトをクリックして選択すると、インスペクタの一番上に↑の画像のような表示が出てきます。

この右下のボタン、"Execution Order"をクリックすると、実行したいスクリプトの順番が設定できるのでした~。


ですよね。そういう仕組み、どっかにあると思ってたんだよね。
で、めでたく解決...おや、まだ動きがおかしい。


みなさん、Awake、Start、Updateはケースセンシティブですよ!!!
お後がよろしいようで…

*************
追記: static変数を使う場合、クラス名は短い方がいい。長いと、クラス名+変数名になるので、コードが読みにくくてたまらん。

0 件のコメント:

コメントを投稿

間違っていたらご指摘ください