Добавление / вычитание из переменной при увеличении ее на значение с течением времени - PullRequest
0 голосов
/ 23 октября 2019

У меня слив воды с максимального значения до 0 за определенный период времени (timeToDrain в этом коде). Меня удивляет, почему я вообще не могу изменить это значение (water), когда делаю что-то вроде

water += 1;

Мой код:

public float water,waterMax,w;

void ddrainWater() {
        float timeToDrain = 160; //seconds

        float timeRemaining = timeToDrain - w;

        w += Time.deltaTime;
        water = Mathf.Lerp(waterMax, 0, w / timeToDrain);
    }

Опять яЯ не совсем уверен, как решить что-то вроде этого.

Ожидаемое: возможность сделать

water += 0.2f;

Но вода постоянно возвращается к значению, которое было дано ей Mathf.Lerp(). Есть ли способ, которым я могу добавить / вычесть значение из этой переменной? Может быть, что-то делать с переменной 'w'?

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Из-за Lerp

Этот вызов Lerp никоим образом не заботится о текущем значении water, он будет перезаписан на основе w.

Если вы хотите добавить воды, вам нужно вычесть из w или , не использовать Lerp и вместо этого самостоятельно управлять скоростью слива.

Я не могу предоставить пример исправления, потому что вы хотите обрабатывать вещи так, как вы хотите обрабатывать вещи (а у меня не весь ваш код).

0 голосов
/ 23 октября 2019

Если вы кодируете то, что, как вы говорите, вы ищете, это на самом деле будет работать нормально - уменьшите текущее количество воды путем слива, произошедшего с момента последнего тика:

 var amountDrainedSinceLastCheck = waterMax * Time.deltaTime / timeToDrain;
 water = water - amountDrainedSinceLastCheck;
0 голосов
/ 23 октября 2019

В настоящее время вы устанавливаете water на новое значение через water += value, но затем устанавливаете его на другое значение с помощью функции Lerp, которая изменяется независимо от текущего значения для water.

Ваш выбордолжны либо: уменьшить w на величину (возможно, заменить water += value на w -= (waterMax / timeToDrain) * value), увеличить timeToDrain на некоторое значение (возможно, заменить water += value на timeToDrain += (timeToDrain / waterMax) * value), либо заменить функцию Lerp нато, что использует текущий уровень воды, а не максимальный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...