大家一定再思考 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 程式筆記的天堂
當你看完此篇文章,如果你覺得文章不錯
可以留下鼓勵的留言~
將是我的撰寫更多相關文章的動力
文章標籤
全站熱搜

謝謝你^^
相當助於學習,感謝教學!
謝謝你的教學,非常有助益
請問大大~~是直接套上camera就會有效果嗎? 為啥我套上後都沒效果? QAQ 有需要改麼嗎?~~~ 請救救我!!!
範例包, 匯入到專案中打開Scene 下載: http://ppt.cc/BKjlP 載點到自然死~
請問可以再放一下範例包嗎>_<
範例包消失了@@...可以再開一次嗎~~?
做得好 多謝分享