Version: 2020.2
언어: 한국어
이벤트 응답
이벤트 합성

드래그 앤 드롭 지원

드래그 앤 드롭 기능을 구현하려면 드롭 영역 VisualElement와 드래그 가능한 VisualElement가 특정 이벤트에 대한 콜백을 등록해야 합니다. 이 페이지에서는 이러한 VisualElement가 이벤트를 수신하면 어떤 일이 발생하는지 설명합니다.

이벤트에 대한 자세한 내용은 이벤트 시스템 문서를 참조하십시오.

드롭 영역에 대한 콜백 등록

드롭 영역 VisualElement는 다음의 다섯 가지 이벤트 타입에 대한 콜백을 등록해야 합니다.

DragEnterEvent

사용자가 드래그 가능한 오브젝트를 드래그할 때 포인터가 VisualElement에 들어가면 DragEnterEvent가 전송됩니다.

드롭 영역 VisualElement가 DragEnterEvent를 수신하면 사용자에게 해당 드롭 영역 VisualElement 또는 그 자식이 잠재적인 드롭 동작의 타겟이라는 피드백을 제공해야 합니다.

예를 들어 타겟 요소에 USS 클래스를 추가하고, 드래그한 오브젝트의 “고스트”를 마우스 포인터 아래에 표시하여 이러한 작업을 수행할 수 있습니다.

DragLeaveEvent

사용자가 드래그 가능한 오브젝트를 드래그할 때 포인터가 VisualElement에서 나가면 DragLeaveEvent가 전송됩니다.

드롭 영역 VisualElement가 DragLeaveEvent를 수신하면 드롭 피드백 제공을 멈추어야 합니다.

예를 들어 타겟 요소가 DragEnterEvent를 수신할 때 추가한 USS 클래스를 제거하고 드래그한 오브젝트의 “고스트”를 더 이상 표시하지 않음으로써 이러한 작업을 수행할 수 있습니다.

DragUpdatedEvent

사용자가 드래그 가능한 오브젝트를 드래그할 때 포인터가 VisualElement 위에 놓이면 DragUpdatedEvent가 전송됩니다.

드롭 영역 VisualElement가 DragUpdatedEvent를 수신하면 드롭 피드백을 업데이트해야 합니다.

예를 들어 드래그한 오브젝트의 "고스트"를 마우스 포인터 밖으로 이동시켜 이러한 작업을 수행할 수 있습니다.

또한 드롭 영역 VisualElement는 DragAndDrop 프로퍼티를 검사하고 DragAndDrop.visualMode를 설정하여 드롭 동작의 효과를 표시해야 합니다. 예를 들어 드롭 동작을 통해 새 오브젝트를 생성하거나, 기존 오브젝트를 이동시키거나, 드롭 동작을 거부할 수 있습니다.

DragPerformEvent

사용자가 드래그 가능한 오브젝트를 드래그한 후 VisualElement 위에 마우스 포인터 커서를 놓으면 DragPerformEvent가 전송됩니다. 이 동작은 VisualElement가 DragAndDrop.visualModeDragAndDropVisualMode.None 또는 DragAndDropVisualMode.Rejected 이외의 것으로 설정하여 드래그한 오브젝트를 허용할 수 있다고 표시할 경우에만 발생합니다.

드롭 영역 VisualElement가 DragPerformEvent를 수신하면 DragAndDrop.objectReferences, DragAndDrop.paths 또는 DragAndDrop.GetGenericData()에 저장된 드래그한 오브젝트에 대해 적절한 조치를 취해야 합니다.

예를 들어 사용자가 오브젝트를 드롭한 위치에 새로운 VisualElement를 추가할 수 있습니다.

DragExitedEvent

사용자가 드래그 가능한 오브젝트를 드래그한 후 VisualElement 위에 마우스 포인터를 놓으면 DragExitedEvent가 전송됩니다. 이 동작은 드래그한 오브젝트를 허용할 수 있다고 표시하는 VisualElement가 하나도 없을 때 발생합니다.

드롭 영역 VisualElement가 DragExitedEvent를 수신하면 모든 드래그 앤 드롭 피드백을 제거해야 합니다.

참고: 현재 DragExitedEvent 전송을 방지하는 UI 툴킷에 버그가 있습니다. 이 버그를 피하려면 드래그 앤 드롭 동작을 멈출 때 전송되는 DragLeaveEvent에 관련 기능을 구현하십시오.

VisualElement를 드래그 가능하도록 만들기

VisualElement를 드래그 가능하도록 만들려면 다음 세 가지 이벤트 타입에 대한 콜백을 등록해야 합니다.

MouseDownEvent

드래그 가능한 VisualElement가 MouseDownEvent를 수신하면 해당 상태를 ’드래그 준비됨’으로 설정해야 합니다.

MouseUpEvent

드래그 가능한 VisualElement가 MouseUpEvent를 수신하면 해당 상태를 재설정해야 합니다.

MouseMoveEvent

드래그 가능한 VisualElement가 MouseMoveEvent를 수신하고 드래그 준비가 완료되면 다음을 수행해야 합니다.

  • 상태를 "드래그 중"으로 설정합니다.
  • 적절한 데이터를 DragAndDrop에 추가합니다.
  • DragAndDrop.StartDrag()를 호출합니다.
  • 드래그 동작의 오브젝트임을 보여주는 시각적 피드백을 제공합니다.

    DragPerformEvent 또는 DragExitedEvent를 수신하면 드롭 영역 VisualElement는 이 피드백을 제거해야 합니다.
이벤트 응답
이벤트 합성