您的位置:首页 > 移动开发 > Unity3D

Unity在ipad上触屏双指上下左右移动,单指上下左右旋转

2017-03-06 10:57 531 查看
在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;
}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: