我正在尝试按时间值减少浮动,我正在使用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'
感谢。
答案 0 :(得分:5)
我正在使用Unity并停止时间
SetAttribute localSetAttribute = new SetAttribute(140, "B", beeperVolume.getValue(), 0);
因此无法使用Time.timeScale = 0f;
所以在while循环中使用'Time.realtimeSinceStartup'。
您无需使用Time.deltaTime
。确实将Time.realtimeSinceStartup
设置为 0 会使Time.deltaTime
每帧都返回 0 。
这就是 Unity 4.5 中添加Time.unscaledDeltaTime
来解决这个问题的原因。只需将Time.timeScale
替换为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
,则无关紧要。