雨亭

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

 

/*
Touch Orbit
Programmed by: Randal J. Phillips (Caliber Mengsk)
Original Creation Date: 12/16/2011
Last Updated:                   12/16/2011
Desctiption: Simple orbit by one touch and drag, as well as pinch to zoom with two fingers.
*/


var x:float;

var y:float;

var xSpeed:float;

var ySpeed:float;

var pinchSpeed:float;

var distance:float = 10;

var minimumDistance:float = 5;

var maximumDistance:float = 100;

private var touch:Touch;

private var lastDist:float = 0;

private var curDist:float = 0;

private var gameCamera:Camera;

function Start ()

{

        gameCamera = Camera.mainCamera;

}


function Update ()

{

        if (Input.GetKeyDown(KeyCode.Escape))

        {

                Application.Quit();

        }

       
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)

        {

                //One finger touch does orbit

                touch = Input.GetTouch(0);

                x += touch.deltaPosition.x * xSpeed * 0.02;

                y -= touch.deltaPosition.y * ySpeed * 0.02;

        }

        if (Input.touchCount > 1 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved))

        {

                //Two finger touch does pinch to zoom

                var touch1 = Input.GetTouch(0);

                var touch2 = Input.GetTouch(1);

                curDist = Vector2.Distance(touch1.position, touch2.position);

                if(curDist > lastDist)

                {

                        distance += Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;

                }else{

                        distance -= Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;

                }

 

                lastDist = curDist;

        }

       
        if(distance <= minimumDistance)

        {

                //minimum camera distance

                distance = minimumDistance;

        }

       

        if(distance >= maximumDistance)

        {

                //maximum camera distance

                distance = maximumDistance;

        }
       
       

        //Sets rotation

        var rotation = Quaternion.Euler(y, x, 0);

       

        //Sets zoom

        var position = rotation * Vector3(0.0, 0.0, -distance) + Vector3(0,0,0);

   //Applies rotation and position

        transform.rotation = rotation;

        transform.position = position;

}

 

function OnGUI()

{

        //Simple output to display the distance from the center

        GUI.Label(Rect(0,0,Screen.width, Screen.height),distance.ToString());

}

posted on 2014-09-16 17:40  雨亭  阅读(6706)  评论(0编辑  收藏  举报