드래그 이벤트는 시각적 요소에 드래그 앤 드롭 동작이 있는 작업 중 전송됩니다. 이는 에디터 전용 이벤트입니다.
드래그 앤 드롭 기능을 구현하려면 시각적 요소가 특정 이벤트에 콜백을 등록했는지 확인하십시오.
드래그 작업을 지원하는 시각적 요소는 다음 두 가지 유형으로 분리됩니다.
드래그 가능한 시각적 요소를 선택하여 드롭 가능한 시각적 요소로 드래그하고, 요소를 놓아 드롭할 수 있습니다.
모든 드래그 앤 드롭 이벤트의 기본 클래스는 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 클래스를 제거하고 드래그한 오브젝트의 ‘고스트’를 더 이상 표시하지 않으면 됩니다.