2016-05-10 6 views
0

私は、ある特定の程度、速度、およびZ軸方向のオブジェクトを回転させて停止したいと思います。オブジェクトを特定の方向と速度で特定の角度で回転させる方法はありますか?

これは私のコードです。これにより

Quaternion targetRotation = Quaternion.AngleAxis(currentRotation.rotateValue, Vector3.forward); 
float step = currentRotation.speed; 
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, step); 

、私が所望の速度と角度で移動することができますが、方向が正しくありません。私がしていることは、180に達した後に180度移動させ、360度移動させることです。これはループしています。問題は、時計回りに360度移動する代わりに反時計回りに移動することです。ここで何が起こっているのかわからないのは、この1つに関して絶望的な助けが必要です。

ありがとうございます。

+0

あなたの質問は明確ではありません。正確に何をしたいのかを説明してください。ただオブジェクトを回転させ、何を停止状態にしたいですか? –

答えて

0

私はあなたがやろうとしているものを正しく理解していれば、多分このような何かが働くだろう:

private float anglesToRotate; 
private Quaternion targetRotation, initialRotation; 
private float elapsedTime, duration, speed; 

void Start() 
{ 
    time = 0.0f; 
    duration= 0.0f; 
} 

void Update() 
{ 
    if (time < duration) 
    { 
     time += Time.deltaTime; 
     transform.rotation = Quaternion.Lerp(
            initialRotation, 
            targetRotation, 
            (speed * time)/duration); 
    } 
} 

public void Rotate(float angles, float speed, float duration) 
{ 
    initialRotation = transform.rotation; 
    targetRotation = Quaternion.Euler(
         transform.rotation.x, 
         transform.rotation.y, 
         transform.rotation.z + anglesToRotate); 
    time = 0.0f; 
} 

NOTES:

  • 使用正の角度を回転させるために一つの方向と負に回転します反対の方向に(角度が180の場合、符号は関係ありません)。
  • 回転速度を速くするか遅くするかを指定して再生します。 (私はそれをQuaternion.Lerpで動作させるために持続時間を加えなければならなかった)。
  • 私はこれをテストしていないので、期待どおりに動作するかどうかはわかりません。