FC2ブログ

[Unity]Inspectorに列挙型を複数選択可能なポップアップを表示する

  • Day:2012.12.08 19:15
  • Cat:Unity
Inspectorに列挙型を複数選択可能なポップアップメニューを表示するためには
EditorGUILayout.EnumMaskFieldを使用します。

拡張したいコンポーネントのクラス

using UnityEngine;

public class Pokemon : MonoBehaviour
{
public TYPE Type;
}
拡張するために必要な列挙型

public enum TYPE
{
FIRE = 1 << 0,
AQUA = 1 << 1,
LEAF = 1 << 2,
}
拡張エディタクラス

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Pokemon))]
public class PokemonEditor : Editor
{
public override void OnInspectorGUI()
{
var pokemon = target as Pokemon;

pokemon.Type =
(TYPE)EditorGUILayout.EnumMaskField("タイプ", pokemon.Type);

// pokemon.Type == (TYPE)0 の場合、未選択
// pokemon.Type == (TYPE)1 の場合、「ほのお」
// pokemon.Type == (TYPE)2 の場合、「みず」
// pokemon.Type == (TYPE)3 の場合、「ほのお」「みず」
// pokemon.Type == (TYPE)4 の場合、「くさ」
// pokemon.Type == (TYPE)5 の場合、「ほのお」「くさ」
// pokemon.Type == (TYPE)6 の場合、「みず」「くさ」
// pokemon.Type == (TYPE)7 の場合、「ほのお」「みず」「くさ」
}
}
ss_20121120191419.png

EditorGUILayout.EnumMaskFieldはEnum型の値を返します。
そのため、戻り値をキャストする必要があります。

列挙型を複数選択可能なポップアップメニューで設定した値を使用したい場合、
下記のようなビット演算を行います。


if (((int)pokemon.Type & 1 << 0) != 0)
{
Debug.Log("ほのおタイプです。");
}
if (((int)pokemon.Type & 1 << 1) != 0)
{
Debug.Log("みずタイプです。");
}
if (((int)pokemon.Type & 1 << 2) != 0)
{
Debug.Log("くさタイプです。");
}
Unity Script Reference – EditorGUILayout.EnumMaskField

Comment

Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。