當然啦其實圍繞旋轉的功能本身並不難:
// 拖動攝像機圍繞物體旋轉
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 可以渲染到螢幕上的任意位置。攝像機實質上是用於將遊戲顯示給玩家看的,它們可以被定製,在上面寫指令...