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?

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