我已經嘗試在我的一個游戲物件上旋轉一個多星期了,但仍然沒有運氣。到目前為止,這是我的代碼以及我嘗試過的代碼:
if ((transform.rotation.eulerAngles.z > 330 ) && (Input.GetKey(KeyCode.RightArrow)))
{
transform.Rotate(Vector3.forward * speed * Time.deltaTime * -1);
}
if ((transform.rotation.eulerAngles.z < 30) && (Input.GetKey(KeyCode.LeftArrow)))
{
transform.Rotate(Vector3.forward * speed * Time.deltaTime);
}
然后我繼續嘗試這個:
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.forward * speed * Time.deltaTime * -1);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.forward * speed * Time.deltaTime);
}
transform.localEulerAngles = new Vector3( 0 , 0 , Mathf.Clamp(0, -30, 30) );
但我仍然沒有運氣。順便說一句,我正在使用 C#

這是它看起來的游戲型別,我也希望玩家在沒有按下任何鍵時旋轉回 0
uj5u.com熱心網友回復:
您的第二個代碼示例更加簡潔。唯一的問題是在你的最后一行:
transform.localEulerAngles = new Vector3( 0 , 0 , Mathf.Clamp(0, -30, 30) ); //this always returns [0,0,0]
我想你的意思是:
float rotation = 0;
if (Input.GetKey(KeyCode.RightArrow))
{
rotation -= 1;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
rotation = 1;
}
float newZAngle = transform.localEulerAngles.Z (speed*Time.deltaTime*rotation);
transform.localEulerAngles = new Vector3( 0 , 0 , Mathf.Clamp(newZAngle, -30, 30) );
我在沒有 IDE 的情況下寫的,所以可能會有一些錯別字。另外,我有一段時間沒有使用 Unity,我只是想忘記了。
此外,我使用 =/更改了旋轉,-=因此當您按住兩個箭頭時,它不會旋轉。
uj5u.com熱心網友回復:
我認為這個問題與你如何處理你的角度有關。這是 2014 年某些內容的鏈接(但仍應與您的情況相關,因為它似乎是一個合乎邏輯的問題)。還有人更新了今年的回復。我會附上專門討論如何鉗制歐拉角的人的螢屏截圖(以防您不想單擊鏈接)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336522.html
上一篇:如何遞回填充陣列
