在视觉元素具有拖放行为的操作期间,会发送拖动事件。该事件只能在 Editor 中使用。
要实现拖放功能,需要确保视觉元素会注册特定事件的回调。
支持拖动操作的视觉元素分为两个类型:
您可以选择一个可拖动视觉元素,将其拖到一个可放置视觉元素上,然后释放该元素以完成放置操作。
所有拖放事件的基类都是 DragAndDropEventBase。
| 事件 | 描述 | 涓滴 | 冒泡 | 可取消 |
|---|---|---|---|---|
| DragExitedEvent | 在拖放过程结束时发送。 | ✔ | ✔ | |
| DragUpdatedEvent | 在拖动的元素移到放置目标上方时发送。 | ✔ | ✔ | ✔ |
| DragPerformEvent | 在拖动的元素放置到目标上方时发送。 | ✔ | ✔ | ✔ |
| DragEnterEvent | 在被拖动的元素进入新的 VisualElement 时发送。 |
✔ | ||
| DragLeaveEvent | 在拖动的元素离开了当前放置目标时发送。 | ✔ |
要使视觉元素可拖动,必须注册以下三种事件类型的回调:
使用以下步骤进行拖动操作:
DragAndDrop 添加适当的数据。DragAndDrop.StartDrag()。DragPerformEvent 或 DragExitedEvent 时应删除此反馈。当用户在视觉元素之上拖动任何可拖动的对象然后松开鼠标指针时,将发送 DragExitedEvent。当放置区域视觉元素收到 DragExitedEvent 时,它需要删除所有拖放操作反馈。
当用户移动可拖动的对象时,且指针在视觉元素上方移动时,会发送 DragUpdatedEvent。
当放置区域视觉元素收到 DragUpdatedEvent 时,它需要更新放置反馈。例如,可以通过将拖动对象的“虚影”移到鼠标指针下来达到此目的。
放置区域视觉元素还应该检查 DragAndDrop 属性并设置 DragAndDrop.visualMode 来指示放置操作的效果。例如,放置操作可以创建新对象、移动现有对象或拒绝放置操作。
当用户拖动任何可拖动的对象并将鼠标指针释放在视觉元素上时,会发送该 DragPerformEvent。仅当视觉元素将 DragAndDrop.visualMode 设置为 DragAndDropVisualMode.None 或 DragAndDropVisualMode.Rejected 以外的对象以指示可以接受被拖动的对象时,才会发生这种情况。
放置区域视觉元素收到 DragPerformEvent 时,需要对存储在 DragAndDrop.objectReferences、DragAndDrop.paths 或 DragAndDrop.GetGenericData() 中的被拖动对象进行操作。
例如,它可能会在用户放置对象的位置添加新的视觉元素。
在拖动操作期间,当指针进入某个视觉元素时,会发送 DragEnterEvent。
当放置区域视觉元素收到 DragEnterEvent 时,它需要提供反馈,让用户知道它或其子项之一是潜在放置操作的目标。例如,可以将 USS 类添加到目标元素并在鼠标指针下显示拖动对象的“虚影”。
当用户移动可拖动的对象时,且指针退出视觉元素时,会发送 DragLeaveEvent。
当放置区域视觉元素收到 DragLeaveEvent 时,它需要停止提供放置反馈。例如,可以在目标元素收到 DragEnterEvent 时删除所添加的 USS 类并不再显示拖动对象的“虚影”。