转自:http://blog.csdn.net/LIQIANGEASTSUN/article/details/59753587
请点击链接查看原文,尊重楼主版权。
在Inspector 窗口上创建区域,向区域拖拽资源对象,获取到拖拽到区域的对象。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注意点:
绘制Box区域:
GUIContent title = new GUIContent(string msg);
var dragArea = GUILayoutUtility.GetRect(0f, 35f, GUILayout.ExpandWidth(true));
GUI.Box(dragArea, title);
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Scripts文件夹下新建脚本:
public class Car : MonoBehaviour
{
[SerializeField]
private Transform temp = null;
}
然后在Editor文件夹下创建脚本,拖拽事件相关:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class DragAreaGetObject : Editor
{
public static UnityEngine.Object GetOjbect(string meg = null)
{
Event aEvent;
aEvent = Event.current;
GUI.contentColor = Color.white;
UnityEngine.Object temp = null;
var dragArea = GUILayoutUtility.GetRect(0f, 35f, GUILayout.ExpandWidth(true));
GUIContent title = new GUIContent(meg);
if (string.IsNullOrEmpty(meg))
{
title = new GUIContent("Drag Object here from Project view to get the object");
}
GUI.Box(dragArea, title);
switch (aEvent.type)
{
case EventType.dragUpdated:
case EventType.dragPerform:
if (!dragArea.Contains(aEvent.mousePosition))
{
break;
}
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (aEvent.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
for (int i = 0; i < DragAndDrop.objectReferences.Length; ++i)
{
temp = DragAndDrop.objectReferences[i];
if (temp == null)
{
break;
}
}
}
Event.current.Use();
break;
default:
break;
}
return temp;
}
}
然后在Editor文件夹中创建脚本,绘制Car类:
using UnityEngine;
using System.Collections;
using UnityEditor;
[CanEditMultipleObjects]
[CustomEditor(typeof(Car))]
public class CarEditor : Editor
{
private SerializedProperty tempProperty;
private UnityEngine.Object tempObj = null;
void OnEnable()
{
tempProperty = serializedObject.FindProperty("temp");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
GUILayout.Space(10);
tempObj = DragAreaGetObject.GetOjbect();
if (tempObj != null)
{
tempProperty.objectReferenceValue = tempObj;
Debug.LogError(tempProperty.objectReferenceValue.name);
}
GUILayout.Space(10);
if (GUI.changed)
{
EditorUtility.SetDirty(target);
}
serializedObject.ApplyModifiedProperties();
}
}
效果:
拖拽Hierarchy面板一个物体到此区域,获取这个物体并打印。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后再次声明:
转自:http://blog.csdn.net/LIQIANGEASTSUN/article/details/59753587
请点击链接查看原文,尊重楼主版权。
补充:
或者:
使用EditorGUILayout.BeginHorizontal();这种绘制一个区域,接受拖拽放下鼠标
Rect dragRect = EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Add"))
{
}
EditorGUILayout.EndHorizontal();
Event e = Event.current;
if (dragRect.Contains(e.mousePosition))
{
if (e.type == EventType.DragUpdated)
DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
else if (e.type == EventType.DragPerform)
{
Object[] objs = DragAndDrop.objectReferences;
e.Use();
for (int i = 0; objs != null && i < objs.Length; i++)
{
if (objs[i] != null)
{
}
}
}
}