input.touch拖动物体

using UnityEngine;
using System.Collections;

public class FollowCube : MonoBehaviour
{
//用于绑定参照物对象
public Transform target;
//缩放限制的系数
private float minVertical = 0f;
private float maxVertical = 85f;
//摄像头的位置
private float x = 0.0f;
private float y = 0.0f;
//缩放系数
private float distance = 0.0f;
//记录上一次用户触摸的位置判断用户是放大还是缩小的手势
private float newdis = 0;
private float olddis = 0;
// Use this for initialization
void Start()
{//初始化数据
distance = (transform.position - target.position).magnitude;
}

// Update is called once per frame

void Update()
{ //初始化游戏信息设置
//每帧旋转摄像机,使它保持注视目标
transform.LookAt(target);
//一秒来计算,一帧完成的时间
float dt = Time.deltaTime;
//绕世界坐标旋转的角度
x = transform.eulerAngles.y;
y = transform.eulerAngles.x;

if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
{
//判断是否是单点触摸
if (Input.touchCount == 1)
{//判断是是类型为移动触摸
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{ //根据触摸点计算x和y的位置,然后重置位置
//target.transform.Translate(Vector3.forward * Time.deltaTime * 5);
//target.transform.LookAt(target.position);
float x1 = Input.GetAxis("Mouse X");
float y1 = Input.GetAxis("Mouse Y");
x += x1 * dt * 150;
y += -y1 * dt * 150;
SetPos(x, y);

}
}
//判断为2点触摸
if (Input.touchCount == 2)
{//判断触摸的类型是这两个点移动触摸
if (Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
{//根据两个点的位置重新设置生成新的触摸点的位置
Vector3 s1 = Input.GetTouch(0).position;
Vector3 s2 = Input.GetTouch(1).position;
newdis = Vector2.Distance(s1, s2);
//判断新生成的位置是否大于原始的位置,函数返回真是为放大手势,假为缩小手势
if (newdis > olddis)
{
distance -= Time.deltaTime * 50f;
}
if (newdis < olddis)
{
distance += Time.deltaTime * 50f;
}
//备份上一次触摸点的位置,用于对比
print("distance = " + distance);
SetPos(x, y);
olddis = newdis;

}
}

}
else
{//判断鼠标是否为左键点击。函数返回真旋转
if (Input.GetMouseButton(0))
{

float x1 = Input.GetAxis("Mouse X");
float y1 = Input.GetAxis("Mouse Y");
x += x1 * dt * 150f;
y += -y1 * dt * 150f;
SetPos(x, y);

}

if (Input.GetAxis("Mouse ScrollWheel") != 0)
{
distance -= Input.GetAxis("Mouse ScrollWheel");
SetPos(x, y);
}
}

}

void SetPos(float x, float y)
{
y = ClampAngle(y, minVertical, maxVertical);
var rotation = Quaternion.Euler(y, x, 0.0f);
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;

}

static float ClampAngle(float angle, float min, float max)
{

if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp(angle, min, max);
}

}

时间: 2024-12-07 18:36:13

input.touch拖动物体的相关文章

在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放

在场景中添加一个Plan,Camera,Directional Light,Cube.添加两个脚本scrollerScirpt(挂在Camera),CubeDragScript(挂在Cube上). 1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下: void Update () { //鼠标滚轮的效果 //Camera.main.fieldOfView 摄像机的视野 //Camera.main.orthographicSize 摄像机的正交投影 //

拖动物体的时候,防止鼠标按下的时候对象突然跳动一下

$(function() { init(); }); // mouse interaction drag // 拖动物体的时候,防止鼠标按下的时候对象突然跳动一下: var stage, output; var diff={}; // 偏移量: function init(e) { stage = new createjs.Stage('demo1'); stage.mouseMoveOutside = true; var circle = new createjs.Shape(); circl

使用DragObject直接拖动物体(Drag Object)

1. 2. (1)Target: 目标物体.指的是拖动这个物体,会导致哪个物体移动.一般情况下,会吧物体自身拖动到这里完成设置. (2)Movement: 移动的

easy touch利用playmaker拖动ngui对象

最近在学习unity3d的几个插件.easy touch,playmaker,ngui.为了使几个能够一起使用,还弄了playmaker ngui scripts和easy touch addon 4 playmaker插件. 最近做的一个需要touch拖动一个ngui的2d对象,又想用playmaker来控制.这话怎么说怎么绕啊.反正,是有杀鸡用宰牛刀的感觉. 在easy touch addon 4 playmaker的例子里面有怎么拖动gui对象的示例,不过我在拖动ngui的时候发现总是不对

【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作. 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2176 文章来源:笨木头与游戏开发 1.找遍全世界,只为了发现你--FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的. 先给我

Blender 界面操作

1.旋转场景 使用鼠标中间键旋转整个场景.按住Shift键,再操作鼠标中间键则可平移整个场景. 2.数字键盘功能 数字键盘1.3.7,分别控制场景向前.向后.向上显示. 数字键盘5,可以在正射投影(Ortho)/透视投影(Persp)之间切换. 数字键盘0,从摄像头位置处查看物体,这个位置查看的物体也只最终呈现出来的视角. 当我们想对半选中物体一半的部分选中,可以先按5,把视图切换到正射方向,然后再按3键从前向后查看. 如果使用笔记本,可通过打开File->User Preferences-,切

前端托牵效果

上文说到,想将移动端的拖拽说一说,那现在趁有时间,就将这个福利文带来了,哈哈! 在我还不知道怎么做移动端的手势操作的时候,我觉得这TM实在是太难了,这是多么高深的学问啊,手势操作耶,上滑下滑左滑右滑的,手机怎么知道我是怎么滑的,我要怎么告诉手机,我用手滑了一下,于是我就默默的找资料看看, 到底是什么样的原理可以实现这一点,于是,我找到了移动端手势操作原生事件: touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:

用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现

Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * author: jackyWHJ */ var Block = cc.Sprite.extend({ id:0, name:"", active:true, pointX:0, pointY:0, beginPoint:null, flash:false, ctor:function (a

Windows phone 8 学习笔记(1) 触控输入(转)

Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事件和方法.触控覆盖了Windows phone 8绝大部分用户的输入,如何处理输入呢,微软从SL和XNA两个方面提供了多种选择,并支持多点触控,下面我们看看具体的实现方式. 一.触控输入的处理方式 Silverlight 1)操作事件    用于触控操作是一个过程性的,因此通过三个事件Manipul