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

投稿者: | 2020-11-18

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

enum State : byte {
    Wandering,
    Tracking,
    Missing
}

State state;

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

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

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

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

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

// Update()
if (state == State.Wandering)
{

}
else if (state == State.Tracking)
{  
    // 見失っている状態にする
    if (attention < 1)
    {
        state = State.Missing;
    }

}
else if (state == State.Missing)
{

}

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

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

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

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

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

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

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

コメントを残す

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