Что на самом деле делает Unity's Mathf.PingPong? - PullRequest
2 голосов
/ 19 апреля 2020

Документы Unity для Mathf.PingPong говорят:

PingPongs значение t, так что оно никогда не больше length и никогда не меньше 0.

Я понял, что он вращает значение между 0 и length, что я не получаю, так это то, что делает значение t и как это связано с тем, как работает PingPong?

Если я установлю t на любую константу, я всегда получаю это значение обратно

void Update()
{
// always prints: 1
    print(Mathf.PingPong(1f, 1f));

// always prints 0
    print(Mathf.PingPong(0f, 1f));
}

Каждый раз, когда я вижу PingPong, используемый в примерах, он Time.time используется для t значение (или некоторые математические на основе Time.time). Почему?

Единственное объяснение, которое я видел, было от этого вопроса: c# Unity Mathf.PingPong не работает , что означает, что значение t всегда должно изменяться, но опять же, неясно, почему или что происходит.

Итак, что на самом деле Mathf.PingPong делает с t / для чего на самом деле значение t, и как вы правильно используете функцию?

1 Ответ

4 голосов
/ 19 апреля 2020

Так Mathf.PingPong() использует вызовы функций Mathf.Repeat()

Они, скорее всего, предназначены как вспомогательные функции анимации / замедления

Так что Mathf.Repeat(float t, float length) создаст график, подобный этому
enter image description here
Где length - длина каждого отрезка, а t - значение X функции (возвращаемое значение - соответствующая позиция Y на графике)

То, что делает Mathf.PingPong(float t, float length), выглядит примерно так
enter image description here
Снова, где length описывает высоту каждого треугольника, а t дает позицию X

Обычный вариант использования этого - мы хотим, чтобы какое-то значение изменило вместе с этого графика, как при ходьбе по нему с постоянно увеличивающимся значением X, и принимаем значение Y на каждом шаге. Самый простой способ сделать это - передать Time.time в качестве аргумента t, который получит значение этой функции в соответствующей позиции X.

float Y = Mathf.PingPong(Time.time,Max_Y_Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...