簡體   English   中英

如何獲得統一的旋轉坐標之一?

[英]How do I get one of the coordinates of rotation in unity?

我想要一個立方體不要旋轉超過 60 度,所以它不會旋轉到更多我試圖使用這個

if(gameObject.GetComponent<Transform>().rotation.x >= 60 || gameObject.GetComponent<Transform>().rotation.x <= -60 || gameObject.GetComponent<Transform>().rotation.z >= 60 || gameObject.GetComponent<Transform>().rotation.z <= -60)
    {
        gameObject.GetComponent<Transform>().rotation = new Quaternion(0, 0, 0, 0);
    }

檢查旋轉。 它沒有用,所以我打印了 x 坐標中的旋轉

它說的坐標如下:5.98324、7.39482、-1.983495

我只是在移動 x position 而不是旋轉,它改變了它。

那么如何獲得它在組件變換中的 x 旋轉呢?

我認為你接近的方式很好,但不適合這種情況。 應該處理Euler Angles以控制變換。

簡單的理解是這樣的:

// declare your cube rotation 
float moveSpeed = 5f // speed in which cube rotates
float rotatecube = moveSpeed* Time.deltaTime* 10;

//Your condition be like
 if(transform.eulerAngles.z < (.....declare the requirement.....))
  transform.Rotate(vector3.forward * rotateCube); 

如果您仍然面臨與角度相關的任何問題, console.log()是更好的自我理解方式。 希望它澄清..

您對旋轉的歐拉角感興趣,而不是旋轉的四元數分量 您應該首先參考transform.eulerAngles.x而不是transform.rotation.xtransform.eulerAngles.z而不是transform.rotation.z

順便說一句,最好盡可能少地調用GetComponent ,因為這是一項昂貴的操作。 您應該調用它一次並將結果分配給一個變量,例如:

Transform cubeTransform = gameObject.GetComponent<Transform>(); 
if(cubeTransform.eulerAngles.x ...)
{
   ...
}

此外,您甚至不需要使用GetComponent來訪問腳本附加到的gameObjecttransform 相反,您可以只使用transform ,例如:

if (   transform.eulerAngles.x >= 60 || transform.eulerAngles.x <= -60 
    || transform.eulerAngles.z >= 60 || transform.eulerAngles.z <= -60)
    {
        transform.rotation = Quaternion.identity;
    }

跳過以上所有評論。 我找到了一種方法來獲得准確的旋轉值,就像在 INSPECTOR 中一樣。 我正在展示角度(x) 代碼如下:

 public Transform GameObject;
 
 void Update()
 {
     float Rotation;
     if(GameObject.eulerAngles.x <= 180f)
     {
         Rotation = GameObject.eulerAngles.x;
     }
     else
     {
         Rotation = GameObject.eulerAngles.x - 360f;
     }
 }

基本上,您想要限制任何軸的旋轉 - x、y 或 z。

如果是,那么這是解決方案:

程序:僅在 x 和 z 方向旋轉一個不超過 60 度的立方體。

var rotValue += Time.deltaTime; Cube.transform.rotaion = Quaternion.Eular(Mathf.Clamp(rotaValue,0,60), 0, Mathf.Clamp(rotaValue,0,60));

您可以使用 Mathf.clamp 來限制最小值和最大值之間的任何浮點值。 希望,問題解決了。

暫無
暫無

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

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