はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】エディタ拡張でEnumを複数選択できるEnumMaskFieldは廃止されEnumFlagsFieldに置き換わったぽい

はじめに

エディタ拡張でEnumを複数選択する要素を作りたいときはEnumFlagsFieldを使おうねという記事になります。

Enumを複数選択


以前(Unity何からは要調査)はEnumMaskFieldで実装できたのですが、少なくともUnity2017.4の段階ではObsoleteつまり廃止となっており、EnumFlagsFieldの利用を推奨とのようです。

これだけで記事が終わるのも寂しいので、EnumFlagsFieldの使い方だけ紹介したいと思います。

EnumFlagsField

オーバーロードがたくさんあるのですが、まずは代表的なものを2つ紹介します。

public static Enum EnumFlagsField(Enum enumValue, params GUILayoutOption[] options);
public static Enum EnumFlagsField(string label, Enum enumValue, params GUILayoutOption[] options);

Unity - Scripting API: EditorGUILayout.EnumFlagsField

初見でみるとEnumってどう使うんやと思うかもしれませんので実際の使い方も見ていただけるとわかりやすいと思います。

使い方

公式ドキュメントからサンプルコードを引っ張ってきます。

using UnityEditor;
using UnityEngine;

class EnumFlagsFieldExample : EditorWindow
{
    enum ExampleFlagsEnum
    {
        None = 0, // Custom name for "Nothing" option
        A = 1 << 0,
        B = 1 << 1,
        AB = A | B, // Combination of two flags
        C = 1 << 2,
        All = ~0, // Custom name for "Everything" option
    }

    ExampleFlagsEnum m_Flags;

    [MenuItem("Examples/EnumFlagsField Example")]
    static void OpenWindow()
    {
        GetWindow<EnumFlagsFieldExample>().Show();
    }

    void OnGUI()
    {
        m_Flags = (ExampleFlagsEnum)EditorGUILayout.EnumFlagsField(m_Flags);
    }
}

ExampleFlagsEnumの中身はいわゆるビットフラグと言われるもので、複数のフラグを立てられるようにしたものですね。

記事より引用

www.hanachiru-blog.com

また0Nothingに対応し,~0(0の補数)Evertythingに対応しています。

0と~0


ビットフラグの操作については先ほど貼った記事を参照してみてください。