uGUIでドラッグについてちょっとだけ詳しく

More than 1 year has passed since last update.

実装してみる

Hierarchy

DragHierarcy.PNG
Canvas追加してそのしたにImageいれました。

Script

TestDrag.cs
using UnityEngine;
using UnityEngine.EventSystems;

public class TestDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    // ドラックが開始したとき呼ばれる.
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log(1);

    }

    // ドラック中に呼ばれる.
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log(2);
    }

    // ドラックが終了したとき呼ばれる.
    public void OnEndDrag(PointerEventData eventData)
    {
        Debug.Log(3);
    }
}

こんな感じ。
IBeginDragHandler, IDragHandler, IEndDragHandler3つのインターフェースを継承するのがポイント。
IEndDragHandlerだけ継承してやってみたら反応しなくてちょっと嵌った。
これをImageにアタッチします。

Game

DragGame.PNG
白い画像の上をドラッグすればログがでるよ!

知っておくとよいこと

Drag Threshold

DragEventSystem.PNG
ここの設定でどのくらいで移動でドラッグかという設定が行えます。

eventeventData.delt

    // ドラックが終了したとき呼ばれる.
    public void OnEndDrag(PointerEventData eventData)
    {
        Debug.Log(eventData.delta);
    }

よく使いそうなのが、OnEndDragでどのくらい量をドラッグしたかということ。
eventData.deltaを使うとよい。戻り値はVector2
これはドキュメントみてもよくわからなかったんだけど「スクリーン座標での前フレームからの移動量」を表しているらしい。
すなわちヒュと素早く移動させたときに値が多くなる。

  • 左にヒュとやると(-10.0, 0.0)みたいな感じでxのマイナス値
  • 右はその逆
  • 上にヒュとやると(0.0, 10.0)みたいな感じでyのプラス値
  • 下はその逆

ドラッグでページを切り替えるみたいなときに使いそう。
大体5ぐらいがちょうどいいかも。


知っておくとよいことは、まだよくわかっていないんだけど、わかり次第追記していきます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.