前提
- Unity 2018.4.2f1
-
IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
のコールバック
発生順序
- OnPointerDown ~ ダウンした
- OnBeginDrag ~ ダウン後、最初にポインターが動いた
- OnDrag ~ ドラッグ開始後、さらにポインターが動いた
- OnPointerUp ~ アップした
- OnPointerClick ~ アップしたオブジェクトはダウンしたオブジェクトと同じだった
- OnEndDrag ~ ドラッグが終わった
ハマりどころ
- クリックが検出されたときは、既にポインターアップ済みです。
- 「ダウンで情報を生成してアップで破棄」とかだと、クリックでは既に破棄されていて失敗します。
- 「ダウンで生成」、「アップの際にダウン時のオブジェクトの上にいなければ(
!PointerEventData.hovered.Contains (PointerEventData.pointerPress)
)破棄」、「クリックで破棄」なら大丈夫のはずです。
- ドラッグ終了が検出されたときは、既にアップ&クリック済みです。
- 上記の「ダウンで情報を生成してアップまたはクリックで破棄」だと、同様に失敗します。
- 上記の条件に、さらに「ドラッグ中でなければ(
!PointerEventData.dragging
)」を加えて、「ドラッグ終了で破棄」することになります。