【Unity】EasyTouch5觸屏檢測


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后點擊鼠標試試。

學習資料 http://www.sikiedu.com/course/91

自用Demo https://gitee.com/guxin233/Unity_Easy_Touch_Demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM