簡體   English   中英

我怎樣才能在 Unity 中進行這種 3D 相機運動?

[英]How can I do this kind of 3D camera movement in Unity?

這是一個學校項目。 我有一個像行星一樣的大立方體。 我有一個小立方體,可以在立方體行星的每一側移動。 玩家在其局部 z 軸上自動向前移動,我將其旋轉 90 或 -90 度以向左或向右移動 - 但玩家可以像控制上下左右移動一樣控制它(制作了一個腳本,這樣他們就不會不必用 2 個鍵旋轉立方體)。 這就像一個 Tron 游戲,所以如果我按下向上鍵,我不能立即按下,因為我留下了軌跡,所以我必須按向左或向右鍵。 我的相機移動有問題。 相機從上方跟隨小立方體,但我希望它在小立方體玩家靠近一側邊緣時稍微傾斜一點,以便讓我看到另一側 - 我計划去的地方。

我有一個腳本,我使用立方體行星的中心和玩家的中心作為方向向量,並將其乘以相機-玩家距離。

Vector3 direction = (target.position - center.position).normalized;         
transform.position = target.position + direction * distance;

然后我將相機的前向向量指向玩家立方體的方向。 我嘗試了兩個代碼,但沒有一個完美地工作。 首先,我嘗試使用以下方法旋轉相機:

transform.rotation = Quaternion.LookRotation(-direction); 

視頻中顯示 問題在於,由於我沒有告訴程序 Up 和 Right 向量(我認為),它為自己設置了一些隨機數,因此相機有時會像旋轉旋轉一樣做自己的事情。

接下來我嘗試了這個:

Quaternion rot = Quaternion.FromToRotation(transform.forward, -direction);                                                                          
transform.Rotate(rot.eulerAngles, Space.World); 

視頻中顯示 這幾乎是好的,但隨着小立方體的移動,攝像機開始時開始輕微轉向,然后變得越來越糟。

你有什么想法我怎樣才能讓它工作? 我希望你明白我想要達到的目標。 我試圖將相機設置為始終顯示,當我按下 Up 時,我的立方體向上移動,當我按下 Right 時,我的立方體總是向右移動等等。當我到達我一側的邊緣時,相機向我要搬去的那一邊。

使用點積找出立方體的哪個正交方向最接近相機的電流向上。

Vector3 closestToUp;
float greatestDot = 0f;
foreach (Vector3 dir in new Vector3[]{
        target.forward, target.right, -target.forward, -target.right})
{
    float curDot = Vector3.Dot(dir,transform.up);
    if (curDot > greatestDot) 
    {
        greatestDot = curDot;
        closestToUp = dir;
    }
}

然后,使用該方向作為Quaternion.LookRotation的第二個參數。 考慮到任何新的前進方向,這將使其局部向上方向盡可能與立方體的“頂部”對齊:

transform.rotation = Quaternion.LookRotation(-direction, closestToUp); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM