我正在尝试通过时间值减少浮点数,我正在使用 Unity 并停止时间 Time.timeScale = 0f;,因此无法使用 Time.deltaTime,因此在 while 循环中使用“Time.realtimeSinceStartup”,我从全局脚本中读取了主音量变量玩家可以在 0 - 1 之间的游戏中设置所以说我读了 0.6 并且我想在 2 秒内将音量降低到 0 我如何获得百分比以继续降低音量?

这是我的代码..

 private IEnumerator VolumeDown ()
{
    float volumeIncrease = globalVarsScript.musicVolume;
    float volumePercentage = ??;
    float newLerpEndTime = Time.realtimeSinceStartup + 2f;

    while (Time.realtimeSinceStartup < newLerpEndTime)
    {
        audio.volume = volumeIncrease;
        volumeIncrease -= volumePercentage;
        yield return null;
    }
}

抱歉,我无法获得“volumePercentage”

谢谢。

最佳答案



您不需要为此使用 Time.realtimeSinceStartup。确实,将 Time.timeScale 设置为 0 会使 Time.deltaTime 每帧返回 0。

这就是为什么在 Unity 4.5 中添加了 Time.unscaledDeltaTime 来解决这个问题。只需将 Time.deltaTime 替换为 Time.unscaledDeltaTime 。您可以使用 if (Time.timeScale == 0) 来自动决定是使用 Time.unscaledDeltaTime 还是 Time.deltaTime

IEnumerator changeValueOverTime(float fromVal, float toVal, float duration)
{
    float counter = 0f;

    while (counter < duration)
    {
        if (Time.timeScale == 0)
            counter += Time.unscaledDeltaTime;
        else
            counter += Time.deltaTime;

        float val = Mathf.Lerp(fromVal, toVal, counter / duration);
        Debug.Log("Val: " + val);
        yield return null;
    }
}

用法 :
StartCoroutine(changeValueOverTime(5, 1, 3));

该值在 5 秒内从 1 变为 3Time.timeScale 是否设置为 10 并不重要。

关于c# - 随着时间的推移,两个值之间的 Lerp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49750245/

10-12 05:40