Unity AssetStore地址
https://assetstore.unity.com/packages/tools/input-management/easy-touch-5-touchscreen-virtual-controls-3322
從插件名Easy Touch 5 : Touchscreen & Virtual Controls可知,該插件包含了EasyTouch Lite(觸摸檢測)和Easy Touch Controls(虛擬搖桿)。所以導入項目后能看到下圖EasyTouch(觸屏檢測)和EasyTouchControls(虛擬搖桿)兩個文件夾,根據需要查看Demo和文檔,別搞錯啦。官方Demo放在EasyTouchBundle\EasyTouch\Examples\4.X\SimpleExamples目錄中。
Easy Touch4.X老版本的用法
導入EasyTouch插件后,在場景中右鍵新建EasyTouch—EasyTouch物體,該物體身上的EasyTouch腳本是使用該插件的關鍵,場景中沒有物體掛該腳本,就沒法使用插件的功能。
看文檔,基於訂閱事件的方式。自定義腳本,在OnEnable()中訂閱事件,在OnDisable()和OnDestroy()中取消訂閱。
using System.Collections; using System.Collections.Generic; using UnityEngine; using HedgehogTeam.EasyTouch; public class EasyTouch4Demo : MonoBehaviour { // 訂閱EasyTouch中的事件 private void OnEnable() { // 把自定義的事件加到EasyTouch的調用列表中即可 EasyTouch.On_TouchStart += OnTouchStart; EasyTouch.On_TouchUp += OnTouchEnd; EasyTouch.On_Swipe += OnSwipe; } // 取消EasyTouch中的事件訂閱 private void OnDisable() { EasyTouch.On_TouchStart -= OnTouchStart; EasyTouch.On_TouchUp -= OnTouchEnd; EasyTouch.On_Swipe -= OnSwipe; } // 取消EasyTouch中的事件訂閱 private void OnDestroy() { EasyTouch.On_TouchStart -= OnTouchStart; EasyTouch.On_TouchUp -= OnTouchEnd; EasyTouch.On_Swipe -= OnSwipe; } /* * 下面是自定義的方法,用於訂閱EasyTouch中的事件。 * 都要求傳參HedgehogTeam.EasyTouch.Gesture */ void OnTouchStart(Gesture gesture) { Debug.Log("OnTouchStart"); Debug.Log("startPosition : " + gesture.startPosition); } void OnTouchEnd(Gesture gesture) { Debug.Log("OnTouchEnd"); Debug.Log("actionTime : " + gesture.actionTime); } void OnSwipe(Gesture gesture) { Debug.Log("OnSwipe"); Debug.Log("swipe : " + gesture.swipe); } }
運行后鼠標按屏幕滑動即可看到打印輸出。
Easy Touch5.X新版本的用法
using System.Collections; using System.Collections.Generic; using UnityEngine; using HedgehogTeam.EasyTouch; public class EasyTouch5Demo : MonoBehaviour { // 演示EasyTouch5.x版本的新特新,可不用謝訂閱事件等一套語句 private void Update() { // 當前幀的當前手勢 Gesture currentGesture = EasyTouch.current; if (currentGesture != null) // 不操作時,當前幀的手勢返回空,要做為空判斷 { if (EasyTouch.EvtType.On_TouchStart == currentGesture.type) { //OnTouchStart(currentGesture); // 寫法1:直接在Update中寫邏輯 Debug.Log("OnTouchStart"); Debug.Log("startPosition : " + currentGesture.startPosition); } if (EasyTouch.EvtType.On_TouchUp == currentGesture.type) { // 寫法2:將邏輯抽取為方法,調用方法 OnTouchEnd(currentGesture); } if (EasyTouch.EvtType.On_Swipe == currentGesture.type) { OnSwipe(currentGesture); } } } /* * 下面是自定義的方法,用於訂閱EasyTouch中的事件。 * 都要求傳參HedgehogTeam.EasyTouch.Gesture */ void OnTouchStart(Gesture gesture) { Debug.Log("OnTouchStart"); Debug.Log("startPosition : " + gesture.startPosition); } void OnTouchEnd(Gesture gesture) { Debug.Log("OnTouchEnd"); Debug.Log("actionTime : " + gesture.actionTime); } void OnSwipe(Gesture gesture) { Debug.Log("OnSwipe"); Debug.Log("swipe : " + gesture.swipe); } }
5.X中的EasyTouch是靜態單例,可不用在場景中創建EasyTouch對象,運行時會自動創建。但是建議手動新建該物體,因為可以在編輯器中修改EasyTouch腳本的各項屬性,而不用在代碼中運行時去修改。
Easy Touch5.X新特性——QuickGesture
在給物體添加組件時,可以看到多了EasyTouch選項組,里面一系列Quick開頭的腳本(如QuickDrag,QuickSwipe等)都統稱為QuickGesture。該特性強大之處在於,加上該腳本就能直接操作物體,如加上QuickDrag后就能使物體可拖拽移動,而不用像之前的寫法在監聽事件中還要自己寫物體位移邏輯,非常的方便!QuickGesture腳本同樣可以綁定事件觸發的自定義方法。
QuickGesture組件(腳本)有如下:
- Quick Drag:拖拽
- Quick Enter Over Exist:手指進入、懸浮、離開物體
- Quick Long Tap:長按。若要同時監聽開始、按下中、結束三個事件,需要給同一物體添加三個該組件。
- Quick Pinch:縮放。同上,三個事件三個組件。(坑:勾上Gesture over me屬性時,兩指的連線在物體中,也算是手指在物體內,也會觸發事件。)
- Quick Swipe:屏幕滑動。可自定義滑動時物體的Transform如何變化,如繞着Y軸旋轉等。滑動與拖拽的區別在於,按下時是否有可響應EasyTouch事件的物體,沒有測判定為滑動,有則判定為拖拽。
- Quick Tap:點擊。可設置單指或雙指,也可設置是單擊或雙擊。同一物體中不要同時添加兩個該組件來分別監聽單擊和雙擊,否則雙擊時也會觸發單擊事件。
- Quick Touch:觸摸。同樣是單一物體掛三個該腳本分別監聽按下、按下時、彈起。其中彈起時還分為在物體內松手和在物體外松手的事件。
- Quick Twist:扭曲,順時針或逆時針的手勢,需要雙指。同樣可用兩個組件分別觸發扭曲時和扭曲結束的事件。
Easy Touch5.X新特性——EasyTouchTrigger
先編寫一個C#邏輯腳本文件。
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// EasyTouch5.x新特新--EasyTouchTrigger /// </summary> public class EasyTouchTriggerDemo : MonoBehaviour { public void PrintMsg(GameObject go) { if (go == null) { Debug.Log("Null"); } else { Debug.Log(go.name); } } public void PrintOK() { Debug.Log("OK"); } }
然后給物體掛上上面的腳本,添加EasyTouch--Trigger組件,自行添加各種事件Add Event及其回調。
注意點:
- 同一手勢事件中,可觸發多個回調函數。如上圖中On_TouchStart事件觸發了PrintMsg()和PrintOK()函數。
- 能觸發的函數必須是當前物體身上所掛載的腳本中的某一方法。即若物體沒有添加上圖的EasyTouchTriggerDemo.cs腳本,就不能觸發腳本內的方法。
其他Tips
- Quick Pinch和Quick Twist的End事件似乎會沖突,抬手時無法區分。
- QuickGesture中大部分檢測手勢在物體內才能觸發的事件,都要求物體有Collider碰撞器組件。
- EasyTouch支持在PC端開發時模擬雙指操作,場景中添加EasyTouch物體(掛有EasyTouch腳本),運行時按Ctrl或Alt后點擊鼠標試試。