Unity 6.3
0 онлайн 36 гостей 3 в системе
Вход

События перетаскивания

События Drag отправляются во время операций, когда визуальные элементы имеют поведение перетаскивания. Это событие только для Редактора.

Чтобы реализовать функциональность перетаскивания, убедитесь, что визуальные элементы регистрируют обратные вызова для определенных событий.

Визуальные элементы, поддерживающие операции перетаскивания, подразделяются на два типа:

  • Перетаскиваемые визуальные элементы
  • Откидываемые визуальные элементы

Можно выбрать визуальный элемент, который можно перетаскивать, перетащить его на визуальный элемент, который можно сбрасывать, и отпустить элемент, чтобы его сбрасывать.

Базовый класс для всех событий перетаскивания — DragAndDropEventBase.

В следующей таблице описаны события перетаскивания и фазы их распространения:

Мероприятие Описание Просыпается Пузырьки вверх Аннулируемые
DragExitedEvent Отправляется после завершения процесса перетаскивания. Да Да Нет
DragUpdatedEvent Отправляется, когда перетаскиваемый элемент перемещается над целью сбрасывания. Да Да Да
DragPerformEvent Отправляется, когда перетаскиваемый элемент падает на цель. Да Да Да
DragEnterEvent Отправляется, когда перетаскиваемый элемент входит в новый VisualElement. Да Нет Нет
DragLeaveEvent Отправляется, когда перетаскиваемый элемент покидает текущее место назначения. Да Нет Нет

Сделать визуальные элементы перетаскиваемыми

Чтобы сделать визуальный элемент перетаскиваемым, необходимо зарегистрировать обратные вызова для следующих трех типов событий:

Для операции перетаскивания выполните следующие действия:

  1. Переведите его состояние в «перетаскивание».
  2. Добавить соответствующие данные в DragAndDrop.
  3. Вызов DragAndDrop.StartDrag().
  4. Обеспечить визуальный подсказчик для операции перетаскивания. Визуальный элемент зоны перетаскивания должен удалить эту обратную связь, когда он получает DragPerformEvent или DragExitedEvent.

Список событий

DragExitedEvent

DragExitedEvent отправляется, когда пользователь перетаскивает любой перетаскиваемый объект по визуальному элементу и отпускает указатель мыши. Когда визуальный элемент зоны перетаскивания получает DragExitedEvent, он должен удалить всю обратную связь от операций перетаскивания.

DragUpdatedEvent

DragUpdatedEvent отправляется, когда указатель перемещается над визуальным элементом, когда пользователь перемещает перетаскиваемый объект.

Когда визуальный элемент зоны перемещения получает DragUpdatedEvent, он должен обновить обратную связь перемещения. Например, вы можете переместить «призрака» перетаскиваемого объекта так, чтобы он оставался под указателем мыши.

Визуальный элемент drop area должен также проверять свойства DragAndDrop и устанавливать DragAndDrop.visualMode для указания эффекта операции сбрасывания. Например, операция сбрасывания может создать новый объект, переместить существующий объект или отклонить операцию сбрасывания.

DragPerformEvent

DragPerformEvent отправляется, когда пользователь перетаскивает любой перетаскиваемый объект и отпускает указатель мыши над визуальным элементом. Это происходит только в том случае, если визуальный элемент устанавливает DragAndDrop.visualMode на что-то другое, чем DragAndDropVisualMode.None или DragAndDropVisualMode.Rejected, чтобы указать, что он может принимать перетаскиваемые объекты.

Когда визуальный элемент зоны перемещения получает DragPerformEvent, он должен действовать на перетаскиваемые объекты, хранящиеся в DragAndDrop.objectReferences, DragAndDrop.paths или DragAndDrop.GetGenericData().

Например, он может добавить новые визуальные элементы в месте, где пользователь сбрасывает объекты.

DragEnterEvent

DragEnterEvent отправляется, когда указатель входит в визуальный элемент во время операции перетаскивания.

Когда визуальный элемент зоны сбрасывания получает DragEnterEvent, он должен предоставить обратную связь, которая позволит пользователю знать, что он или один из его дочерей является целью для потенциальной операции сбрасывания. Например, вы можете добавить USS класс к целевому элементу и показать «призрак» перетаскиваемого объекта под указателем мыши.

DragLeaveEvent

DragLeaveEvent отправляется, когда указатель выходит из визуального элемента, когда пользователь перемещает перетаскиваемый объект.

Когда визуальный элемент зоны сбрасывания получает DragLeaveEvent, ему нужно прекратить давать обратную связь о сбросе. Например, можно удалить USS-класс, добавленный, когда целевой элемент получил DragEnterEvent, и больше не отображает «призрака» перетаскиваемого объекта.

Примеры