クリック(タップ)入力で何をどうするか良く迷うので覚書。
OnMouseDown / OnMouseDrag / OnMouseUp
Collider または GUIElementのマウスクリック/タップに反応する
オブジェクトにはこれを使う。
1 2 3 4 5 6 7 8 9 10 11 12 |
using UnityEngine; public class Test : MonoBehaviour { void OnMouseDown() { Debug.Log("OnMouseDown"); } void OnMouseUp() { Debug.Log("OnMouseUp"); } void OnMouseDrag() { Debug.Log("OnMouseDrag"); } } |
OnBeginDrag / OnDrag / OnEndDrag
Imageとかの制御はこれ。
IBeginDragHandler, IDragHandler, IEndDragHandlerをオーバーライドする必要がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using UnityEngine; using UnityEngine.EventSystems; public class Test : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public void OnBeginDrag(PointerEventData eventData) { Debug.Log("OnBeginDrag"); } public void OnDrag(PointerEventData eventData) { Debug.Log("OnDrag"); } public void OnEndDrag(PointerEventData eventData) { Debug.Log("OnEndDrag"); } } |
Input.touches
GameControllerとかで一括制御する場合はこれ。
マウスクリックには対応していない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using UnityEngine; public class Test : MonoBehaviour { void Update() { foreach (Touch t in Input.touches) { var id = t.fingerId; switch(t.phase) { case TouchPhase.Began:Debug.Log("Began:"+id);break; case TouchPhase.Moved:Debug.Log("Moved:"+id);break; case TouchPhase.Stationary:Debug.Log("Stationary:"+id);break; case TouchPhase.Ended:Debug.Log("Ended"+id);break; case TouchPhase.Canceled:Debug.Log("Canceled"+id);break; } } } } |
Input.GetMouseButton
マウスクリックをGameControllerとかで一括制御する。
タップには対応していない。
1 2 3 4 5 6 7 8 |
using UnityEngine; public class Test : MonoBehaviour { void Update () { if (Input.GetMouseButtonDown(0)) Debug.Log("down"); if (Input.GetMouseButton(0)) Debug.Log("press"); if (Input.GetMouseButtonUp(0)) Debug.Log("up"); } } |
OnPointerDown / OnPointerClick / OnPointerUp
マウスクリックも画面タップも検知できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Test : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler { public void OnPointerDown (PointerEventData eventData) { Debug.Log ("call 1st"); } public void OnPointerUp (PointerEventData eventData) { //クリックしたまま動かすとその瞬間に呼ばれる Debug.Log ("call 2nd"); } public void OnPointerClick (PointerEventData eventData) { //クリックしたまま動かすと呼ばれない Debug.Log ("call 3rd"); } } |
EventTriggerの上書き
XxxHandlerを継承した書き方は、EventTriggerの上書きでも実現可能。
イベント一覧を好きにオーバーライドできる。
1 2 3 4 5 6 7 8 |
public class Test : EventTrigger { public override void OnPointerDown (PointerEventData eventData) { Debug.Log ("OnPointerDown "); } public override void OnPointerUp( PointerEventData data ) { Debug.Log( "OnPointerUp" ); } } |