[Unityエディター拡張] 変数の型に合わせたフィールドを作成する

ヨメレバCSS
オリジナルCSS

PropertyFieldというメソッドを使うと、渡した変数の型に合わせたフィールドを描画してくれます。

例えば、string型のフィールド名を指定してやると、

EditorGUILayout.PropertyField(serializedObject.FindProperty("name"), new GUIContent("name"));

こういう描画に。

2_15_propertyfield

Bounds型だと、

EditorGUILayout.PropertyField(serializedObject.FindProperty("boundsValue"), new GUIContent("boundsValue"));

こう。

2_15_propertyfield2

フィールドの指定の仕方が、serializeObject.FindPropertyで取得してくるという方法でやることになります。

serializeObjectはエディトしているオブジェクトを指しています。

まあ、カスタムエディタでは、便利っぽいけど普通に代入して書いた方がわかりやすいわーって感じあるかもしれないですね。

クラスのフィールドが複数あって、とりあえずデフォルトの入力でいいからforとかで回して描画するときとかに便利かもしれません。

あとそうだ、privateなフィールドをCustormEditorで操作するときにはこれが使える。こっちが主な使い方かも。

その場合は、フィールドのほうにもSerializeField属性をつけないといけない。

[SerializeField]
private string privateValue;

フィールドの定義をこうして、

EditorGUILayout.PropertyField(serializedObject.FindProperty("privateValue"), new GUIContent("private"));

こうすると、

2_15_propertyfield3

こう。

このテキストボックスの値を変更すると、privateなフィールドに反映されます。

serializeObjectの注意点

serializeObjectを扱う上での注意点として、まず変更前にUpdate()を呼ぶこと。

これで、現在の最新の値を取得してきます。

エディター上ではインスペクタとカスタムウィンドウ上など、同じオブジェクトを触っている場合があるので、最新に保つようにしないといけないです。

変更した後はApplyModifiedProperties()を呼ぶこと。これで変更が確定します。逆にいうと、呼ばないと変更は反映されません。

SetDirtyをターゲットのオブジェクト(例でいうobj)に指定しても反映されないので、途中から追加する場合には注意が必要です。

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)