unity3d 镜头随触屏移动

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 镜头随触屏移动

时间: 2024-11-07 05:52:25

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

25.Unity3D手机中Input类touch详解-Unity触屏事件解析到底(Twisted Fate)

首先贴一下Unity支持的模型文件类型,以前没有收集过. Unity支持两种类型的3D文件格式: 1.  通用的"出口型"3D文件 如.fbx..dae..3ds..dxf..obj等文件格式. 2.  3D软件专用的3D文件格式 如Max, Maya, Blender,Cinema4D, Modo, Lightwave & Cheetah3D 等软件所支持的格式,如.MAX, .MB, .MA等等. Unity3D手机中Input类touch详解: 1.Input.touch

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

unity3d 触屏多点触控(旋转与缩放) /*Touch OrbitProgrammed by: Randal J. Phillips (Caliber Mengsk)Original Creation Date: 12/16/2011Last Updated:                   12/16/2011Desctiption: Simple orbit by one touch and drag, as well as pinch to zoom with two finger

联想的投影手机可投射触屏到任何表面

联想的投影手机可投射触屏到任何表面 内置投影仪的智能机--好吧,真的只有两款三星出品的--到目前为止都没有真正大受欢迎,但是联想认为它最终找到了这种组合正确的用例:投射触屏或者虚拟键盘到你的桌面.今天在联想技术世界会议中宣布的是Smart Cast,世界上第一款智能机,与现有的pico投影仪的DLP技术相对,内置集成免对焦激光投影仪.除了通常的墙壁投射模式以外,还有一个"表面模式",要求扭转顶部的投影仪镜头(以完成反射),使用支撑架支撑起手机,然后在你面前,你将会拥有一个投射触屏--可

移动端项目 添加 触屏 swipe事件[记录]

avalon 触屏 事件 tap, longtap, doubletap swipe, swipeleft, swiperight,swipedown,swipeup pinch, pinchstart,pinchend,pinchin,pinchout drag,dragstart,dragend, rotate,rotatestart,rotateend 移动端 触屏事件添加 测试  (https://segmentfault.com/a/1190000006012676) 挑选用到的模块加

触屏事件

iphone ipad开发: 关于触屏事件的一些操作 [cpp] view plaincopyprint? //轻击: //需要在你的ViewController里重写几个方法: //开始触摸的方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { messageLabel.text = @”Touches Began”; [self updateLabelsFromTouches:touches]; } //触

zTouch-移动端触屏开发利器(zepto touch扩展)

* Zepto.js v1.0.1 touch extend (Zepto.js v1.0.1 的swipe touch扩展)js-处理手机移动端web触屏手势动作. Zepto.js v1.0.1版本的touch.js模块引入使用后会导致页面很卡的情况,所以开发了一个新的扩展插件来替换其touch.js.已经过Android/ios测试. github* zTouch特点: zTouch.js只包含核心功能函数,不包含任何效果,简洁轻巧;    提供丰富的回调参数,可由用户自定义扩展效果(可参

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

JS代码(jquery.showup.js): /** * @Creator: Nelson Kuang/Fast Mover * @showup 翻页插件:实现原理,用margin-top来控制页面容器位置来实现上下翻页 * @License:The MIT License (MIT) * @调用方式 $("#container").showup({ startPage: 0,//开始页面 duration:1000//动画持续时间 }) * @Creator: Nelson Kua

JS移动客户端--触屏滑动事件

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart: //手指放到屏幕上时触发 touchmove: //手指在屏幕上滑动式触发 touchend: //手指离开屏幕时触发 touchcancel: //系统取消touch事件的时候触发,这个好像比较少用 每个触摸事件被触发

触屏版轻量级分页插件jqPagination分享

说到HTML5和jquery上的分页问题,优秀的分页插件网上一抓一大把,然而同时适合兼容在Ipad和手机端的网站分页却不是特别多. 或许有人会说,触屏现在流行下拉底部后加载下一页内容,类似微博和QQ空间那种模式,分页过时了.或许,阅读到底部后顺手点一下"下一页"和无需操作自动加载内容继续阅读,这小小的一点会给用户带来很不同的微妙感受. 可以肯定的是,当要展示数据量较大时,一定会用到分页的.一是给用户内容多少的预期,二是可以给浏览者提供一个停顿.如果用户看一篇文章已经翻了十几屏,滚动条还