この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
wiki:unity:tips:202 [2015/07/11 05:32] step |
wiki:unity:tips:202 [2015/07/11 05:43] (現在) step |
||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| ====== Imageのドラッグ&ドロップ処理 ====== | ====== Imageのドラッグ&ドロップ処理 ====== | ||
| - | goDragMeスクリプトをAddComponentしてください。 | + | |
| - | イベントハンドラを利用してUIのImageをドラッグ&ドロップします。m_OnEventPointerBegin、m_OnEventPointerEndにはコールバック関数を登録できます。 | + | ===== 通常のドラッグ&ドロップ処理 ===== |
| + | goDragMeスクリプトをAddComponentしてください。イベントハンドラを利用してUIのImageをドラッグ&ドロップします。m_OnEventPointerBegin、m_OnEventPointerEndにはドラッグ開始/終了時のコールバック関数が登録できます。 | ||
| <code csharp> | <code csharp> | ||
| ライン 171: | ライン 172: | ||
| } | } | ||
| + | </code> | ||
| + | \\ | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ===== 長押しからのドラッグ&ドロップ処理 ===== | ||
| + | goDragMeForLongPress スクリプトをUIにAddComponenntしてください。こちらはドラッグ開始のきっかけが触れた時ではなく長押し時に変更したものになります。 | ||
| + | |||
| + | |||
| + | <code csharp> | ||
| + | //------------------------------------------------------------- | ||
| + | //! 長押しからのドラッグ&ドロップ | ||
| + | //------------------------------------------------------------- | ||
| + | public class goDragMeForLongPress : goDragMeBase, | ||
| + | IDragHandler, IEndDragHandler, | ||
| + | IPointerDownHandler, IPointerUpHandler, IPointerExitHandler | ||
| + | { | ||
| + | private float m_longPressTime = 0.16f; | ||
| + | private float m_timer = 0.0f; | ||
| + | private bool m_isPress = false; | ||
| + | private PointerEventData m_eventData = null; | ||
| + | |||
| + | //------------------------------------------------------------- | ||
| + | //! 長押し判定時間の設定。 | ||
| + | //------------------------------------------------------------- | ||
| + | public void SetLongPressTime(float _time) | ||
| + | { | ||
| + | m_longPressTime = _time; | ||
| + | } | ||
| + | |||
| + | //------------------------------------------------------------- | ||
| + | //! 状態のクリア。 | ||
| + | //------------------------------------------------------------- | ||
| + | private void clearStatus() | ||
| + | { | ||
| + | m_isPress = false; | ||
| + | m_timer = 0.0f; | ||
| + | m_eventData = null; | ||
| + | } | ||
| + | |||
| + | public void OnPointerDown(PointerEventData _eventData) | ||
| + | { | ||
| + | m_isPress = true; | ||
| + | m_timer = 0.0f; | ||
| + | m_eventData = _eventData; | ||
| + | |||
| + | if (m_OnEventPointerBegin != null) | ||
| + | { | ||
| + | m_OnEventPointerBegin(m_eventData); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public void OnPointerUp(PointerEventData _eventData) | ||
| + | { | ||
| + | // ドラッグせずに指を離した。 | ||
| + | GameObject go = _eventData.pointerCurrentRaycast.gameObject; | ||
| + | if (_eventData.selectedObject == go) | ||
| + | { | ||
| + | if (m_OnEventPointerEnd != null) | ||
| + | { | ||
| + | m_OnEventPointerEnd(_eventData); | ||
| + | } | ||
| + | |||
| + | if (m_draggingIcon != null) | ||
| + | { | ||
| + | Destroy(m_draggingIcon); | ||
| + | m_draggingIcon = null; | ||
| + | } | ||
| + | clearStatus(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public void OnPointerExit(PointerEventData _eventData) | ||
| + | { | ||
| + | clearStatus(); | ||
| + | } | ||
| + | |||
| + | public void Update() | ||
| + | { | ||
| + | if (m_isPress) | ||
| + | { | ||
| + | m_timer += Time.deltaTime; | ||
| + | |||
| + | if (m_timer >= m_longPressTime) | ||
| + | { | ||
| + | // ドラッグ開始。 | ||
| + | var canvas = FindInParents<Canvas>(gameObject); | ||
| + | if (canvas == null) | ||
| + | { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | Image image = createImage(canvas, m_eventData); | ||
| + | if (image != null) | ||
| + | { | ||
| + | if (m_dragOnSurfaces) | ||
| + | { | ||
| + | m_draggingPlane = transform as RectTransform; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | m_draggingPlane = canvas.transform as RectTransform; | ||
| + | } | ||
| + | |||
| + | SetDraggedPosition(m_eventData); | ||
| + | } | ||
| + | clearStatus(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | //------------------------------------------------------------- | ||
| + | //! ドラッグ中 | ||
| + | //------------------------------------------------------------- | ||
| + | public void OnDrag(PointerEventData _eventData) | ||
| + | { | ||
| + | if (m_draggingIcon != null) | ||
| + | { | ||
| + | SetDraggedPosition(_eventData); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | //------------------------------------------------------------- | ||
| + | //! ドラッグ終了 | ||
| + | //------------------------------------------------------------- | ||
| + | public void OnEndDrag(PointerEventData _eventData) | ||
| + | { | ||
| + | if (m_draggingIcon != null) | ||
| + | { | ||
| + | if (m_OnEventPointerEnd != null) | ||
| + | { | ||
| + | m_OnEventPointerEnd(_eventData); | ||
| + | } | ||
| + | |||
| + | Destroy(m_draggingIcon); | ||
| + | m_draggingIcon = null; | ||
| + | } | ||
| + | clearStatus(); | ||
| + | } | ||
| </code> | </code> | ||