如何在协程中使用缓动来更改浮点值?
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 中,并在类的顶部添加了一个“浮动时间”,但没有发生任何事情。以上是关于如何在协程中使用缓动来更改浮点值?的主要内容,如果未能解决你的问题,请参考以下文章