[РЕШЕНО] Как изменить "плавность" Lerp?

Общие вопросы о Unity3D

[РЕШЕНО] Как изменить "плавность" Lerp?

Сообщение AM-Games 26 июн 2013, 14:27

При использовании Lerp скорость изменения значения какой-либо переменной плавно спадает, то есть в начале она изменяется быстро, а в конце она изменяется крайне медленно и часто последние пол секунды вообще не заметны (если это движение, вращение и тд). Так как изменить "плавность", чтобы она хотя бы работала наоборот, то есть скорость плавно нарастала (например, свободное падение какого-либо предмета)?
Последний раз редактировалось AM-Games 26 июн 2013, 17:27, всего редактировалось 1 раз.
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Как изменить "плавность" Lerp?

Сообщение seaman 26 июн 2013, 14:33

Сочинить свою функцию. Лерп - простое математическое вычисление. Разберитесь что там внутри и напишите по аналогии что Вам надо.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как изменить "плавность" Lerp?

Сообщение AM-Games 26 июн 2013, 14:56

seaman писал(а):Сочинить свою функцию. Лерп - простое математическое вычисление. Разберитесь что там внутри и напишите по аналогии что Вам надо.

То есть готовых функций для этого нет?
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Как изменить "плавность" Lerp?

Сообщение Syberex 26 июн 2013, 14:58

Можно использовать синусы/косинусы или AnimationCurve :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Как изменить "плавность" Lerp?

Сообщение seaman 26 июн 2013, 15:30

То есть готовых функций для этого нет?

Есть - Lerp :D
Вы знаете что она вообще делает? Знаете как сделать чтобы не замедлялось к концу, а изменялась линейно? Разберитесь в работе!
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как изменить "плавность" Lerp?

Сообщение Johnson 26 июн 2013, 15:36

seaman писал(а):
То есть готовых функций для этого нет?

Есть - Lerp :D
Вы знаете что она вообще делает? Знаете как сделать чтобы не замедлялось к концу, а изменялась линейно? Разберитесь в работе!


Я думаю, что много вопросов по лерпу у новичков из-за непривычной аббревиатуры. Не знают люди, как искать описание работы (кроме скрипт референса).
Всё же довольно просто - Линейная интерполяция.

Слово "линейная" намекает, что если хочешь нелинейного результата от неё - подавай на вход нелинейные данные (а время как раз - данные очень линейные).
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ

Re: Как изменить "плавность" Lerp?

Сообщение AM-Games 26 июн 2013, 16:07

seaman писал(а):
То есть готовых функций для этого нет?

Есть - Lerp :D
Вы знаете что она вообще делает? Знаете как сделать чтобы не замедлялось к концу, а изменялась линейно? Разберитесь в работе!

Эмм. То, что я знаю, можно записать так:
Lerp = a + ((b-a) * c)
c € [0;1]
Как изменить механизм лерпа, я не знаю. Но думаю, что можно решить мою задачу уравнением параболы (var = speed * t^2).

UPD:
Синтаксис:
Используется csharp
public static float Lerp (float from, float to, float t)
{
        return from + (to - from) * Mathf.Clamp01 (t);
}

То есть я правильно понял механизм Lerp'a
Последний раз редактировалось AM-Games 26 июн 2013, 16:35, всего редактировалось 1 раз.
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30

Re: Как изменить "плавность" Lerp?

Сообщение Johnson 26 июн 2013, 16:25

ну так и подавайте в лерп вместо времени - квадрат разности от стартового момента...
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ

Re: Как изменить "плавность" Lerp?

Сообщение AM-Games 26 июн 2013, 17:27

Решено.
this.transform.rotation = Quaternion.Lerp (startRot, Quaternion.Euler(0, 0, -90), Mathf.Pow((Time.time - startTime), 2) * speed);
AM-Games
UNIт
 
Сообщения: 139
Зарегистрирован: 21 окт 2012, 11:30


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14