【Unity】bit演算でフラグを持つ
特にRPGなどにおいて、状態異常を管理する際、
各状態異常に対してbool型を持つ方法が考えられると思います。
using UnityEngine; public class Sample : MonoBehaviour { private bool m_isPoison = false; private bool m_isParalysis = false; private bool m_isConfusion = false; // ... }
これでは一つ状態異常が増えるたびにif文やswitch文を挟んで管理がしずらくなります。
bit演算を使って管理しよう!という記事です。
ソースコード
使い方
Add,Removeでフラグを操作し、
Checkでフラグを持っているかの判別が可能です。
using UnityEngine; public class Sample : MonoBehaviour { // 各種状態をbool持つより // private bool m_isPoison = false; // private bool m_isParalysis = false; // private bool m_isConfusion = false; // ... // 一つのクラスで管理可能 private StateFlag m_flag = new StateFlag(); public void OnGUI() { Vector2 position = new Vector2(0.0f, 0.0f); Vector2 size = new Vector2(100.0f, 30.0f); // フラグの追加 if (GUI.Button(new Rect(position , size), $"Add {State.Poison}")) { m_flag.Add(State.Poison); } // フラグの削除 Vector2 position.y += size.y; if (GUI.Button(new Rect(position , size), $"Add {State.Poison}")) { m_flag.Add(State.Poison); } // フラグの確認 Vector2 position.y += size.y; GUI.Box(new Rect(position , size),$"{State.Poison} : {m_flag.Check(State.Poison)}"); } }