けいごのなんとか

Unityユーザーとしてのブログ。ギリギリ路線走ってます。

Unity4.2の新機能 - ObjectPicker

ObjectPickerがScriptから自由に扱えるようになりました

f:id:anchan828:20130722224229p:plain

使い方良くわからんかったのでメモ

選択されたオブジェクトを取得するには EditorGUIUtility.GetObjectPickerObject を使用します ObjectPickerのイベント取得は Event.current.commandName で判別を行います

  • ObjectSelectorUpdatedの場合

    • ObjectPicker内で選択されたオブジェクトが変更された時に呼び出されます
  • ObjectSelectorClosedの場合

    • ObjectPickerが閉じられた時に呼び出されます
using UnityEditor;
using UnityEngine;

public class Example : EditorWindow
{ 

    [MenuItem("Window/Example")]
    static void Do ()
    {
        GetWindow<Example> ();
    }

    Object currentObject = null;
    Object selectedObject = null;

    void OnGUI ()
    {
        //ObjectPickerを開く
        if (GUILayout.Button ("ShowObjectPicker")) {
            int controlID = EditorGUIUtility.GetControlID (FocusType.Passive);
            //CameraのコンポーネントをタッチしているGameObjectを選択する
            EditorGUIUtility.ShowObjectPicker<Camera> (null, true, "", controlID);
        }

        string commandName = Event.current.commandName;
        if (commandName == "ObjectSelectorUpdated") {
            currentObject = EditorGUIUtility.GetObjectPickerObject ();
            //ObjectPickerを開いている間はEditorWindowの再描画が行われないのでRepaintを呼びだす
            Repaint ();
        } else if (commandName == "ObjectSelectorClosed") {
            selectedObject = EditorGUIUtility.GetObjectPickerObject ();
        }

        EditorGUILayout.ObjectField (currentObject, typeof(Object), true);
        EditorGUILayout.ObjectField (selectedObject, typeof(Object), true);
    }
}