我嘗試在統一論壇發帖,但它一直在等待審覈,所以我在這裏發佈它希望得到一些更直接的反饋。將對象的旋轉與另一個對象的相對旋轉匹配起來
我有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軸旋轉時發生(並應該發生)。藍色箭頭移動並旋轉,以查看藍色平面上的相同點,綠色箭頭現在正在查看綠色平面。最後兩張圖片顯示了藍色箭頭應該做什麼,但可以看出,在奇數方向旋轉。我在編輯器中純粹測試,所以當我移動或旋轉任何對象時,藍色箭頭將立即響應。
這是我嘗試的第一件事情之一,但它只適用於兩架飛機的方向相同。我的問題一旦一個或兩個飛機旋轉方向不是圍繞Y軸 – Incognito
我編輯了我的問題。我簡直就是在這一點上手動移動和旋轉箭頭以進行測試(第二個箭頭立即響應),但最終它將是主攝像機的旋轉,需要被模仿,但此時它只是將邏輯移入我的代碼的一部分。 – Incognito