2016-06-28 112 views
0

我在創建一種第一人稱太空入侵者遊戲。我創造了一個可以左右移動的太空船。從左到右旋轉捕捉

飛船傾斜取決於是否按向左或向右,我使用的代碼從Unity太空射擊遊戲教程:

void FixedUpdate() 
    { 
     float moveHorizontal = Input.GetAxis("Horizontal"); 

     rigidbody.velocity = new Vector3(moveHorizontal, 0f, 0f) * speed; 

     rigidbody.position = new Vector3(
      Mathf.Clamp(rigidbody.position.x, xMin, xMax), 
      0.0f, 
      Mathf.Clamp(rigidbody.position.z, zMin, zMax) 
     ); 

     rigidbody.rotation = Quaternion.Euler(0f, 0f, rigidbody.velocity.x * -tilt); 
    } 

問題是如果我拿着右鍵,並立即按左鍵,船舶按另一個方向。如果我按下右鍵並放開,船會順利地向中心旋轉。如果我按下右鍵後直接按下左鍵,它會以相反的方式傾斜,不會平滑過渡。

我想這是因爲從Input.GetAxis("Horizontal")返回1或-1從輸入(1爲右,-1爲左側),這意味着,如果我按右鍵,然後左鍵馬上箭頭鍵,整個旋轉被-1倍增,引起捕捉效果。

有沒有一種方法使用箭頭鍵從一側順利旋轉到另一側而不會導致傾斜?

+0

這是令人難以置信的錯誤在任何方面對於這一點,湯姆使用四元數。如果它是一個剛體,你應該簡單地施加力量或者扭矩。要添加toruqe,請使用「AddTorque」(https://docs.unity3d.com/ScriptReference/Rigidbody.AddTorque.html)。添加強制你使用「AddForce」(https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html) – Fattie

+0

發生這種情況,因爲你直接使用你的輸入速度和正如你所說,它會是1或 - 1乘以運動。嘗試改變旋轉,並通過moveHorizo​​ntal(1或-1)增加倍數。 'rigidbody.rotation = Quaternion.Euler(0f,0f,rigidbody.rotation.x + speed * moveHorizo​​ntal);' –

+0

@JoeBlow雖然我同意它可能是錯誤的(我已經從Unity的教程中獲取代碼:P )你也許知道**爲什麼**這是錯的?就這樣我知道:-) – Tom

回答