ドラッグイベントは、ビジュアル要素がドラッグアンドドロップの動作を行う際に送信されます。これはエディター専用のイベントです。
ドラッグアンドドロップ機能を実装するには、ビジュアル要素に特定のイベントに対するコールバックを登録する必要があります。
ドラッグ操作をサポートするビジュアル要素は、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 クラスを削除して、ドラッグされたオブジェクトの “ゴースト” を表示しなくすることができます。