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#的,性能還是可以。
*/