【Unity】文字列プルダウンメニュー

Inspectorに文字列プルダウンメニューを表示する

PulldownAttribute

// PulldownAttribute.cs
using UnityEngine;
public class PulldownAttribute : PropertyAttribute
{
    public string[] names;
    public PulldownAttribute(params string[] names)
    {
        this.names = names;
    }
}
params キーワードを使用して、
可変個引数リストを引数にとるメソッド パラメータを指定できます

PulldownDrawer

using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(PulldownAttribute))]
public class PulldownDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        PulldownAttribute pulldownAttribute = (PulldownAttribute)attribute;
        if(pulldownAttribute.names.Length == 0 ) {
            this.DrawDefaultProperty(position,property,label);
            return;
        }
        if( property.propertyType == SerializedPropertyType.String ) {
            // 文字列のindexを取得する
            int index = Mathf.Max(ArrayUtility.IndexOf(pulldownAttribute.names,property.stringValue),0);
            // EditorGUI.Popupの結果を index として使用し文字列更新する
            property.stringValue = pulldownAttribute.names[EditorGUI.Popup(position,label.text,index,pulldownAttribute.names)];
            return;
        }
    }
}

使用方法

public class Foo : MonoBehaviour {
    [Pulldown("Alex","Chris","Conan")]
    public string pulldown;
}
f:id:kou_yeung:20131130122901p:plain