2016-04-04 13 views
0

Oynatıcıyı o döşemeye ulaştıktan sonra oyun tahtası döşemesinde belirli bir yere taşımak için bu IEnumerator var. İşte kod, gerçekten basit.Jerky Lerp hareket

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

    } 

I having doğru konumunu ulaştıktan sonra oyuncu yerine yerleşmeden önce biraz etrafında pislik gibi görünüyor olmasıdır. Bunu kendi yaklaşımımı uygulayarak başka bir projede düzelttiğimi hatırlıyorum, ama daha iyi bir çözüm olup olmadığını merak ediyorum.

Düzeltme. Onardım. while döngüsünden önce getInPosFlag ayarlanmalıdır. çünkü zaman döngüsünden sonra onu koordine ettim, ko-rutin ihtiyaç duyulduğundan bir veya iki kez daha çağırdı.

cevap

0

Değişim

(elapsedTime/time) 

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

zaman bir Time.deltaTime katı değilse

için (zaman% Time.deltaTime! = 0) o zaman LERP aralığını (0 aşmakta, 1).

Math.Min ile çıktısını bir ile sınırlayacaksınız.

+0

Teşekkürler. Math.Min kullanarak benim için hiçbir şey yapmadım, ama birden fazla param ekledim param sarmal hareket hala orada orada, daha az belirgin olan daha fazla test sonra Time.deltaTime –

+0

tarafından ko-rutine geçiyorum. –

+0

"Sarsıntılı" tanımlayabilir misiniz? sonunda başarısız olur? arasında? – Gusman