我正在尝试通过时间值减少浮点数,我正在使用 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
变为 3
。 Time.timeScale
是否设置为 1
或 0
并不重要。关于c# - 随着时间的推移,两个值之间的 Lerp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49750245/