什么是FingerGestures?
FingerGestures是Unity上,非常熱門的一款用於處理用戶輸入的插件
為什么要使用FingerGestures?
1:它統一了鼠標點擊和用戶觸摸的輸入模型。使得我們可以在UnityEditor里面就可以方便地進行觸摸測試(而不必發布到機器上)
2:它提供了豐富的觸摸、手勢事件支持
3:使用符合KISS原則,不需要復雜的配置,即可實現功能
4:這個吊了:允許用戶自定義手勢觸發圖案(無盡之劍的手勢觸發技能,用它輕松實現)
相信你已經迫不及待開始這段傳奇之旅了。下面通過一個簡單Tap(點擊)事件的例子:觸摸屏幕上的物體,輸出碰撞的物體名稱和碰撞點;
OK,讓我們開始了解這個神器
入門
1:導入FingerGestures的Unity安裝包,默認位置在Plugins/FingerGestures/目錄下
2:創建一個場景,將FingerGestures這個prefab拖進場景
3:創建一個空的GameObject(也可以用現有的),我們需要將觸摸的腳本掛載到這個上面
4:點擊該GameObject的屬性窗口,在彈出的窗口選擇FingerGestures,然后依次在如下兩個選項下,找到Tap Recognizer 和Screen RayCaster
5:將你場景里面的Camera的Tag設置成MainCamera(推薦)
或者你需要告訴FingerGestures,那個Camera才是它需要的(不推薦,個人測試,遇到碰撞優先級錯誤的問題)
設置Tag法:
或者手動指定法:
找到第4步驟添加的Screen RayCaster組件,指定相機
6:編寫測試代碼
FingerGestures里面方法傳遞有兩種方式
1:使用c# 代理方式(推薦,性能好)
2:類似Unity的SendMessage()廣播方式(方便,性能略低)
第1種代理法:創建一個腳本,黏貼下面的代碼,掛載到第三步驟創建的GameObject就好了
using UnityEngine; [RequireComponent(typeof(TapRecognizer))] public class InputHelper : MonoBehaviour { // Use this for initialization void Start () { TapRecognizer tapRecognizer = GetComponent<TapRecognizer> (); tapRecognizer.OnGesture += Tap_Gesture; } void Tap_Gesture (TapGesture e) { GameObject hittedObject = e.Selection; if (null != hittedObject) { Vector3 hitPos3d = e.Raycast.Hit3D.point; Debug.Log (hittedObject.name + " pos:" + hitPos3d); } else { } } }
第二種廣播法:
1:設置Tap Recognizer,如下把我們第三部創建的GameObject拖放到MessageTarget上
2:代碼:
去掉第一種代理法里Start()方法,就可以了
總結:
1:本文中推薦的步驟或者少配置、或者性能好,請使用的時候傾向於這些方式。
2:要碰撞的物體請設置一個Collider,在Component的Physics目錄下。
3:添加的兩個組件的作用:
Tap Recognizer:觸摸事件識別類
Screen RayCaster:物體被碰撞的時候,需要知道這道光線從哪里過來(和攝像頭的方向一致)