首先介绍一下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;
            }
        }
    }
}
原文:https://www.cnblogs.com/v5-otto/p/11628767.html