Unity手勢插件FingerGestures

點擊下載FingerGestures手勢插件

1、拖入Finger Gestures Initializer預製資源,在任意對象上添加以下腳本即可使用,注意:相機Camera的tag是MainCamera。

using UnityEngine;
using System.Collections;

public class FingerEvent :  MonoBehaviour {

    void OnEnable()
    {
        //啓動時調用,這裏開始註冊手勢操作的事件。

        //按下事件: OnFingerDown就是按下事件監聽的方法,這個名子可以由你來自定義。方法只能在本類中監聽。下面所有的事件都一樣!!!
        FingerGestures.OnFingerDown += OnFingerDown;
        //擡起事件
        FingerGestures.OnFingerUp += OnFingerUp;
        //開始拖動事件
        FingerGestures.OnFingerDragBegin += OnFingerDragBegin;
        //拖動中事件...
        FingerGestures.OnFingerDragMove += OnFingerDragMove;
        //拖動結束事件
        FingerGestures.OnFingerDragEnd += OnFingerDragEnd; 
        //上、下、左、右、四個方向的手勢滑動
        FingerGestures.OnFingerSwipe += OnFingerSwipe;
        //連擊事件 連續點擊事件
        FingerGestures.OnFingerTap += OnFingerTap;
        //按下事件後調用一下三個方法
        FingerGestures.OnFingerStationaryBegin += OnFingerStationaryBegin;
        FingerGestures.OnFingerStationary += OnFingerStationary;
        FingerGestures.OnFingerStationaryEnd += OnFingerStationaryEnd;
        //長按事件
        FingerGestures.OnFingerLongPress += OnFingerLongPress;

    }

    void OnDisable()
    {
        //關閉時調用,這裏銷燬手勢操作的事件
        //和上面一樣
        FingerGestures.OnFingerDown -= OnFingerDown;
        FingerGestures.OnFingerUp -= OnFingerUp;
        FingerGestures.OnFingerDragBegin -= OnFingerDragBegin;
        FingerGestures.OnFingerDragMove -= OnFingerDragMove;
        FingerGestures.OnFingerDragEnd -= OnFingerDragEnd; 
        FingerGestures.OnFingerSwipe -= OnFingerSwipe;
        FingerGestures.OnFingerTap -= OnFingerTap;
        FingerGestures.OnFingerStationaryBegin -= OnFingerStationaryBegin;
        FingerGestures.OnFingerStationary -= OnFingerStationary;
        FingerGestures.OnFingerStationaryEnd -= OnFingerStationaryEnd;
        FingerGestures.OnFingerLongPress -= OnFingerLongPress;
    }

    //按下時調用
    void OnFingerDown( int fingerIndex, Vector2 fingerPos )
    {
        //int fingerIndex 是手指的ID 第一按下的手指就是 0 第二個按下的手指就是1。。。一次類推。
        //Vector2 fingerPos 手指按下屏幕中的2D座標

        //將2D座標轉換成3D座標
        transform.position = GetWorldPos( fingerPos );
        Debug.Log(" OnFingerDown ="  +fingerPos); 
    }

    //擡起時調用
    void OnFingerUp( int fingerIndex, Vector2 fingerPos, float timeHeldDown )
    {

        Debug.Log(" OnFingerUp ="  +fingerPos); 
    }

    //開始滑動
    void OnFingerDragBegin( int fingerIndex, Vector2 fingerPos, Vector2 startPos )
    {
         Debug.Log("OnFingerDragBegin fingerIndex =" + fingerIndex  + " fingerPos ="+fingerPos +"startPos =" +startPos); 
    }
    //滑動結束
    void OnFingerDragEnd( int fingerIndex, Vector2 fingerPos )
    {

        Debug.Log("OnFingerDragEnd fingerIndex =" + fingerIndex  + " fingerPos ="+fingerPos); 
    }
    //滑動中
    void OnFingerDragMove( int fingerIndex, Vector2 fingerPos, Vector2 delta )
    {
           transform.position = GetWorldPos( fingerPos );
            Debug.Log(" OnFingerDragMove ="  +fingerPos); 

    }
    //上下左右四方方向滑動手勢操作
    void OnFingerSwipe( int fingerIndex, Vector2 startPos, FingerGestures.SwipeDirection direction, float velocity )
    {
        //結果是 Up Down Left Right 四個方向
        Debug.Log("OnFingerSwipe " + direction + " with finger " + fingerIndex);

    }

    //連續按下事件, tapCount就是當前連續按下幾次
    void OnFingerTap( int fingerIndex, Vector2 fingerPos, int tapCount )
    {

        Debug.Log("OnFingerTap " + tapCount + " times with finger " + fingerIndex);

    }

    //按下事件開始後調用,包括 開始 結束 持續中狀態只到下次事件開始!
    void OnFingerStationaryBegin( int fingerIndex, Vector2 fingerPos )
    {

         Debug.Log("OnFingerStationaryBegin " + fingerPos + " times with finger " + fingerIndex);
    }


    void OnFingerStationary( int fingerIndex, Vector2 fingerPos, float elapsedTime )
    {

         Debug.Log("OnFingerStationary " + fingerPos + " times with finger " + fingerIndex);

    }

    void OnFingerStationaryEnd( int fingerIndex, Vector2 fingerPos, float elapsedTime )
    {

         Debug.Log("OnFingerStationaryEnd " + fingerPos + " times with finger " + fingerIndex);
    }


    //長按事件
    void OnFingerLongPress( int fingerIndex, Vector2 fingerPos )
    {

        Debug.Log("OnFingerLongPress " + fingerPos );
    }

    //把Unity屏幕座標換算成3D座標
    Vector3 GetWorldPos( Vector2 screenPos )
    {
        Camera mainCamera = Camera.main;
        return mainCamera.ScreenToWorldPoint( new Vector3( screenPos.x, screenPos.y, Mathf.Abs( transform.position.z - mainCamera.transform.position.z ) ) ); 
    }
}





/*

FingerGestures最大的好處就是結合unity3d進行多點觸控,手勢識別,編寫一次代碼 ,通過配置來進行多平臺發佈
FingerGestures提供了3種不同的方法來檢測由用戶執行的拖動手勢。

方法1:使用默認的手勢事件
每個手指的手勢事件:爲每個單獨的手指,獨立的狀態
OnFingerTap                 輕敲
OnFingerDoubleTap
OnFingerSwipe               猛擊
OnFingerLongPress           長按
OnFingerDragBegin,OnFingerDragMove,OnFingerDragEnd  拖曳

全局手勢事件:
    當一個手指觸摸屏幕上:
    OnTAP
    OnDoubleTap
    OnSwipe
    OnLongPress
    OnDragBegin,OnDragMove,OnDragEnd
    兩個手指觸摸屏幕時:
    OnPinchBegin,OnPinchMove,OnPinchEnd              捏,夾
    OnRotationBegin,OnRotationMove,OnRotationEnd     旋轉
    OnTwoFingerTap
    OnTwoFingerSwipe
    OnTwoFingerLongPress
    OnTwoFingerDragBegin,OnTwoFingerDragMove,OnTwoFingerDragEnd

方法2:使用一個DragGestureRecognizer   一種識別器

方法3:使用“工具箱”:工具箱是一種更高級方便的方式,設計的理念是開箱就用,包括了很多腳本,但是沒有涉及到核心源碼,
所以不用的話  可以把這個包直接刪掉,FingerGestures  的事件註冊是基於c#的,性能還是可以。

*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章