So I’ve done a Drag and Drop list for a custom inspector I’m working on, but I keep getting the error “GUILayout: Mismatched LayoutGroup.DragPerform” whenever I add an object through drag and drop. Locating the error leads me to a BeginHorizontal line. I guess it’s related to how unity draws the inspector, but I’m pretty clueless as to how I should proceed.
Example code of the GUI:
foldActivate = EditorGUILayout.Foldout (foldActivate, "Activate Elements: "+onTrigger.activate.Length.ToString());
if (foldActivate)
{
onTrigger.activate = DragDrop (onTrigger.activate, "Drag'n'Drop
Activate Object");
for (int i = 0; i < onTrigger.activate.Length; i++)
{
if (onTrigger.delayActivate.Length <= i)
onTrigger.delayActivate = addFloat (onTrigger.delayActivate);
EditorGUILayout.BeginHorizontal ();
onTrigger.activate = EditorGUILayout.ObjectField (onTrigger.activate*, typeof(Object), true);*
onTrigger.delayActivate = EditorGUILayout.FloatField (onTrigger.delayActivate*, GUILayout.Width(30));*
* if (GUILayout.Button(deleteCon, GUILayout.Width (40)))*
* {*
* onTrigger.activate = deleteObj (onTrigger.activate, i);*
* onTrigger.delayActivate = deleteFloat (onTrigger.delayActivate, i);*
* }*
* EditorGUILayout.EndHorizontal ();*
* EditorGUILayout.Space ();*
* }*
* if (GUILayout.Button (“Add Activate”))*
* {*
* onTrigger.activate = addObj (onTrigger.activate);*
* onTrigger.delayActivate = addFloat (onTrigger.delayActivate);*
* }*
* }*
drag and drop function:
private Object[] DragDrop(Object[] objList, string boxDesc)
* {*
* var evt = Event.current;*
* var dropArea = GUILayoutUtility.GetRect (0.0f, 35.0f, GUILayout.ExpandWidth (true));*
* GUI.Box (dropArea, boxDesc);*
* switch(evt.type)*
* {*
* case EventType.DragUpdated:*
* case EventType.DragPerform:*
* if (!dropArea.Contains (evt.mousePosition))*
* return objList;*
* DragAndDrop.visualMode = DragAndDropVisualMode.Copy;*
* if (evt.type == EventType.DragPerform)*
* {*
* DragAndDrop.AcceptDrag ();*
* foreach (var draggedObject in DragAndDrop.objectReferences)*
* {*
* var go = draggedObject as GameObject;*
* if (!go)*
* continue;*
* List tempObj = new List();*
* tempObj.AddRange(objList);*
* tempObj.Add (go);*
* return tempObj.ToArray ();*
* }*
* }*
* Event.current.Use ();*
* return objList;*
* }*
* return objList;*
* }*