2016-04-04 26 views
0

我有這個IEnumerator可以在我們的玩家到達該貼磚後將我的玩家移動到遊戲板貼磚上的特定位置。這是代碼,它非常簡單。Jerky Lerp運動

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; 
     } 

    } 

我遇到的問題是,在達到正確的位置後,玩家在安頓到位之前似乎有點混蛋。我記得通過實現我自己的近似來解決這個問題,但我想知道是否有更好的解決方案。

編輯。我修好了它。應該在while循環之前設置getInPosFlag。因爲我在while循環之後設置它,所以共同程序比所需要的次數多一次或兩次。

回答

0

變化

(elapsedTime/time) 

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

如果時間不是Time.deltaTime多(時間%Time.deltaTime!= 0),那麼你超過了線性插值範圍(0, 1)。

使用Math.Min,您將限制輸出爲1。

+0

謝謝。使用Math.Min對我沒有任何幫助,但我忘記了將多個參數傳給Time.deltaTime –

+0

,經過進一步的測試之後,這個混亂的動作仍然存在,這些混亂也同樣突出。 –

+0

你能定義「生澀」嗎?它最終失敗了嗎?介於?之間? – Gusman