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;
}
}
}
}
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;
}
}
}
}
相关文章推荐
- 虚拟现实-VR-UE4-编辑自定义Character-上下左右移动-旋转
- unity中如何用鼠标右键控制摄像机视角上下左右移动
- Unity用键盘控制物体左右旋转前后移动的c#脚本
- silverlight中 Storyboard(动画)的使用,实现球的上下循环移动,左右移动,及旋转功能
- unity FPS 将原来的left,right控制左右移动改为控制向左向右旋转
- Unity 鼠标点击左右移动,人物跟随旋转
- Unity 3D 控制物体上下左右均匀移动脚本
- 360°旋转 放大 上下左右移动
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- js 键盘控制表格input上下左右移动
- jQuery实现百度图片移入移出内容提示框上下左右移动的效果
- Drag and Drop from Grid to Grid Example,增加上下、左右移动的功能。
- Drag and Drop from Grid to Grid Example,增加上下、左右移动的功能。
- Unity控制移动、旋转
- TiledMapEditor创建地图,精灵在地图上下左右移动,尚未实现碰撞检测功能
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Android 控件的显示隐藏上下左右移动动画
- Unity 3D 控制物体前后左右均匀移动脚本
- Android——滑动监听RecyclerView线性流+左右划删除+上下移动
- DataGrid实现(上下左右移动,添加删除行列,导出,表头拖动)