2016-04-04 9 views
0

私はこれをIEnumeratorにして、ゲームボードのタイルの特定の場所に移動します。ここにコードは、本当に簡単です。Jerky Lerp motion

IEnumerator LerpToPlayerSpot(Vector3 newPosition, float time) 
    { 
     float elapsedTime = 0; 
     Vector3 startingPos = transform.position; 
getInPosFlag = true; 
     while (elapsedTime < time) 
     { 
      transform.position = Vector3.Lerp(startingPos, newPosition, (elapsedTime/time)); 
      elapsedTime += Time.deltaTime; 
      yield return null; 
     } 

    } 

私がいる問題は、正しい位置に到達した後、プレイヤーが所定の位置に落ち着くまで少し周りジャークように見えるということです。私は自分の近似を実装することでこれを他のプロジェクトで修正したことを覚えていますが、もっと良い解決策があるのだろうかと思います。

編集。それを私が直した。 getInPosFlagはwhileループの前に設定する必要があります。私がwhileループの後に設定していたので、コルーチンは必要だったよりも1〜2回多く呼ばれました。

Math.Min((elapsedTime/time), 1) 

答えて

0

変更

(elapsedTime/time) 

時間がTime.deltaTime倍でない場合(時間%Time.deltaTime!= 0)あなたはLerpの範囲(0を超えています1)。

Math.Minでは、出力を1つに制限します。

+0

ありがとうございました。 Math.Minを使って私には何もしなかったが、私はTime.deltaTime –

+0

によってジョルキーな動きをテストした後も、ジョルクはそれほど目立つことはない。 –

+0

"ジャーキー"を定義できますか?それは最後に失敗する?間に? – Gusman