js

#pragma strict

//用于绑定参照物对象
var target : Transform;
//缩放系数
var distance = 10.0;
//左右滑动移动速度
var xSpeed = 250.0;
var ySpeed = 120.0;
//缩放限制系数
var yMinLimit = -20;
var yMaxLimit = 80;
//摄像头的位置
var x = 0.0;
var y = 0.0;
//记录上一次手机触摸位置判断用户是在左放大还是缩小手势
private var oldPosition1 : Vector2;
private var oldPosition2 : Vector2; //初始化游戏信息设置
function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x; // Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
} var newobject:Transform; function Update ()
{
//判断触摸数量为单点触摸
if(Input.touchCount == 1)
{
//触摸类型为移动触摸
if(Input.GetTouch(0).phase==TouchPhase.Moved)
{
//根据触摸点计算X与Y位置
x += Input.GetAxis("Mouse X") * xSpeed * 0.01;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.01; //按镜头距离调整位置和方向
var rotation = Quaternion.Euler(-y, x, 0);
transform.rotation = rotation; }
} //判断触摸数量为多点触摸
if(Input.touchCount >1 )
{
var n:Transform = Instantiate(newobject,transform.position,transform.rotation);
var fwd:Vector3 = transform.TransformDirection(Vector3.forward);
n.rigidbody.AddForce(fwd*2800); //前两只手指触摸类型都为移动触摸
if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
{
//计算出当前两点触摸点的位置
var tempPosition1 = Input.GetTouch(0).position;
var tempPosition2 = Input.GetTouch(1).position;
//函数返回真为放大,返回假为缩小
if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))
{
//放大系数超过3以后不允许继续放大
//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
if(distance > 3)
{
distance -= 0.5;
}
}else
{
//缩小洗漱返回18.5后不允许继续缩小
//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改
if(distance < 18.5)
{
distance += 0.5;
}
}
//备份上一次触摸点的位置,用于对比
oldPosition1=tempPosition1;
oldPosition2=tempPosition2;
}
}
} //函数返回真为放大,返回假为缩小
function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean
{
//函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势
var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));
var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));
if(leng1<leng2)
{
//放大手势
return true;
}else
{
//缩小手势
return false;
}
} //Update方法一旦调用结束以后进入这里算出重置摄像机的位置
function LateUpdate () { //target为我们绑定的箱子变量,缩放旋转的参照物
if (target) { //重置摄像机的位置
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position; //transform.rotation = rotation;
//transform.position = position;
}
} static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}

unity3d 镜头随触屏移动的更多相关文章

  1. unity3d 触屏多点触控(旋转与缩放)

    unity3d 触屏多点触控(旋转与缩放) /*Touch OrbitProgrammed by: Randal J. Phillips (Caliber Mengsk)Original Creati ...

  2. unity3d触屏操作对象运动

    using UnityEngine; using System.Collections; public class robot : MonoBehaviour { private GameObject ...

  3. Unity学习疑问记录之触屏

    当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...

  4. JavaScript触屏滑动API介绍

    随着触屏手机.平板电脑的普及和占有更多用户和使用时间,触屏的触碰.滑动等事件也成为javaScript开发不可避免的知识,现在何问起就和大家一起学习js的触屏操作,js的触屏touchmove事件,为 ...

  5. jQuery flickity 滑动触屏

    flickity是一款自适应手机触屏滑动插件,它的API参数很丰富,包括对齐方式.循环滚动.自动播放.是否支持拖动.是否开启分页.是否自适应窗口等. 在线实例 实例演示 使用方法 <div cl ...

  6. 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)

    本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...

  7. 触屏touchstart 与 click

    设计效果:当手指点击或触摸红框线menuList之外的部分时,弹框menuList消失. 问题:在优化触屏版的时候发现如图问题,当menuList弹出,手指触摸屏幕向下滑动时,menuList弹框不消 ...

  8. touch移动触屏滑动事件

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  9. 朋友圈常见单页面触屏滑动上下翻屏功能jQuery实现

    翻页插件:实现原理,用margin-top来控制页面容器位置来实现上下翻页.margin这属性很好用,可以用来制作侧栏动画滑出菜单(左菜单,右内容,控制两者的margin实现):或者head下滑菜单 ...

随机推荐

  1. PHP投票系统

    1.投票页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  2. [兼容]IE下textarea滚动条不能滚动

    在ie下,disable的textarea是不能使用滚动条的, 将disable改为readonly

  3. 快速分析apk工具aapt的使用

    前面walfred已经介绍了使用apktool对apk进行逆向编译,通过apktool我们的确可以反编译已经序列化后的AndroidManifest.xml和资源文件等等,但是有没有一种快速有效的工具 ...

  4. BZOJ 2595 斯坦那树

    很久以前就想做,后来弃坑了. 最近又在群里有人问了类似的问题,艾老师说是斯坦纳树(%%%) 就是状压DP,然后用Spfa对状态进行转移. #include <iostream> #incl ...

  5. eclipse安装插件的三种方式

    方式一:拷贝安装方式 将下载的插件文件中的plugins 和 features 文件夹直接天骄到eclipse中的plugins 和 features 文件夹中. 方式二:update安装方式 Hel ...

  6. chrome49 新特性 chrome.org转载

    Transitioning from SPDY to HTTP/2 Thursday, February 11, 2016 Last year we announced our intent to e ...

  7. Oracle 查看表空间的大小及使用情况sql语句

    --1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...

  8. IOS 取消表格单元格 TableViewCell 去掉高亮状态 点击Cell取消选择状态

    以下是两种实现效果 1. 自定义cell 继承UITableViewCell 重写 -(void)setSelected:(BOOL)selected animated:(BOOL)animated ...

  9. oracle 小知识

    oracle: 数值随机的函数是 dbms_random.value(最大值,最小值)   用法是select dbms_random(3,0) from dual; oracle: 获取前100条 ...

  10. ES6 - promise对象

    Promise的设计初衷 我们使用ajax请求数据,得到数据后再对数据进行操作,可是有时候,对得到的数据进行操作的过程中,可能又要用到ajax请求,这时,我们的代码就变成了这样: $.ajax({ s ...