【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)}");
    }

}