Мне нужно преобразовать следующий код из использования lerp в использование кубического замедления, но я не знаю, что делать с возвращенным значением с плавающей запятой из функции кубического замедления в функции, потому что я использую Vector3 вместо float. Кто-нибудь может мне подсказать?

    if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
        {
            float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;
            activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, fraction);
        }
1
Weeboo 17 Сен 2021 в 09:10

2 ответа

Лучший ответ

Вам нужна кубическая функция, которая равна 0 в начале и 1 в конце. Я бы попробовал что-то вроде:

public float EaseIn(float t)
{
    return t * t * t;
}

if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
{
    float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;

    activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, EaseIn(fraction));
}

Предполагая, что fraction уже перешел с 0 на 1.

0
rustyBucketBay 17 Сен 2021 в 06:37

Вам, вероятно, следует просто использовать его вместо вашего fraction в Vector3.Lerp.

1
JonasH 17 Сен 2021 в 06:16