Страница 1 из 1

Как сделать равномерную интерполяцию?

СообщениеДобавлено: 19 ноя 2017, 15:14
skDYLAN
Никак не могу добиться правильной интерполяции между двумя точками, алгоритм у меня следующий

Есть 2 точки и есть время за которое объект должен их пройти.
Время в данном примере = 0.1 сек

Синтаксис:
Используется csharp
void Update()
{
if(flagJourney == false)
{
     endPosition = P1;
     startMarker = transform;
     startTime = Time.time;
     flagJourney = true;
}
else
{
     float prec = (Time.time - startTime) / (0.1f);
     if(prec  >= 1)
     {
          flagJourney = false;
          if(prec  > 1)
              prec = 1;
     }
     transform.position = Vector3.Lerp(startMarker.position, endPosition, prec);
     Debug.Log(Vector3.Distance(transform.position, endPosition)); // вывод дистанции, которую проходит объект за 1 проход
}
}


Скриншот консоли
Изображение

Как видно из скриншота, объект за примерно 100 миллисекунд проделал крайне не равномерный путь, данные точки могут примерно напомнить экспоненциальную функцию. Мне же надо чтобы объект на протяжении 100 млс двигался со средней скоростью, ибо данное решение приводит к рывкам, если его перенести в проект, где точки нужно брать из массива, тогда ни о каком гладком перемещении речи идти не может.

Re: Как сделать равномерную интерполяцию?

СообщениеДобавлено: 19 ноя 2017, 17:43
Tolking
Принципиально все верно сделано, но есть нюанс - startMarker = transform; если это вынести в старт ничего не изменится вообще. Нужно запоминать положение, а не ссылку на трансформ...

Re: Как сделать равномерную интерполяцию?

СообщениеДобавлено: 19 ноя 2017, 17:49
skDYLAN
Tolking писал(а):Принципиально все верно сделано, но есть нюанс - startMarker = transform; если это вынести в старт ничего не изменится вообще. Нужно запоминать положение, а не ссылку на трансформ...


Да, вы меня опередили, спасибо