我正在嘗試檢查我的物件的 z 旋轉值是否介于兩個給定值之間。如下所示,要檢查的值介于 -1 和 1 之間。當我的物件為負數(例如 -0.5)時,它永遠不會被呼叫。適用于大于 0 的正值,但在小于 0 時從不呼叫。
void Update () {
if (transform.eulerAngles.z <= 1 && transform.eulerAngles.z >= -1) {
Debug.Log ("object is in between");
}
}
好的,所以我發現了問題,當我添加Debug.Log (transform.eulerAngles.z);
小于 0 的值時,從 360 開始,而不是列印負值。我如何解決它?
uj5u.com熱心網友回復:
eulerAngles 一般來說,對于某些事情總是有點不可靠。
原因是 Unity 內部不存盤這些,而是??將旋轉存盤為Quaternion. 但是,有多種方法可以Quaternion在歐拉空間中表示 a ,并eulerAngles決定最佳的人類可讀性。
當您閱讀 .eulerAngles 屬性時,Unity 會將四元數的內部旋轉表示轉換為歐拉角。因為,使用歐拉角表示任何給定旋轉的方法不止一種,因此您讀出的值可能與您分配的值完全不同。
在我看來,更容易的是根本不考慮旋轉角度。
使您的檢查相當簡單地基于矢量的一種平等方法是檢查Vector3.Angle全域Vector3.up矢量和本地矢量之間的transform.up值是否在您的閾值內
if(Vector3.Angle(Vector3.up, transform.up) <= 1f)
{
Debug.Log ("object is in between");
}
uj5u.com熱心網友回復:
由于 Unity 中的歐拉角以這種方式作業(小于 0 基本上小于 360),因此我將代碼更改為:
if ((transform.eulerAngles.z >= 0 && transform.eulerAngles.z <= 1f) || (transform.eulerAngles.z >= 358f && transform.eulerAngles.z <= 360f)) {
Debug.Log("object is in between");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408536.html
標籤:
