nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

Unity & NGUI でタッチやスワイプのイベントを取得する

はじめに

  • Unity & NGUI で、パズドラやポコパン的な、オブジェクトを選択してなぞるアクションをした場合のイベント取得方法をまとめました。

コード

  • UISprite と Box Collider と下記のスクリプトをアタッチしたゲームオブジェクトを、複数個シーンに配置して検証
public class TouchTest : MonoBehaviour {

    string strId;
    
    void Start () {
        strId = gameObject.GetInstanceID ().ToString ();
    }
    
    // タップ開始終了時に実行
    // isDown が true で開始、false で終了
    void OnPress (bool isDown) {
        Debug.Log ("PRESS(" + (isDown ? "DOWN" : "UP") + "): " + strId);
    }
    
    // タップ終了時に実行(タップ開始終了が同じオブジェクト上で発生した場合のみ)
    // OnPress と重複して実行される
    void OnClick () {
        Debug.Log ("CLICK: " + strId);
    }

    // ダブルタップ終了時に実行(タップ開始終了が同じオブジェクト上で発生した場合のみ)
    // OnPress, OnClick と重複して実行される
    void OnDoubleClick () {
        Debug.Log ("DOUBLE CLICK: " + strId);
    }

    // ドラッグ(スワイプ)開始時に一度だけ実行
    void OnDragStart () {
        Debug.Log ("DRAG START: " + strId);
    }
    
    // ドラッグ(スワイプ)中に繰り返し実行
    // delta に移動量が渡される
    void OnDrag (Vector2 delta) {
        //Debug.Log ("DRAG: " + strId);
    }
    
    // 別のオブジェクトでドラッグ(スワイプ)を開始した際に、このオブジェクト上にポインタが初めて重なったときに実行
    // draggedObject にはドラッグ(スワイプ)を開始したオブジェクトが渡される
    void OnDragOver (GameObject draggedObject) {
        Debug.Log ("DRAG OVER: " + strId);
    }
    
    // OnDragOver 後に、このオブジェクト上からポインタが外れた場合に実行
    // draggedObject にはドラッグ(スワイプ)を開始したオブジェクトが渡される
    // このオブジェクト上でドラッグ(スワイプ)を終了した場合も実行される
    void OnDragOut (GameObject draggedObject) {
        Debug.Log ("DRAG OUT: " + strId);
    }
    
    // ドラッグ(スワイプ)終了時に実行
    void OnDragEnd () {
        Debug.Log ("DRAG END: " + strId);
    }
}