gpt4 book ai didi

c# - 随着时间的推移,两个值之间的 Lerp

转载 作者:行者123 更新时间:2023-12-03 19:30:35 25 4
gpt4 key购买 nike

我正在尝试通过时间值减少浮点数,我正在使用 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”

谢谢。

最佳答案

I'm using Unity and stopping time Time.timeScale = 0f; so can not use Time.deltaTime so using 'Time.realtimeSinceStartup' in a while loop.



您不需要为此使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com