在ipad上触屏双指上下左右移动,单指上下左右旋转,代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MoveAndScoll : MonoBehaviour {
public Text text;
public Transform tar;
void Start () {
}
Vector3 lastPos;
Vector3 cunPos;
float cunDir;
float lastDir;
public float fingerDir= 5;//手指间距偏移量
Vector3 lastmosPos;
bool move;
bool scl;
public float sclspeed =1;
public float rotespeed=7;
void Update ()
{
OneTouch ();
TwoTouch ();
}
//单指
void OneTouch()
{
if (Input.touchCount==1)//旋转
{
Vector3 aimPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, Camera.main.transform.position.y));
Vector3 dir = (aimPos - transform.position).normalized;
if (lastmosPos!=Vector3.zero)
{
Vector3 m = (Input.mousePosition - lastmosPos).normalized * rotespeed;
tar.Rotate(new Vector3(m.y, -m.x, m.z), Space.World);
text.text = "旋转";
}
lastmosPos = Input.GetTouch(0).position;
if (Input.GetTouch(0).phase == TouchPhase.Ended )
{
lastmosPos = Vector3.zero;
}
}
}
//双指
void TwoTouch(){
if(Input.touchCount>=2)
{
cunDir = Vector3.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position);
float d = Mathf.Abs(cunDir - lastDir);
Vector3 cun = new Vector3
(
Input.GetTouch(0).position.x + Input.GetTouch(1).position.x,
Input.GetTouch(0).position.y + Input.GetTouch(1).position.y,
0
);
Vector3 cuPos = Camera.main.WorldToScreenPoint(tar.position);
Vector3 p = new Vector3(cun.x, cun.y, cuPos.z);
cunPos = Camera.main.ScreenToWorldPoint(p);
if (d > fingerDir && lastDir != 0 )//缩放
{
scl = true;
move = false;
if (cunDir / lastDir > 1)
{
text.text = "放大";
Camera.main.fieldOfView -= sclspeed;
}
if (cunDir / lastDir < 1)
{
Camera.main.fieldOfView += sclspeed;
text.text = "缩小";
}
}
else if (d < fingerDir && lastPos != Vector3.zero)//移动
{
move = true;
scl = false;
tar.position = tar.position + (cunPos - lastPos);
text.text = "移动";
}
lastPos = cunPos;
lastDir = cunDir;
if (Input.GetTouch(0).phase==TouchPhase.Ended||Input.GetTouch(1).phase==TouchPhase.Ended)
{
lastPos =Vector3.zero;
lastDir = 0;
move = false;
scl=false;
}
}
}
}