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