1. 程式人生 > >unity 攝像機圍繞物體轉動(有萬向鎖)

unity 攝像機圍繞物體轉動(有萬向鎖)



    public Transform target;//旋轉目標


    public float distance = 1.8f;//攝像機和目標之間的距離


    private float speedX = 240f;//x軸轉速
    private float speedY = 120f;//y軸轉速


    private float mX = 0.0f;//攝像機的旋轉角度x
    private float mY = 0.0f;//攝像機的旋轉角度y


    private float maxDistance = 5f; //攝像機最遠
    private float minDistance = 1.2f;//攝像機最近


    private float zoomSpeed = 0.2f;//攝像機的前進速度(放大)


    public bool isNeedDamping = true;//是否平滑過渡  


    public float damping = 1f;//平滑過渡速度




    // Use this for initialization
    void Start()
    {


        //開始的時候獲得角度
        mX = transform.eulerAngles.x;
        mY = transform.eulerAngles.y;
    }


    // Update is called once per frame
    void Update()
    {


        if (target != null && Input.GetMouseButton(0))
        {
            //獲得滑鼠右鍵拖拽
            mX += Input.GetAxis("Mouse X") * speedX * Time.deltaTime;
            mY -= Input.GetAxis("Mouse Y") * speedY * Time.deltaTime;
        }


        //滑鼠滾輪攝像機的距離
        distance -= Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
        //攝像機的距離範圍--限制
        distance = Mathf.Clamp(distance, minDistance, maxDistance);


        //射線機的旋轉(有萬向鎖問題)
         Quaternion mRotation = Quaternion.Euler(mY, mX, 0);
         Vector3 mPosition = mRotation * new Vector3(0, 0, -distance) + target.position;
        




        ////是否平滑過渡  
        //if (isNeedDamping)
        //{
        //    //在from和to之間旋轉-插值法
        //    transform.rotation = Quaternion.Lerp(transform.rotation, mRotation, Time.deltaTime * damping);
        //    transform.position = Vector3.Lerp(transform.position, mPosition, Time.deltaTime * damping);
        //}
        //else
        //{
        //    transform.rotation = mRotation;
        //    transform.position = mPosition;
        //}


        //不平滑移動
        transform.rotation = mRotation;
        transform.position = mPosition;


    }


    //限制角度
    private float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360) angle += 360;
        if (angle > 360) angle -= 360;
        return Mathf.Clamp(angle, min, max);
    }



相關推薦

unity 攝像機圍繞物體轉動

    public Transform target;//旋轉目標    public float distance = 1.8f;//攝像機和目標之間的距離    private float speedX = 240f;//x軸轉速    private float sp

unity 滑鼠控制攝像機圍繞物體旋轉

void LateUpdate() //對攝像機的操作寫在LateUpdate裡 { x += Input.GetAxis("Mouse X") * rotateSpeed

攝像機圍繞物體旋轉觀察

using System.Collections.Generic; using UnityEngine; public class CameraItem : MonoBehaviour {     //攝像機所要觀察的物體     public Transform target;     //攝像機距離物體的

unity攝像機環繞物體旋轉

最近做專案的時候遇到一個需求:需要環視某物體做360度展示 開始一直糾結,最終找到一個簡單的解決方法 實現原理: 把攝像機作為一個空物體的子物件,空物體自旋,攝像機也會旋轉,並且視角一直註釋著物體 具體實現: 要環視的物體 新建一個空物件

[Unity優化] Unity CPU性能優化 難度3 推薦4

難度 sset 依賴關系 目錄 數量 異步 繼續 過多 compare 原文地址: http://www.cnblogs.com/chwen/p/4396515.html   前段時間本人轉戰unity手遊,由於作者(Chwen)之前參與端遊開發,有些端遊的經驗可以直接

Unity 的一些優化總結 難度3 推薦4

rdo serial 分配內存 down 物理系統 頂點 最大 nbsp ade 原文地址: http://www.jianshu.com/p/3acee1101fe4 從別的地方看到一些資源使用方面的文章,從中抽取一些細節在這裏總結一下: Draw Call數量、Tria

stl中的transform註意其與for_each的不同點無返回值

bind2nd n) oid highlight tlist _each pre stream gin #include<iostream> using namespace std; #include"vector" #include"algorithm" #

Unity讀取Excel文件附源代碼

canvas ces factory xlsx ext reat 文件夾 system 鏈接 今天想弄個Unity讀取Excel的功能的,發現網上有許多方法,采用其中一種方法:加入庫文件 Excel.dll 和ICSharpCode.SharpZipLib.dll庫文件,(

系統引導文件之 boot.ini很多參數

命名 訪問 rdquo 企業版 運行 pro 解釋 點擊 編號 Windows NT類的操作系統,也就是Windows NT/2000/XP中,有一個特殊文件,也就是“BOOT.INI”文件,這個文件會很輕松地按照我們的需求設置好多重啟動系統。 &l

TCP網絡通訊如何解決分包粘包問題模擬代碼

負責 return 發送數據 pop boa target u3d swe n) TCP作為常用的網絡傳輸協議,數據流解析是網絡應用開發人員永遠繞不開的一個問題。 TCP數據傳輸是以無邊界的數據流傳輸形式,所謂無邊界是指數據發送端發送的字節數,在數據接收端接受時並不一定等

Unity--------------------的概念

ons summary 參數設置 旋轉 .html dir htm 關系 根據 萬向鎖 一直困惑我很久。。。。原因出在這裏,我以為歐拉角旋轉是以模型坐標(齊次坐標系)為旋轉軸。問題就來了,無論旋轉那個軸,其它兩個軸也會相應的變化,下面看圖: 根據上面的說明兩個旋轉面(

linux軟件安裝、rpm操作命令、本地yum配置什麽用

nbsp -i linux cto 需要 -c 局域網 資源 file 1.yum是什麽? yum的全稱是yellow dog updater,modified,是一個shell前端軟件包管理器;基於RPM包管理,能夠從指定的服務器下載RPM包並自動安裝,可以自動處理依賴性

C#高效能大容量SOCKET併發完成埠例子C#客戶端完整例項原始碼

遙望星空 好好幹,有前途! 部落格園 首頁 新隨筆 聯絡 管理 訂閱 隨筆- 1082  文章- 0  評論- 151  C#高效能大容量SOCKET併發(轉) C#高效能大容量SOCKET併發(零):程式碼結

hdu2524多少個矩形

/**/ #include <cstdio> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm&

ACMNO.9求Sn=a+aa+aaa+…+aa…aaan個a之值,其中a是一個數字。 例如:2+22+222+2222+22222n=5,n由鍵盤輸入。 輸入 n 輸出 a=2 時

題目描述 求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 n 輸出 a=2 時的Sn 樣例輸入 5 樣例輸出 24690 來源/

unity 旋轉尤拉角 解釋

萬向鎖 一直困惑我很久。。。。原因出在這裡,我以為尤拉角旋轉是以模型座標(齊次座標系)為旋轉軸。問題就來了,無論旋轉那個軸,其它兩個軸也會相應的變化,下面看圖: 根據上面的說明兩個旋轉面(圓圈)怎麼會共面,讓我迷糊。假設共面,那這兩個旋轉面的法線應該是旋轉軸,要想兩

hdu 1438 鑰匙計數之一狀壓dp地方不明白

Problem Description 一把鎖匙有N個槽,槽深為1,2,3,4。每鎖匙至少有3個不同的深度且至少有1對相連的槽其深度之差為3。求這樣的鎖匙的總數。 Input 本題無輸入 Output 對N>=2且N<=31,輸出滿足要求的鎖匙的總數。

CentOS7yum或原始碼包安裝Nginx的異同具體安裝過程

在cent下安裝軟體的方式大多用yum或者原始碼安裝。yum安裝屬於線上安裝的方式,安裝簡單不易出錯;原始碼包安裝是先將Nginx的原始碼下載下來,在自己的系統裡編譯生成可執行檔案,然後執行,好處是:因為是在自己的系統上編譯的,更符合自己系統的效能,也就是說在自己的系統上執行

判斷混合圖邊又存在歐拉回路方法

  假設有一張圖有向圖G',在不論方向的情況下它與G同構。並且G'包含了G的所有有向邊。那麼如果存在一個圖G'使得G'存在歐拉回路,那麼G就存在歐拉回路。   其思路就將混合圖轉換成有向圖判斷。實現的時候,我們使用網路流的模型。現任意構造一個G'。用Ii表示第i個點的入度,Oi表示第i個點的出度。如果存在一

Navicat12版本+破解教程檔案壓縮包

連結:https://pan.baidu.com/s/1S4oLqY5XLYqbt7nJAUTi4A 提取碼:tk7b   下載成功後: 1、點選navicat12018_premium_cs_x64 進行安裝 ,無腦下一步,下一步中只需要選擇同意,路徑,其他不用管,直接下一步,