Kev*_*ths 2 c# floating-point while-loop unity-game-engine
我正在尝试将浮点数减少一个时间值,我正在使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
对不起,我只是无法获得'volumePercentage'
谢谢.
我正在使用Unity并停止时间,
Time.timeScale = 0f;所以不能Time.deltaTime在while循环中使用'Time.realtimeSinceStartup'.
你不需要使用Time.realtimeSinceStartup它.确实设置Time.timeScale为0使得 每帧Time.deltaTime返回0.
这就是为什么Time.unscaledDeltaTime在Unity 4.5中添加了解决这个问题的原因.只需更换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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
StartCoroutine(changeValueOverTime(5, 1, 3));
Run Code Online (Sandbox Code Playgroud)
从值变化5到1内3秒.如果Time.timeScale设置为1或无关紧要0.
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |