Skip to content

Instantly share code, notes, and snippets.

@bzgeb
Created September 28, 2012 14:52
Show Gist options
  • Star 88 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save bzgeb/3800350 to your computer and use it in GitHub Desktop.
Save bzgeb/3800350 to your computer and use it in GitHub Desktop.
Example Drag & Drop area in a custom inspector for the Unity editor
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor (typeof(TriggerContainer))]
public class TriggerContainerEditor : Editor
{
private SerializedObject obj;
public void OnEnable ()
{
obj = new SerializedObject (target);
}
public override void OnInspectorGUI ()
{
DrawDefaultInspector ();
EditorGUILayout.Space ();
DropAreaGUI ();
}
public void DropAreaGUI ()
{
Event evt = Event.current;
Rect drop_area = GUILayoutUtility.GetRect (0.0f, 50.0f, GUILayout.ExpandWidth (true));
GUI.Box (drop_area, "Add Trigger");
switch (evt.type) {
case EventType.DragUpdated:
case EventType.DragPerform:
if (!drop_area.Contains (evt.mousePosition))
return;
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (evt.type == EventType.DragPerform) {
DragAndDrop.AcceptDrag ();
foreach (Object dragged_object in DragAndDrop.objectReferences) {
// Do On Drag Stuff here
}
}
break;
}
}
}
@serkber
Copy link

serkber commented Dec 21, 2017

I love you

@YoungXiang
Copy link

Couldn't love you more.

@zombience
Copy link

Everyone, everyone... just calm down. I love bzgeb more than any of you.

@DuffyScottC
Copy link

Thank you for this. You have saved me hours--no DAYS of searching.

@3Dmajid
Copy link

3Dmajid commented Aug 2, 2018

Thanks a world !!

@o2deprived
Copy link

@bzgeb - thank you for this!

For anyone experiencing issues using this method to capture and process Sprite types (or any other type that does not properly cast from Object, try using DragAndDrop.paths and then process using AssetDatabase.LoadResources<Type>(path). Refer to this forum post: https://stackoverflow.com/questions/39474689/how-to-drag-and-drop-multiple-sprites-in-inspector

I had to do this to properly collect and cast Sprites dropped on the field.

@keenanwoodall
Copy link

You're a legend! Is there a way to only draw the box if a drag is occuring?

@CSaratakij
Copy link

I love you~

@quizcanners
Copy link

Guys, what are you turning this comment section into! Can you please be serious?

bzgeb My love for you is like the raging sea,
So powerful and deep it will forever be.
Through storm, wind, and heavy rain,
It will withstand every pain.

@shielf
Copy link

shielf commented Apr 2, 2020

Oh I love you so much!

@shielf
Copy link

shielf commented Apr 2, 2020

@bzgeb - thank you for this!

For anyone experiencing issues using this method to capture and process Sprite types (or any other type that does not properly cast from Object, try using DragAndDrop.paths and then process using AssetDatabase.LoadResources<Type>(path). Refer to this forum post: https://stackoverflow.com/questions/39474689/how-to-drag-and-drop-multiple-sprites-in-inspector

I had to do this to properly collect and cast Sprites dropped on the field.

Love you too!!!

@magiquep
Copy link

This is nice, but how do you get a reference to the component being dragged instead of the entire object? For example, I want to drag a specific MonoBehavior component attached to the object so that I can add it to a list of behaviors to enable or disable, but the dragged_object only references the GameObject that the behavior is attached to.

@bzgeb
Copy link
Author

bzgeb commented May 17, 2020

Could you call GetComponent on the dragged game object?

@Elijahdanie
Copy link

Thanks a big Bunch!!!!

@Elijahdanie
Copy link

Elijahdanie commented May 19, 2020

This is nice, but how do you get a reference to the component being dragged instead of the entire object? For example, I want to drag a specific MonoBehavior component attached to the object so that I can add it to a list of behaviors to enable or disable, but the dragged_object only references the GameObject that the behavior is attached to.

How about Getting the GameObject and then call Getcomponent on it.
Gameobject obj = dragged_object as GameObject;
T type = obj.GetComponent< T >();

Give it a try

@magiquep
Copy link

No, GetComponent can't be called on Object. Anyway, I figured out my original issue which led me to try this solution so I don't need it anymore.

@Idle1man
Copy link

goodWork

@WeAthFoLD
Copy link

Wonderful!

@iendsl
Copy link

iendsl commented Mar 16, 2021

<3

@HoogsterInc
Copy link

I love you most. More than all those people from past years.
Seriously thanks for this - trying to jump into the Editor coding has been rough for me, and this gave me a great platform to jump into it.

@SiarheiPilat
Copy link

Dian son, this is good, thanks!

@loadinggames
Copy link

What a gigachad

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment