Version: 2022.3
命令事件
布局事件

Drag-and-drop events

Drag events are sent during operations where visual elements have drag-and-drop behavior. This is an Editor-only event.

To implement drag-and-drop functionality, make sure that visual elements register callbacks for specific events.

支持拖动操作的视觉元素分为两个类型:

  • 可拖动视觉元素
  • 可放置视觉元素

您可以选择一个可拖动视觉元素,将其拖动到一个可放置视觉元素,然后释放该元素以将其放置。

The base class for all drag-and-drop events is DragAndDropEventBase.

事件 描述 涓滴 冒泡 可取消
DragExitedEvent Sent when the drag-and-drop process ends.
DragUpdatedEvent 在拖动的元素移到放置目标上方时发送。
DragPerformEvent 在拖动的元素放置到目标上方时发送。
DragEnterEvent 在拖动的元素进入新的 VisualElement 时发送。
DragLeaveEvent 在拖动的元素离开了当前放置目标时发送。

Make visual elements draggable

要使视觉元素可拖动,必须注册以下三种事件类型的回调:

使用以下步骤进行拖动操作:

  1. 将其状态设置为“正在被拖动”。
  2. 将相应数据添加到 DragAndDrop
  3. 调用 DragAndDrop.StartDrag()
  4. 为拖动操作提供视觉提示。放置区域视觉元素在收到 DragPerformEventDragExitedEvent 时应该删除此反馈。

事件列表

DragExitedEvent

当用户在视觉元素之上拖动任何可拖动的对象然后松开鼠标指针时,将发送 DragExitedEvent。当放置区域视觉元素收到 DragExitedEvent 时,它需要删除所有拖放操作反馈。

DragUpdatedEvent

当用户移动可拖动的对象时,如果指针移到视觉元素之上,则会发送 DragUpdatedEvent

当放置区域视觉元素收到 DragUpdatedEvent 时,它需要更新放置反馈。例如,可以通过将拖动对象的“虚影”移到鼠标指针下来达到此目的。

放置区域视觉元素还应该检查 DragAndDrop 属性,并设置 DragAndDrop.visualMode 来指示放置操作的效果。例如,放置操作可以创建新对象、移动现有对象或拒绝放置操作。

DragPerformEvent

当用户拖动任何可拖动的对象并在视觉元素之上松开鼠标指针时,将发送 DragPerformEvent。仅在视觉元素将 DragAndDrop.visualMode 设置为 DragAndDropVisualMode.NoneDragAndDropVisualMode.Rejected 以外的选项来指示它可以接受拖动对象时,才会发生此情况。

当放置区域视觉元素收到 DragPerformEvent 时,它需要对 DragAndDrop.objectReferencesDragAndDrop.pathsDragAndDrop.GetGenericData() 中存储的拖动对象执行操作。

例如,它可能会在用户放置对象的位置添加新的视觉元素。

DragEnterEvent

在拖动操作中,当指针进入视觉元素,则会发送 DragEnterEvent

当放置区域视觉元素收到 DragEnterEvent 时,它需要提供反馈,让用户知道它或其子项之一是潜在放置操作的目标。例如,可以将 USS 类添加到目标元素并在鼠标指针下显示拖动对象的“虚影”。

DragLeaveEvent

当用户移动可拖动的对象时,如果指针离开视觉元素,则会发送 DragLeaveEvent

当放置区域视觉元素收到 DragLeaveEvent 时,它需要停止提供放置反馈。例如,可以在目标元素收到 DragEnterEvent 时删除所添加的 USS 类并不再显示拖动对象的“虚影”。

示例

命令事件
布局事件