2017-05-22 10 views
1

スピナーが360度回転した後に回転数を増やす方法を見つけようとしています。 eulerAnglesは360でリセットされるため、これはうまくいかないものの、これを行うにはどうすればよいでしょうか?私は> 355をやってみましたが、それは素晴らしい解決策ではありません。回転数をカウントする[Unity C#]

  Spinner.transform.Rotate(0, 0, speed); 
      float angleZ = Spinner.rotation.eulerAngles.z; 

      if (angleZ > 360) 
      { 
       Rotations++; 
      } 

答えて

4

回転後に&より前の角度を確認する必要があります。

「速度」は回転する度数ですので、360°回転の整数分周を回転数&に追加して、リセットされた最終値を確認してください。

float angleZ1 = Spinner.rotation.eulerAngles.z; 
Spinner.transform.Rotate(0, 0, speed); 
float angleZ2 = Spinner.rotation.eulerAngles.z; 
float angleZDiff = angleZ2 - angleZ1; 


Rotations += (int)(speed/360); 
if ((speed >0) && (angleZDiff < 0)) 
    Rotations++ 
else if ((speed < 0) && (angleZDiff > 0)) 
    Rotations--; 
+0

これは意味があります。スピードが速すぎるとどうなりますか? – itsPav

+0

速度が速過ぎると、360度以上の回転を引き起こします。たとえば、速度が361度の回転を引き起こした場合、eulerAngleは360で「リセット」され、回転は1にしか見えません度。 – PaulF

+0

これを避けるにはどのような方法がありますか? – itsPav

0

角度を360で割り、整数にキャストして回転数を取得できます。

Rotations = (int)(angle/360f); 
+0

これは単に角度を与える - それは実際には部門の回転 – PaulF

+0

@PaulF申し訳ありませんの数ではなく、私は私の答えを修正しました。 – Iggy

+0

質問を読むと、eulerAnglesは常に360でリセットされますので、値は常に0以上360未満になりますので、問題があります。 – PaulF

関連する問題