close
大家一定再思考 Unity 製作 平板或手機的時候
如何要撰寫判斷左滑,右滑..等
兩指判斷放大縮小..等
想要達到切水果,快跑遊戲必熟悉的一項
以下是小編撰寫,範例程式 :
using UnityEngine; using System.Collections; public class gDefine { public enum Direction{ Up, Down, Left, Right } } public class Example_Hand : MonoBehaviour { //紀錄手指觸碰位置 private Vector2 m_screenPos = new Vector2 (); void Update () { #if UNITY_EDITOR || UNITY_STANDALONE MouseInput(); // 滑鼠偵測 #elif UNITY_ANDROID MobileInput(); // 觸碰偵測 #endif } void MouseInput() { if (Input.GetMouseButtonDown(0)) { m_screenPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y); } if(Input.GetMouseButtonUp(0)) { Vector2 pos = new Vector2(Input.mousePosition.x, Input.mousePosition.y); gDefine.Direction mDirection = HandDirection(m_screenPos, pos); Debug.Log("mDirection: " + mDirection.ToString()); } } void MobileInput () { if (Input.touchCount <= 0) return; //1個手指觸碰螢幕 if (Input.touchCount == 1) { //開始觸碰 if (Input.touches [0].phase == TouchPhase.Began) { Debug.Log("Began"); //紀錄觸碰位置 m_screenPos = Input.touches [0].position; //手指移動 } else if (Input.touches [0].phase == TouchPhase.Moved) { Debug.Log("Moved"); //移動攝影機 //Camera.main.transform.Translate (new Vector3 (-Input.touches [0].deltaPosition.x * Time.deltaTime, -Input.touches [0].deltaPosition.y * Time.deltaTime, 0)); } //手指離開螢幕 if (Input.touches [0].phase == TouchPhase.Ended || Input.touches [0].phase == TouchPhase.Canceled) { Debug.Log("Ended"); Vector2 pos = Input.touches [0].position; gDefine.Direction mDirection = HandDirection(m_screenPos, pos); Debug.Log("mDirection: " + mDirection.ToString()); } //攝影機縮放,如果1個手指以上觸碰螢幕 } else if (Input.touchCount > 1) { //記錄兩個手指位置 Vector2 finger1 = new Vector2 (); Vector2 finger2 = new Vector2 (); //記錄兩個手指移動距離 Vector2 move1 = new Vector2 (); Vector2 move2 = new Vector2 (); //是否是小於2點觸碰 for (int i=0; i<2; i++) { UnityEngine.Touch touch = UnityEngine.Input.touches [i]; if (touch.phase == TouchPhase.Ended) break; if (touch.phase == TouchPhase.Moved) { //每次都重置 float move = 0; //觸碰一點 if (i == 0) { finger1 = touch.position; move1 = touch.deltaPosition; //另一點 } else { finger2 = touch.position; move2 = touch.deltaPosition; //取最大X if (finger1.x > finger2.x) { move = move1.x; } else { move = move2.x; } //取最大Y,並與取出的X累加 if (finger1.y > finger2.y) { move += move1.y; } else { move += move2.y; } //當兩指距離越遠,Z位置加的越多,相反之 Camera.main.transform.Translate (0, 0, move * Time.deltaTime); } } }//end for }//end else if }//end void gDefine.Direction HandDirection(Vector2 StartPos, Vector2 EndPos) { gDefine.Direction mDirection; //手指水平移動 if (Mathf.Abs (StartPos.x - EndPos.x) > Mathf.Abs (StartPos.y - EndPos.y)) { if (StartPos.x > EndPos.x) { //手指向左滑動 mDirection = gDefine.Direction.Left; } else { //手指向右滑動 mDirection = gDefine.Direction.Right; } } else { if (m_screenPos.y > EndPos.y) { //手指向下滑動 mDirection = gDefine.Direction.Down; } else { //手指向上滑動 mDirection = gDefine.Direction.Up; } } return mDirection; } }
簡單使用方法就是掛載腳本就可以進行測試了
複製貼上 檔案名稱命 Example_Hand.cs
以下是測試結果
歡迎光臨 ~ Eg 程式筆記的天堂
當你看完此篇文章,如果你覺得文章不錯
可以留下鼓勵的留言~
將是我的撰寫更多相關文章的動力
文章標籤
全站熱搜