首先介紹一下Input.touches結構,這是一個觸摸數組,每個記錄代表着手指在屏幕上的觸碰狀態。每個手指觸控都是通過Input.touches來描述的:
| fingerId |
觸摸的唯一索引 |
| position |
觸摸屏幕的位置 |
| deltatime |
從最后狀態到目前狀態所經過的時間 |
| tapCount |
點擊數。Andorid設備不對點擊計數,這個方法總是返回1 |
| deltaPosition |
自最后一幀所改變的屏幕位置 |
| phase |
相位,也即屏幕操作狀態 |
其中phase(狀態)有以下這幾種:
| Began |
手指剛剛觸摸屏幕 |
| Moved |
手指在屏幕上移動 |
| Stationary |
手指觸摸屏幕,但自最后一陣沒有移動 |
| Ended |
手指離開屏幕 |
| Canceled |
系統取消觸控跟蹤,原因如把設備放在臉上或同時超過5個觸摸點
|
在Unity 游戲運行在手機上時鼠標左鍵的操作可以用觸摸屏幕來代替,但是無法代替多點的觸控。(也就是說在調用getaxis和getmousebutton等方法時手機上進行觸摸屏幕也可以響應)
下面是通過在手機上進行操作來實現旋轉和放大縮小的代碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float rotateSpeed;
public Vector2 nTouchPos1;
public Vector2 nTouchPos2;
public Vector2 oTouchPos1;
public Vector2 oTouchPos2;
// Update is called once per frame
void Update()
{
//旋轉
if (Input.GetMouseButton(0))
{
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
Debug.Log("開始旋轉");
float moveX = Input.GetTouch(0).deltaPosition.x;
Debug.Log("滑動的距離" + moveX);
transform.Rotate(Vector3.up * -rotateSpeed * moveX * Time.deltaTime);
}
}
}
ZoomInOut();
if (this.transform.position.y > 0)
{
return;
}
this.transform.Translate(new Vector3(0, 0.5f, 0) * Time.deltaTime);
}
bool IsEnLarge(Vector2 nPos1,Vector2 nPos2,Vector2 oPos1,Vector2 oPos2)
{
float nDis = Vector2.Distance(nPos1, nPos2);
float oDis = Vector2.Distance(oPos1, oPos2);
if(nDis<oDis)
{
return false;
}
else
{
return true;
}
}
void ZoomInOut()
{
if(Input.touchCount==2)
{
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
{
nTouchPos1 = Input.GetTouch(0).position;
nTouchPos2 = Input.GetTouch(1).position;
if(IsEnLarge(nTouchPos1,nTouchPos2,oTouchPos1,oTouchPos2))
{
Vector3 nScale = transform.localScale*1.01f;
transform.localScale = new Vector3(nScale.x, nScale.y, nScale.z);
}
else
{
Vector3 nScale = transform.localScale *0.99f;
transform.localScale = new Vector3(nScale.x, nScale.y, nScale.z);
}
oTouchPos1 = nTouchPos1;
oTouchPos2 = nTouchPos2;
}
}
}
}
