uGUI のドラッグするためには IDragHandler
, IBeginDragHandler
, IEndDragHandler
の3つの interface を継承してやる必要があります
これを継承していると Eventsystem
が勝手に OnDrag
, OnBeginDrag
, OnEndDrag
を呼び出ししてくれます
ドラッグを反映させる
Canvas Overlay
OnDrag
で、eventData.delta
を anchoredPosition
に加算してやるだけで
簡単にドラッグ処理をさせることができます
しかしこれは Canvas が Overlay の場合のみしか利用できません
Canvas が Overlay以外
RectTransformUtility.ScreenPointToLocalPointInRectangle
を利用して、
タップした位置をローカル座標に変換する必要があります
Canvas
using UnityEngine; using UnityEngine.EventSystems; public class UGUIDragSample : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler { private RectTransform _rectTransform; private void Awake() { _rectTransform = transform as RectTransform; } public void OnDrag(PointerEventData eventData) { // Overlay の場合 _rectTransform.anchoredPosition += eventData.delta; // それ以外の場合 Vector2 outPos = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle( (RectTransform) _rectTransform.parent, eventData.position, eventData.pressEventCamera, out outPos); _rectTransform.localPosition = outPos; } public void OnBeginDrag(PointerEventData eventData) { } public void OnEndDrag(PointerEventData eventData) { } }