2016-02-29 37 views
0

我嘗試在統一論壇發帖,但它一直在等待審覈,所以我在這裏發佈它希望得到一些更直接的反饋。將對象的旋轉與另一個對象的相對旋轉匹配起來

我有4個物體,兩個平面和兩個箭頭。一個箭頭指向其中一個平面,我希望第二個箭頭與第一個箭頭相匹配,但是相對於第二個平面。我的意思是,如果第一個箭頭相對於第一個平面向右移動1個單位,則第二個箭頭應相對於第二個平面向右移動1個單位。我得到了正確的工作,但我無法弄清楚如何匹配輪換。有些旋轉軸在某些時候可以正常工作,但是一旦旋轉了其中一個平面,第二個箭頭的旋轉就會與第一個旋轉不同步。

下面是我使用來測試這個代碼,用最好的我能想出:

[ExecuteInEditMode] 
public class RotationTest : MonoBehaviour 
{ 
    public GameObject target; 
    public GameObject camera; 
    public GameObject arrow; 

    void OnWillRenderObject() 
    { 
     if (!target || !camera || !arrow) return; 

     arrow.transform.position = target.transform.TransformPoint(transform.InverseTransformPoint(camera.transform.position)); 
     //arrow.transform.rotation = Quaternion.Inverse(camera.transform.rotation) * transform.rotation * Quaternion.Inverse(target.transform.rotation); 
     //arrow.transform.eulerAngles = new Vector3(arrow.transform.eulerAngles.x, -arrow.transform.eulerAngles.y, arrow.transform.eulerAngles.z); 
     arrow.transform.eulerAngles = (target.transform.eulerAngles - transform.eulerAngles) + camera.transform.eulerAngles; 
    } 
} 

我把這個劇本的第一架飛機,第一個箭頭是「相機」,第二飛機是'目標',第二個箭頭是'箭頭'。當兩個平面精確對齊時,第二個箭頭應該與第一個箭頭完全相同的位置和旋轉。已註釋的行是我嘗試的第一件事,未註釋的行是我第二個最接近的工作,但它只在平面圍繞Y軸旋轉時才能正確工作,並且在平面上的任何其他軸是旋轉。

當兩個平面都朝向相同的方向時,只需將第二個箭頭的旋轉設置爲第一個箭頭的旋轉即可正常工作,但一旦第一個平面旋轉,此方法就會分開。

我已經在這裏呆了很長一段時間,嘗試四元數乘法和eulerAngles差異的不同組合,但我似乎無法弄清楚。任何幫助在這一點非常感謝。

編輯:這裏有幾個一幅幅我想會發生什麼,以及實際上是與當前腳本發生的事情:http://imgur.com/a/MVI8x 前三的圖片顯示,當兩架飛機具有相同的旋轉(正在發生的事情正如我前面所述,箭頭位置和旋轉在這種情況下正確運行)。第四張圖顯示了當飛機繞Y軸旋轉時發生(並應該發生)。藍色箭頭移動並旋轉,以查看藍色平面上的相同點,綠色箭頭現在正在查看綠色平面。最後兩張圖片顯示了藍色箭頭應該做什麼,但可以看出,在奇數方向旋轉。我在編輯器中純粹測試,所以當我移動或旋轉任何對象時,藍色箭頭將立即響應。

回答

0

你總是可以設置箭頭的旋轉方向彼此相等,只要這兩個方向都不與其他任何方向相同,只要模型本身用相同的軸點編寫,並且初始旋轉。

public GameObject arrow1; 
public GameObject arrow2; 

void Update(){ 

    arrow2.transform.rotation = arrow1.transform.rotation; 
} 

編輯: 如果不工作,你怎麼轉動第一箭?它使用transform.LookAt嗎?

當我遇到輪換問題時,通常是本地問題或全局問題。也許嘗試:

void Update(){ 

    arrow2.transform.localRotation = arrow1.transform.localRotation; 
} 

或者我可能不明白你實際上想要實現什麼,一個圖可以幫助澄清。

+0

這是我嘗試的第一件事情之一,但它只適用於兩架飛機的方向相同。我的問題一旦一個或兩個飛機旋轉方向不是圍繞Y軸 – Incognito

+0

我編輯了我的問題。我簡直就是在這一點上手動移動和旋轉箭頭以進行測試(第二個箭頭立即響應),但最終它將是主攝像機的旋轉,需要被模仿,但此時它只是將邏輯移入我的代碼的一部分。 – Incognito