Unity中攝像機圍繞物體旋轉的功能

2021-08-20 09:49:02 字數 1028 閱讀 9585

當然啦其實圍繞旋轉的功能本身並不難:

// 拖動攝像機圍繞物體旋轉

if (input.getmousebutton(1))

用**把攝像機移動到指定位置也不難:

public void moveto(vector3 veccenter, vector3 vecposition, float time));}

困難的是,用**移動之後,使用者再用滑鼠控制攝像機時,會出現視角跳躍的現象。

這個問題的核心在於,moveto() 的時候沒有設定適當的 x 與 y 值,所以解決方案本來很簡單,只要把這兩個值設定一下就行了。

但是!四元數的乘法是沒有逆運算的!

也就是說,下面這一句求direction的**不能逆運算:

vector3 direction = q * vector3.forward;

當然其實辦法還是有的,就像這樣:

quaternion.fromtorotation(vector3.forward, direction);

但算出來的 q 和原來的 q 長得不一樣……

為什麼說「長得不一樣」呢?因為這兩個四元數本質上是等價的(但不要問我為什麼,我的數學是體育老師教的……

而且我還發現,q 和下面這個四元數對於【求direction的**】也是等價的:

quaternion.euler(q.eulerangles.x, q.eulerangles.y, 0);

於是問題就這樣解決了,在 moveto() 中給 x 和 y 這樣賦值:

// 計算 x,y 的值

distance = vector3.distance(veccenter, vecposition);

vector3 direction = (veccenter - vecposition) / distance;

quaternion q2 = quaternion.fromtorotation(vector3.forward, direction);

x = q2.eulerangles.y;

y = q2.eulerangles.x;

Unity攝像機圍繞物體旋轉兩種實現方式

第一種,使用transform 函式 rotatearound。如下 public transform target 獲取旋轉目標 private void camerarotate 攝像機圍繞目標旋轉操作 if input.getkey keycode.mouse0 private void ca...

unity之攝像機

歡迎來到我們的狗刨網,我們今天主要來複習一下我們學過的知識點。一 article system 基本設定 1 duration 持續時間 2 looping 迴圈 3 prewarm 開始前的準備 開關start delay功能的開關 4 start delay 開始前的等待時間 5 start l...

Unity 攝像機簡介

攝像機,unity的核心元件之一。顯示場景中,攝像機所照射的部分,是向玩家捕獲和顯示世界的裝置。攝像機的特性 1 可以自定義和操縱攝像機 2 可以在場景中不受限制其數量 3 可以設定成任意的渲染次序 4 可以渲染到螢幕上的任意位置。攝像機實質上是用於將遊戲顯示給玩家看的,它們可以被定製,在上面寫指令...