Unity EasyTouch官方案例學習


一、代碼檢測手勢事件

1. EasyTouch4.x 寫法

  

 

  首先要手動在 Hierarchy 窗口添加 EasyTouch 物體,以觸摸(Touch)手勢為例,代碼如下:

 1 using UnityEngine;
 2 using HedgehogTeam.EasyTouch;       // 注意 using
 3 
 4 public class TouchMe : MonoBehaviour {
 5 
 6     private TextMesh textMesh;
 7     private Color startColor;
 8 
 9     // 注冊事件
10     void OnEnable(){
11         EasyTouch.On_TouchStart += On_TouchStart;
12         EasyTouch.On_TouchDown += On_TouchDown;
13         EasyTouch.On_TouchUp += On_TouchUp;
14     }
15 
16     void OnDisable(){
17         UnsubscribeEvent();
18     }
19     
20     void OnDestroy(){
21         UnsubscribeEvent();
22     }
23     
24     // 注銷事件
25     void UnsubscribeEvent(){
26         EasyTouch.On_TouchStart -= On_TouchStart;       // 觸摸開始
27         EasyTouch.On_TouchDown -= On_TouchDown;         // 觸摸進行時
28         EasyTouch.On_TouchUp -= On_TouchUp;             // 觸摸結束
29     }
30     
31     void Start () {
32         // 獲取組件
33         textMesh =(TextMesh) GetComponentInChildren<TextMesh>();
34         startColor = gameObject.GetComponent<Renderer>().material.color;
35     }
36     
37     // 觸摸開始
38     // 注意時間函數需要包括一個 Gesture 參數
39     private void On_TouchStart(Gesture gesture){
40         if (gesture.pickedObject == gameObject){
41             // 隨機顏色
42             RandomColor();
43         }
44     }
45     
46     // 觸摸進行時
47     private void On_TouchDown(Gesture gesture){
48         
49         // Verification that the action on the object
50         if (gesture.pickedObject == gameObject){
51             // 顯示觸摸事件持續時間
52             textMesh.text = "Down since :" + gesture.actionTime.ToString("f2");
53         }
54 
55     }
56     
57     // 觸摸結束
58     private void On_TouchUp(Gesture gesture){
59         // Verification that the action on the object
60         if (gesture.pickedObject == gameObject){
61             // 恢復原來的顯示
62             gameObject.GetComponent<Renderer>().material.color = startColor;
63             textMesh.text ="Touch me";
64         }
65     }
66     
67     // 隨機顏色
68     private void RandomColor(){
69         gameObject.GetComponent<Renderer>().material.color = new Color( Random.Range(0.0f,1.0f),  Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f));
70     }
71 }

  該代碼主要實現當觸摸物體的時候,隨機改變顏色並顯示觸摸事件持續時間,觸摸結束則恢復原來的顯示。

  注意:觸摸指手機端手指觸摸屏幕,等同於 PC 端鼠標單擊。另外要記得注銷事件。

  另外還有手勢事件:Tap, Long Tap, Double tap, Drag 等,實現類似。

 

  另外如果要實現雙手指操作,只需要在相應的 api 函數后面加上 2Fingers 即可,如 On_TouchStart2Fingers。

  EasyTouch 在 PC 端可以通過以下的方式模擬雙手操作:

    ctrl + 鼠標左鍵點擊確定第一個手指位置,然后 alt + 鼠標左鍵點擊確定第二個手指位置。

  

2. EasyTouch5.x 寫法

  5.x 之后就不需要手動添加 EasyTouch 了,系統會自動添加,但還是建議手動添加。以滑動(Swipe)手勢為例,代碼如下:

 1 public class RTS_NewSyntaxe : MonoBehaviour {    
 2     void Update () {
 3         // 獲取當前手勢
 4         Gesture current = EasyTouch.current;
 5         if (current == null)
 6             return;
 7 
 8         // 滑動時實現組件移動
 9         if (current.type == EasyTouch.EvtType.On_Swipe){
10             transform.Translate( Vector3.left * current.deltaPosition.x / Screen.width);
11             transform.Translate( Vector3.back * current.deltaPosition.y / Screen.height);
12         }
13 }

  可以看到我們可以在 Update 函數里實時檢測手勢類型了。其他手勢類型實現類似。

 

二、QuickGesture

   

  EasyTouch5.x 提供了更方便的實現手勢識別方式 QuickGesture。

  以手勢長按(LongTap) 為例,在需要添加手勢的物體上添加組件 QuickLongTap,組件屬性如下:

  

  其中 Name 用來在代碼里查找並做相應屬性修改。該組件屬性實現了當開始點擊這個物體的時候修改物體的顏色。

  如果我們需要同時在點擊時對物體做相應處理,那么我們可以再增加一個 QuickLongTap 組件,將 ActionTriggering 修改為 InPress,如下:

  

  相應的控制代碼部分如下:

1 // 修改物體顏色
2 public void ChangeColor(Gesture gesture){
3     RandomColor();
4 }
5     
6 // 顯示按壓時間持續時間
7 public void TimePressed(Gesture gesture){
8     textMesh.text = "Down since :" + gesture.actionTime.ToString("f2");
9 }

 

 

   當然還有其他 QuickSwipe, QuickPinch(縮放), QuickEnterOverExit(注意這是為手機端的進入出去,所以是按壓狀態下的進入出去), QuickTouch 等。

 

三、核心組件 EasyTouch

   

1. GUI compatibilty

  

  若取消勾選 UnityUICompatibility,則 EasyTouch 事件將不會對 UGUI 產生效果。

  若勾上 AutoupdatepickedUnityUI,則 EasyTouch 每一幀都會更新 currentGessture。(就是如果你不勾選在你移動過程中 currentGessture 會一直為剛點擊時的信息)

 

2. 接下來的屬性還是沒有搞懂 TODO

 

四、虛擬搖桿  JoyStick

   

  首先創建一個 Joystick 物體,如上所示。屬性如下:

  

 

1. Position & Size

   

  當前 Type 為 Static,若勾上 NoReturnOfTheThumb,則我們把搖桿拉出去后不會自動移回原來的位置。

  若將 Type 選為 Dynamic,屬性如下:

  

  搖桿默認是不顯示的,只有我們點擊相應區域時,才會出現搖桿。我們也可以設置搖桿可以出現的區域,通過設置 JoystickArea。

 

2. Axes properties

  

  若勾上 EnableUnityAxes,則我們在 PC 端也可以使用方位鍵來模擬搖桿方向。

   若勾上 Turn & Move Direction Action ,則搖桿會同時控制物體的移動和轉向。我們也可以勾上 Lock in jump 來使當我們跳躍的是否禁止轉向和移動。

  有些時候游戲物體需要運行游戲后才能創建,name我們可以勾上 Auto link on tag 來通過標簽來尋找控制的游戲物體。

 

3. Camera

   

  勾上 Enable tracking 之后,我們就可以實現相機跟隨了。我們可以自定義跟隨物體,也可以通過 tag 查找跟隨物體。

  Camera mode 有 Follow 和 Smooth Follow 兩種。當我們選擇 Follow 就是簡單的相機跟隨,保持偏移不變。而當我們選擇 Smooth Follow 時,當我們物體方向改變時,攝像機的方向也會跟着改變,從而我們只能看到物體的背部。

 

4. Sprites

  

  我們可以將搖桿修改為我們自制的圖片。

 

5. Events

  

  我們可以注冊相應的事件函數,當事件發生的時候調用相應的函數。

 


免責聲明!

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



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