前言
需求是这样:从资产面板中拖拽一个文件,比如表格的xlsx吧,到某个属性面板的框框中。然后获取这个文件的路径。大概如下图所示:
之前在一个网站中看到类似的教程,后来没翻到在哪里了。总之实现过程如下:
正文
1、思路
首先肯定要绘制一个文本框,然后获得他的Rect;
然后如果鼠标在拖拽中,那么判定是否拖到这个文本框里面了。
如果拖进来的时候有选中文件,并且文件符合选中条件,那么就调用API获取路径进行填写。
2、代码
[CustomEditor(typeof(OrginExcelData), true)]
[CanEditMultipleObjects]
public class BaseExcelDataEditor : Editor
{
SerializedProperty Path;
private void OnEnable()
{
Path = serializedObject.FindProperty("ExcelPath");
}
public override void OnInspectorGUI()
{
//获得一个长500的框
mExcelPathRect = EditorGUILayout.GetControlRect(GUILayout.Width(500));
EditorGUI.TextField(mExcelPathRect, curPath);
//如果鼠标正在拖拽中或拖拽结束时,并且鼠标所在位置在文本输入框内
if ((Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragExited)&& mExcelPathRect.Contains(Event.current.mousePosition))
{
//改变鼠标的外表
DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0)
{
string retPath = DragAndDrop.paths[0];
curPath = retPath;
}
}
Path.stringValue = curPath;
serializedObject.ApplyModifiedProperties();
}
}