- Home /
How does conrolID work with ShowObjectPicker?
I'm trying to make a custom editor with multiple buttons that each display their own Object Picker upon click. I get the Object Picker but I'm having troubles assigning the events I get to the different buttons. The ShowObjectPicker function accepts a control ID as an argument, but I have no idea how to use it to differenciate between different pickers. Here is my code:
// Button 1
if (GUILayout.Button ("Button 1")) {
int controlID = EditorGUIUtility.GetControlID (FocusType.Passive);
EditorGUIUtility.ShowObjectPicker<UnityEngine.GameObject> (null, false, "", controlID);
}
if (Event.current.commandName == "ObjectSelectorClosed") {
if (EditorGUIUtility.GetObjectPickerObject() != null) {
myObject.myFunction1(EditorGUIUtility.GetObjectPickerObject());
}
}
// Button 2
if (GUILayout.Button ("Button 2")) {
int controlID = EditorGUIUtility.GetControlID (FocusType.Passive);
EditorGUIUtility.ShowObjectPicker<UnityEngine.GameObject> (null, false, "", controlID);
}
if (Event.current.commandName == "ObjectSelectorClosed") {
if (EditorGUIUtility.GetObjectPickerObject() != null) {
myObject.myFunction2(EditorGUIUtility.GetObjectPickerObject());
}
}
Both buttons display pickers, but the code cannot differenciate which picker sent the "ObjectSelectorClosed" event. How can make it to do that?
Answer by ecesis_llc · Feb 22, 2016 at 12:19 AM
I had a couple of object fields in my editor window. In order to tell which object field to fill I did the following.
Use the following code to open up a picker window with a specific control ID.
//in your EditorWindow class
int currentPickerWindow;
void ShowPicker() {
//create a window picker control ID
currentPickerWindow = EditorGUIUtility.GetControlID(FocusType.Passive) + 100;
//use the ID you just created
EditorGUIUtility.ShowObjectPicker<GameObject>(null,false,"ee",currentPickerWindow);
}
Then, in your method that draws the object field check for the event commandname "ObjectSelectorUpdated" and check if the open picker has your custom controlID. EditorGUIUtility.GetObjectPickerObject() should be the picker object you want.
Object effectGO = null;
if( Event.current.commandName == "ObjectSelectorUpdated" && EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow )
{
effectGO = EditorGUIUtility.GetObjectPickerObject();
currentPickerWindow = -1;
//name of selected object from picker
Debug.Log(effectGO.name);
}
Your answer
Follow this Question
Related Questions
Editor Window Views 0 Answers
Print to status bar. 0 Answers
SceneView.onSceneGUIDelegate GUI sorting problem 1 Answer
Custom Editor - Is there any way to detect whether the user is in Prefab editing mode? 1 Answer
Cannot close Preview Scene 0 Answers