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