日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fingerGgesture

發布時間:2024/1/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fingerGgesture 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天搬家,我被無情的從4樓請上了10樓。原因就是房東們為了爭家產打官司,受傷的永遠是我們這些打工的租房的碼農,呵呵!結果就是我們兩家做了一個調換把房子換了一下。東西太多了,真的好累啊,好累啊~~前幾天有個朋友問我Unity手勢操作,后來我還幫他做了一個例子。我覺得在Unity中用這個手勢操作的插件會很方便。以前我只是知道FingerGestures,但是沒有深入的用過,這兩天學習了一下。真的很好用。

? ? ? ? ? 最近研究了一下Unity中的一個手勢操作的插件FingerGestures。它能很方便監聽到Unity中的各種手勢事件:上下左右四方向的滑動事件、按下事件、抬起事件、移動事件、連擊事件、長按事件等等。它同時支持觸摸屏操作與鼠標操作,總起來說使用起來還是比較方便的,今天寫下教程記錄這個插件的詳細使用步驟。首先下載這個插件,大家可以在圣典上找這個插件的下載地址,當然也可以在本文最后下載該插件。

?我看了一下這個插件底層的實現步驟,他是通過C#代理的形式來實現手勢操作的。如下圖紅圈內所示,這五個重要的預設用來監聽觸摸與鼠標的手勢事件。包括:單手觸摸事件、雙手觸摸事件、鼠標事件、觸摸事件。這里我們使用一個單手的事件,如圖中所示將Finger Gertures Initializer拖拽入左側層次視圖中。

?

OK,上面我們說了該插件是通過C#代理形式來接收事件消息的,所以我們需要用腳本來注冊這些事件從而開始接收消息。接著創建一個立方體對象用以處理手勢操作,當然你也可以處理游戲中的任何對象。編寫腳本FingerEvent.cs ,把這個腳本掛在這個立方體對象之上。

FingerEvent.cs腳本?

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);

??? }

?//按下事件開始后調用,包括 開始 結束 持續中狀態只到下次事件開始! ???????? //OnFingerStationary 事件和? OnFingerDragMove 有一個區別。 ???????? //OnFingerStationary 是手指觸摸在屏幕中的事件,而OnFingerDragMove是先觸摸一下然后滑動的事件。 ???????? //如果你需要時時捕獲手指觸摸屏幕中的事件時 用OnFingerStationary 即可 ?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 ) ) ); ??? } }

如下圖所示,用鼠標還是IOS Android觸摸事件都能很好的在這個Cube上響應,大家把我的代碼手動的打一遍就什么都明白了。

?

?

? ? ? ? 上面的腳本,我們是直接綁定在立方體對象上來監聽它,如果你想在別的腳本監聽這個立方體對象的手勢操作。只需調用如下方法即可。這個方法官方封裝在了SampleBase中。因為官方的例子程序腳本是繼承它的,所以子類就可以直接使用父類的方法。可是SampleBase會自動初始化一個SampleUI的腳本,不想初始化這個腳本的話直接用下面方法就行,原理就是通過射線我就不過多的解釋了。傳遞鼠標或觸摸的2D坐標即可得到觸摸的3D模型對象。

// Return the GameObject at the given screen position, or null if no valid object was found public static GameObject PickObject( Vector2 screenPos ) { ??? Ray ray = Camera.main.ScreenPointToRay( screenPos ); ??? RaycastHit hit;

??? if( Physics.Raycast( ray, out hit ) ) ??????? return hit.collider.gameObject;

??? return null; }

最后大家仔細看一下官方的FingerGestures.cs腳本,所有的手勢操作的事件都在這里,包括單手操作事件、雙手操作事件、鼠標操作事件。

插件以及源碼下載地址:http://vdisk.weibo.com/s/ifRgG

總結

以上是生活随笔為你收集整理的fingerGgesture的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。