为了账号安全,请及时绑定邮箱和手机立即绑定

随着时间的推移在两个值之间变小

随着时间的推移在两个值之间变小

C#
噜噜哒 2021-03-31 22:06:41
我正在尝试通过时间值减少浮点数,我正在使用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”
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我正在使用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;

    }

}

用法:


StartCoroutine(changeValueOverTime(5, 1, 3));

值在几秒钟内从5变为。设置为还是都没有关系。13Time.timeScale10


查看完整回答
反对 回复 2021-04-10
  • 1 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信