【Unity】列挙型で状態を管理する

投稿者: | 2020-11-18

列挙型で敵の状態を管理してみました。

  1. enum State : byte {
  2. Wandering,
  3. Tracking,
  4. Missing
  5. }
  6.  
  7. State state;

列挙型を宣言して、徘徊中・追跡中・見失っているの3つの状態を作りました。この型の変数も宣言しています。

名前には列挙した順に0から整数が割り当てられます。整数をこの型でキャストすると名前が出ます。

  1. Debug.Log((State)2); // Missing
  2. Debug.Log((byte)State.Tracking); // 1

デフォルトの定数の型はint型ですが、上のようにコロンを使って型を指定することもできます。実際はint型の方が処理が速いそうです。intはshortやbyteより高速に処理できる

冒頭のGifでは、変数に現在の状態を入れて、その値によって処理を変えています。

  1. // Update()
  2. if (state == State.Wandering)
  3. {
  4.  
  5. }
  6. else if (state == State.Tracking)
  7. {
  8. // 見失っている状態にする
  9. if (attention < 1)
  10. {
  11. state = State.Missing;
  12. }
  13.  
  14. }
  15. else if (state == State.Missing)
  16. {
  17.  
  18. }

整数で管理するよりもわかりやすいです。

名前に対応する値は好きなものを指定できます。

  1. enum State : byte {
  2. Wandering = 1, // 001
  3. Tracking = 2, // 010
  4. Missing = 4 // 100
  5. }

値を2の累乗にすることで、ビット演算に使えます。

  1. state = State.Wandering | State.Missing;
  2. Debug.Log(System.Convert.ToString((byte)state, 2)); // 101

HasFlagメソッドで、特定の状態のオンオフを確認できます。

  1. state = State.Wandering | State.Missing;
  2. Debug.Log(state.HasFlag(State.Tracking)); // False
  3. Debug.Log(state.HasFlag(State.Missing)); // True

コメントを残す

メールアドレスが公開されることはありません。