如何在协程中使用缓动来更改浮点值?

Posted

技术标签:

【中文标题】如何在协程中使用缓动来更改浮点值?【英文标题】:How to use easing inside a coroutine to change a float value? 【发布时间】:2021-07-24 04:36:11 【问题描述】:

我想随着时间的推移增加浮动的值,但增加了 In-Out 缓动。

这里我使用的是 Mathf.Lerp,我知道有 Mathf.Smoothstep,但在 SmoothStep 中,我似乎无法控制缓动本身的速度。我希望在我选择的特定时间(范围?)内从某个值开始缓动到另一个值。例如,如果浮点数从 0 变为 100,我希望缓动从 0 变为 20,然后再从 70 变为 100。

这是我正在使用的当前代码:

 float minValue = 0;
 float maxValue = 100;
 float duration = 10;
 
 float value;
 
 void Start()
 
       StartCoroutine(IncreaseSpeed(minValue, maxValue, duration));
 
  private IEnumerator IncreaseSpeed(float start, float end, float duration)
  
     float time = 0;
     while (time <= duration)
     
         time = time + Time.deltaTime;
         value = Mathf.Lerp(start, end, time / duration);
         yield return null;
     
  

【问题讨论】:

您不需要协程,因为您使用time 类来管理时间量。你应该把它放在一个更新函数中,然后你可以将它的脚本调整为你想要的。 【参考方案1】:

也许是这样的?


    time  = time + Time.deltaTime;
    value = Mathf.Lerp(start, 20, time / duration);
    yield return new WaitUntil(()=> value == 20);
    value = Mathf.Lerp(20, 70, time / duration);
    yield return new WaitUntil(()=> value == 70);
    value = Mathf.Lerp(70, 100, time / duration);

【讨论】:

感谢您的帮助。我不确定发生了什么,但这段代码没有运行。我将它粘贴到一个 IEnumerator 中,并在类的顶部添加了一个“浮动时间”,但没有发生任何事情。

以上是关于如何在协程中使用缓动来更改浮点值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在协程中发出GET请求?

在协程中使用全局状态变量?

Python中协程的实现

Python协程深入理解(转)

Python协程深入理解

Python协程深入理解