在变量随时间增加值时添加/减去变量

时间:2019-10-23 19:54:39

标签: c# unity3d time

在特定时间段(此代码中的timeToDrain),我的水从最大值排放到0。我想知道的是为什么当我做类似的事情时,我根本无法修改此值(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 个答案:

答案 0 :(得分:1)

因为勒普

Lerp调用完全不 关心water的当前值,它将基于w覆盖它。

如果要添加水,则需要从w减去 不使用Lerp,而是管理排水加快自己的速度。

我无法提供示例修复程序,因为您要如何处理事情就是要如何处理事情(而且我没有您的所有代码)。

答案 1 :(得分:0)

当前,您正在通过waterwater += value设置为新值,然后通过Lerp函数将其设置为另一个值,该值独立于water的当前值而变化。

您可以选择以下一种方法:将w减少一定的量(可能用{{1}替换water += value),将w -= (waterMax / timeToDrain) * value增加一些值(也许替换{{1 }}加上timeToDrain),或将Lerp函数替换为使用当前水位而不是最大值的东西。

答案 2 :(得分:0)

如果您对自己说的话进行编码,实际上可以正常工作-通过自上次滴答后发生的排水来减少当前的水量:

 var amountDrainedSinceLastCheck = waterMax * Time.deltaTime / timeToDrain;
 water = water - amountDrainedSinceLastCheck;