【发布时间】:2016-09-13 16:17:33
【问题描述】:
我有一个处理许多精灵数组的脚本。我不想一个一个地拖动它们,所以我为它写了一个CustomEditor,它可以让我使用拖放操作一次分配多个精灵:
[CustomEditor(typeof(MyMonoBehaviour))]
public class MyMonoBehaviourEditor : Editor
{
Sprite[] sprites;//actually Sprite[,][] but simplified here
Object[] DropAreaGUI()
{
Event evt = Event.current;
Rect drop_area = GUILayoutUtility.GetRect(0.0f, 20.0f, GUILayout.ExpandWidth(true));
GUI.Box(drop_area, "Drop here!");
switch (evt.type)
{
case EventType.DragUpdated:
case EventType.DragPerform:
if (!drop_area.Contains(evt.mousePosition))
return null;
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (evt.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
return DragAndDrop.objectReferences;
}
break;
}
return null;
}
void OnInspectorGUI(){
var drops = DropAreaGUI();
if (drops != null)
{
//the following line gives me error
sprites = drops.Select(x => (x as Sprite)).ToArray();
}
}
}
我锁定了检查器,从 Project 中选择了 12 个精灵,将它们拖到盒子上,当我放下它们时,它给了我这个错误:ArgumentException: GUILayout: Mismatched LayoutGroup.DragPerform
我注意到DragAndDrop.objectReferences 返回一个Object[],在我的例子中是Texture2D[],我不能将它转换为Sprite[]。我试过Sprite.Create,但它要求我没有的rect和pivot。
如何让 DragAndDrop 识别出我正在放置 Sprite 而不是 Texture2D?
【问题讨论】:
标签: unity3d