2017-07-08 33 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つのIf文を最初の1つの中に入れようとしましたが、依然として機能しません。

-55になるまで回転し、+55になるまで回転を開始し、これを繰り返します。

+0

私はあなたの質問にいくつかの良い答えを持っていたが、受け入れられたとして、あなたがそれらのいずれかをマークしていない気づきました。合法的にあなたの答えが(答えの隣のチェックマークをクリックすることによって)助けられたら、そうすることを検討してください。それはあなたを助けるものに報いを与え、同時にあなたの評判を高め、同様の問題を持つ他のユーザーが良い答えを見つけるのを容易にします –

答えて

0

最初に行う必要があるのは、度での回転を見つけるために、四角形ではなくEuler Anglesを使用することです。

次に、負の角度を報告するのではなく、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); 
    } 
} 
関連する問題