1. 程式人生 > >unity3d觸控式螢幕手勢控制鏡頭旋轉與縮放

unity3d觸控式螢幕手勢控制鏡頭旋轉與縮放



//用於繫結參照物物件 
    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 (GetComponent.<Rigidbody>())  
            GetComponent.<Rigidbody>().freezeRotation = true;  
    }  


    function Update ()          
    {  
        //判斷觸控數量為單點觸控  
        if(Input.touchCount == 1)  
        {  
            //觸控型別為移動觸控  
            if(Input.GetTouch(0).phase==TouchPhase.Moved)  
            {  
                //根據觸控點計算X與Y位置  
                x += Input.GetAxis("Mouse X") * xSpeed * 0.02;  
                y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;  
            }  
        }  
        //判斷觸控數量為多點觸控  
        if(Input.touchCount >1 )  
        {  
            //前兩隻手指觸控型別都為移動觸控  
            if(Input.GetTouch(0).phase==TouchPhase.Moved&&Input.GetTouch(1).phase==TouchPhase.Moved)  
            {  //Unity3d教程.html" target="_blank" class="relatedlink">Unity3d教程手冊:www.manew.com
                    //計算出當前兩點觸控點的位置  
                    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觸控式螢幕手勢控制鏡頭旋轉

//用於繫結參照物物件      var target : Transform;       //縮放係數       var distance = 10.0;       //左右滑動移動速度       var xSpeed = 250.0;       var yS

Unity3d觸控式螢幕手勢控制鏡頭旋轉卡位到目標物件

本文主要介紹如何在unity中通過滑鼠或手指觸控螢幕對鏡頭進行旋轉,並實現鏡頭旋轉卡位功能,使鏡頭平滑的旋轉至目標角度。 鏡頭繞著目標物件進行旋轉改變的是攝相機在世界座標中的x、y方向的座標值。那麼我們只需要在指令碼中控制相機的x\y座標即可。 將指令碼RotationTa

iOS開發中同時識別旋轉手勢

今天我在使用UIRotationGestureRecognizer和UIPinchGestureRecognizer時,發現它們在預設情況下不能同時被識別。而且在真機操作時,經常發生只識別縮放,難以識別旋轉的情況。所以將它們設為能同時識別是非常有必要的。 經過

[Unity3D]Unity3D遊戲開發之滑鼠旋轉實現3D物品展示

各位朋友,大家好,我是秦元培,歡迎大家關注我的博主,我的部落格地址是blog.csdn.net/qinyuanpei。最近博主重點研究了攝像機旋轉、縮放等問題,那麼今天為大家分享的是一個在3D展示中比較常用的功能,即通過滑鼠右鍵實現旋轉、滑鼠滾輪實現縮放、滑鼠中鍵實現平移

Unity 移動端簡單手勢控制(移動,旋轉

using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 點選螢幕實現縮放與旋轉,移動 /// </summary> public cl

Unity3D之滑鼠控制角色移動奔跑示例

最新補充。          一般在做滑鼠選擇時是從攝像機向目標點發送一條射線,然後取得射線與物件相交的點來計算3D目標點。後來在開發中發現了一個問題(射線被別的物件擋住了),就是如果主角的前面有別的遊戲物件擋著。此時如果使用射線的原理,滑鼠選擇被檔的物件,這樣主角就

WPF 觸控式螢幕多點觸控影象的旋轉和移動

<dxc:DXWindow xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/x

系列(二):所有子控制元件也隨著手勢、多點觸控layout

下面是一個功能強大的改造的例子: 可以實現以下需求: 1.兩個手指進行縮放佈局 2.所有子控制元件也隨著縮放, 3.子控制元件該有的功能不能丟失(像button有可被點選的功能,縮放後不能丟失該功能) 執行效果圖: java程式碼如下 MainActi

計算機圖形OpenGL學習五(二維幾何變換1.平移、旋轉)

二維幾何變換(平移、旋轉、縮放)本章涉及數學變換比較多,程式碼是次要的,數學理論可自己推導一下。【二維平移】通過將二維量加到一個點的座標上來生成一個新的座標位置,可以實現一次平移。將平移距離加到原始座標上獲得一個新的座標,實現一個二維位置的平移。為平移向量,使用列向量來表示各

在Unity中通過觸控式螢幕幕實現模型的旋轉

using UnityEngine; using System.Collections; public class ScaleAndRotate : MonoBehaviour {     private Touch oldTouch1;  //上次觸控點1(手指1)     private Touch ol

unity3d實現相機對場景物體的旋轉、平移檢視功能、近似於scene下檢視場景的效果

程式碼如下: using UnityEngine;using System.Collections;public class Camera_control_rotate : MonoBehaviour{public float moveSeed = 80f;//移動速度pu

在CSS3中,可以利用transform功能來實現文字或圖像的旋轉、傾斜、移動這四種類型的變形處理

for skew 文字 values alt 實例 垂直 -o 移動 CSS3中的變形處理(transform)屬 transform的功能分類 1.旋轉 transform:rotate(45deg); 該語句使div元素順時針旋轉45度。deg是CSS 3的“V

canvas和白鷺引擎中平移,旋轉

都是 canvas 引擎 偏移 坐標 這一 text sla 偏移量 canvas中的 translate() 和白鷺引擎中的 .x 或者 .y 所導致的平移效果並不是移動 目標元素,而是移動目標元素父親所在的坐標系。 例如 bgg.translate(100,100)

Matlab 圖像平移、旋轉、鏡像

more msh ret 結果 src end 初始 求解 http 今天學習了用Matlab實現對圖像的基本操作。在Matlab中,圖像是按照二維矩陣的形式表示的。所以對圖像的操作就是對矩陣的操作。 對圖像進行縮放、平移、旋轉,都可以轉化為矩陣的運算。 關於變換矩陣的構

屬性動畫---平移、旋轉、漸變、組合

佈局—5個按鈕,一個ImageView 平移 private void transAnimator() { ObjectAnimator objectAnimator = new ObjectAnimator().ofFloat(image,

java實現圖片的合併

公司有一個需求是 將一個二維碼放在 一個背景圖當中。 因為二維碼是從微信小程式官方獲取的一個byte[],所以需要做一定的調整。   BufferedImage ground = ImageIO.read(this.getClass().getClassLoader().getResource

問題解決——MFC SDI程式 CFormView中控制元件隨視窗

從來都是做對話方塊程式,這次想做個SDI的程式,想著用一下帶Robbin介面的office2007風格,就不用使用那些花錢的商業控制元件/UI庫了。 如果你不想看我打的文字,可以直接拷走程式碼,自己宣告上定義再略作修改就可以用了,不需大的修改。 -----------------------

css3實現顏色漸變、元素的2D轉換(元素的旋轉,移動,傾斜等)、元素轉換過渡效果

一、顏色漸變:background: linear-gradient(direction, color-stop1, color-stop2, ...); 引數:direction: 方向或者角度;  color-stop1, color-stop2, ... :指定漸變的

javascript獲取地圖多邊形中心點級別

查詢收集了地圖根據多個點座標計算出中心點與縮放級別 一、計算中心點 function getCenterPoint(path) { //var path =e.;//Array<Point> 返回多邊型的點陣列 //var ret=parseFl

CSS3中的變形處理——transform功能(旋轉、傾斜、移動)

1 transform屬性 在CSS3中,可以利用transform功能實現文字或影象的旋轉、縮放、傾斜、移動這4中型別的變形處理。 (1)瀏覽器支援 到目前為止:Safari3.1以上、Chrome8以上、Firefox4以上、Opera10以上瀏覽器支援該屬性。  2