「public const」ってstatic化するんですってよ

ボスの行動ルーチン作成中に困ったことが起きました。

行動内容を変数で取っていたんで、そのケース分けを定数で管理しようと思ったんですよ。
以下のような感じで

const int a = 100;


int state;


switch(state){
  case a:
    …
    break;
}

で、Unityってパーツ分けしてパーツごとにアニメーション指定できるので
別のパーツ部分からこの行動分岐ルーチンにアクセスしたかったんです。

その際、現状の行動内容をいれたかったから定数を参照したかったんですよね。

なので以下のように調整しました。

public void class ClassX(){
  public const int a = 100;
  …
}

public void class ClassY(){
  ClassX x = new ClassX();
  x.state = x.a;
  x.WayPoint();  //行動分岐ルーチン
}

するとエラーが起こるんですよね
x.state = x.a;」この部分で

頑張って調べた結果やっとこさ情報が出てきました。
public const」で指定したものはstaticと同じ扱いになるらしいです。
つまりプログラム状は一つしか存在できない定数になるんですね。

この状態の定数にアクセスするにはnewで作られたクラスからではダメらしいです。
なので以下のように修正したらうまくいきました。

public void class Y(){
  ClassX x = new ClassX();
  x.state = ClassX.a;
  x.WayPoint();  //行動分岐ルーチン
}

クラス名からの参照をすれば正しくアクセスできるみたいですね。

実際はGet関数とかを使うのが健全だと思います。
一つ一つ作るのが面倒だったので横着した結果ですね…。

とりあえずこれで解決したのでこのまま行こうと思います。


0 件のコメント:

コメントを投稿

あほげー参加作品「1万ニワトリ(略称)」の開発記録

あほげー第28回に参加してきました。 あほげーとは出されたお題に対して大体24時間でアホなゲームを作る企画です。 今回は2月8日に「にわとり」というお題が出され 翌9日にゲームを提出する形でした。 そしてこれが提出したゲーム 「10000円をニワトリで稼ぎたいだけの...