列挙型で敵の状態を管理してみました。
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