Как сделать, чтобы x + = (1 - x) корректно работал на основе дельта-времени? - PullRequest
0 голосов
/ 29 мая 2018

Предположим, что Time.deltatime можно использовать для получения реального времени между обновлениями кода.

Итак, если у меня есть сумма и я хочу, чтобы она работала в режиме реального времени Я бы сделал это:

x += 1;

В это:

x += 1 * Time.deltatime;

Мой вопрос: как могЯ делаю то же самое с этим фрагментом кода:

x += (1 - x)*0.1;

Это простой код, который я использую для плавного сближения 1. Проблема в том, что я не могу просто сделать

x += (1 - x)*Time.deltatime

Потому что это, очевидно, не заставит его работать в режиме реального времени.Как мне действовать?


Давайте представим, что код выполняется 4 раза в секунду.Это было бы так, если бы х началось с 0.

Код

x += (1 - x)*0.1

Результаты на каждом шаге будут такими:

step 1: x = 0.1
step 2: x = 0.19
step 3: x = 0.271
step 4: x = 0.3439

Как мне этого добитьсяэффект таким же образом, но работает только 2 раза в секунду, например:

step 1: x = 0.19
step 2: x = 0.3439

Какой тогда будет код?

1 Ответ

0 голосов
/ 29 мая 2018

Если вы рассматриваете вашу серию как функцию f(t), где t - счетчик итераций, тогда

f(t) = 1 - 0.9^t

Здесь ^ - оператор степени.

Так что, еслимы предполагаем, что дельта времени 1 соответствует вашей исходной серии, вы можете использовать эту формулу:

x := 1 - (1 - x) * 0.9^deltatime
...