2017-07-08 604 views
0

我正在嘗試做一個旋轉的大炮,它可以前後旋轉。 我想限制旋轉從-55到55(我的意思是transform.position.z),但我不能讓它工作。Unity 2D - 旋轉物體並限制旋轉

就目前我的代碼是:

public class Cannon : MonoBehaviour 
{ 
    bool hit = false; 

    void Update() 
    { 
     float angle = transform.rotation.z; 
     if (angle > -55 & angle < 55 & !hit) 
     { 
      transform.Rotate(Vector3.back * Time.deltaTime); 
     } 

     if (angle <= -55) 
     { 
      transform.Rotate(Vector3.back * Time.deltaTime); 
      hit = true; 
     } 
     if (angle >= 55) 
     { 
      transform.Rotate(Vector3.forward * Time.deltaTime); 
      hit = true; 
     } 
    } 
} 

唯一覺得工作是我的開始旋轉對象所做的第一旋轉,所以它只是旋轉回來,不停止,它似乎是無視「角度」

我也試圖把最後2如果語句,內第一個,但仍然無法正常工作。

我想讓它旋轉直到它碰到-55,然後開始旋轉直到碰到+55並重復這個。

+0

我注意到你有一些好的回答您的問題,但作爲接受你沒有標明任何人。如果答案合法地幫助了您,請考慮這樣做(通過點擊答案旁邊的勾號)。它獎勵那些幫助你的人,同時增加你的聲望,並且使其他有類似問題的用戶更容易找到好的答案 –

回答

0

您需要做的第一件事是使用Euler Angles而不是Quarternions來查找以度爲單位的旋轉。

然後,由於它不報告負角度,而是報告從0到360的角度,所以每當大於180時需要減去360以獲得負角度等效值。

從那裏,你可以申請測試,以保持它的界限:

public class Cannon : MonoBehaviour { 

    public float direction = 1f; // initial direction 
    public float speed = 20f; // speed of rotation 

    void Update() 
    { 
     float angle = transform.eulerAngles.z; 
     if (angle > 180f) angle -= 360f; 

     if ((angle < -55f) || (angle > 55f)) direction *= -1f; // reverse direction (toggles between 1 & -1) 

     transform.Rotate (0, 0, speed * direction * Time.deltaTime); 
    } 
}