Unity3d 实现移动端的触摸屏操作-场景的缩放移动
通过Input.touchCount来判断触控点位,通过Input.GetTouch(0).phase来判断移动的类型。
其中phase(状态)有以下这几种:
Began:手指刚刚触摸屏幕
Moved:手指在屏幕上移动
Stationary:手指触摸屏幕,但自最后一阵没有移动
Ended:手指离开屏幕
Canceled:系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点
代码中主要用到的是TouchPhase.Began和TouchPhase.Moved。
完整代码如下,放置到主摄像机上即可:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MobileTouch : MonoBehaviour
{
//是否缩放
private bool IsZoom = false;
//当前双指触控间距
private float DoubleTouchCurrDis;
//过去双指触控间距
private float DoubleTouchLastDis;
//记录手指触碰的位置
Vector2 m_screenPos = new Vector2();
void Start()
{
}
void Update()
{
if ((Input.touchCount > 1) && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved))
{
// 多点触控
Touch touch1 = Input.GetTouch(0);
Touch touch2 = Input.GetTouch(1);
DoubleTouchCurrDis = Vector2.Distance(touch1.position, touch2.position);
if (!IsZoom)
{
DoubleTouchLastDis = DoubleTouchCurrDis;
IsZoom = true;
}
float distance = DoubleTouchCurrDis - DoubleTouchLastDis;
Camera.main.fieldOfView += (distance > 0 ? -1 : 1) * 1;//更改了摄像头的高度
DoubleTouchLastDis = DoubleTouchCurrDis;
}
else if (Input.touchCount == 1)
{
// 单点移动
if (Input.touches[0].phase == TouchPhase.Began)
{
//记录手指刚触碰的位置
m_screenPos = Input.touches[0].position;
}
if (Input.touches[0].phase == TouchPhase.Moved) //手指在屏幕上移动,移动摄像机
{
transform.Translate(new Vector3(Input.touches[0].deltaPosition.x * Time.deltaTime * -1, Input.touches[0].deltaPosition.y * Time.deltaTime * -1, 0));
}
}
}
}