ドラッグイベントは、ビジュアル要素がドラッグアンドドロップの動作を行う操作の間に送信されます。これはエディター専用のイベントです。
ドラッグアンドドロップ機能を実装するには、ビジュアル要素に特定のイベントに対するコールバックを登録する必要があります。
ドラッグ操作をサポートするビジュアル要素は、2 つのタイプに分かれます。
ドラッグ可能なビジュアル要素を選択し、ドロップ可能なビジュアル要素へドラッグし、要素を離してドロップします。
すべてのドラッグアンドドロップイベントの基本クラスは DragAndDropEventBase です。
| イベント | 説明 | 下降 | 上昇 | キャンセル可能 |
|---|---|---|---|---|
| DragExitedEvent | ドラッグアンドドロッププロセスの終了時に送信されます。 | ✔ | ✔ | |
| DragUpdatedEvent | ドラッグされた要素がドロップするターゲットの上に移動するときに送信されます。 | ✔ | ✔ | ✔ |
| DragPerformEvent | ドラッグされた要素をターゲットにドロップするときに送信されます。 | ✔ | ✔ | ✔ |
| DragEnterEvent | ドラッグされた要素が新しい VisualElement に入るときに送信されます。 |
✔ | ||
| DragLeaveEvent | ドラッグされた要素が現在のドロップするターゲットを離れるときに送信されます。 | ✔ |
ビジュアル要素をドラッグ可能にするには、以下の 3 つのイベントタイプでコールバックを登録する必要があります。
以下の手順で、ドラッグ操作を行います。
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 を受信するときに、フィードバックを提供して、その要素、またはその子の 1 つが可能なドロップ操作のターゲットであることをユーザーに知らせる必要があります。例えば、USS クラスをターゲット要素に追加し、マウスポインターの下にドラッグされたオブジェクトの “ゴースト” を表示することができます。
DragLeaveEvent は、ユーザーがドラッグ可能なオブジェクトを移動する際に、そのポインターがビジュアル要素を離れるときに送信されます。
ドロップエリアのビジュアル要素が DragLeaveEvent を受信するときに、ドロップフィードバックの提供を停止する必要があります。例えば、ターゲット要素が DragEnterEvent を受信したときに加えた USS クラスを削除して、ドラッグされたオブジェクトの “ゴースト” を表示しなくすることができます。