gpt4 book ai didi

c# - Quaternion.Slerp 由于某种原因旋转不顺畅

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:54 25 4
gpt4 key购买 nike

我正在尝试使用 Unity 使对象像跷跷板一样摇摇晃晃地旋转,出于某种原因,旋转是即时的,而不是渐进的运动。我之前研究过 Slerp 和 Lerp,但无法让它与任何一个一起工作。我想知道是否有人有任何见解,因为我确定我错过了一些愚蠢而简单的东西 xD。谢谢你!这是方法。

private void Rotate(float rotateAmount)
{
var oldRotation = transform.rotation;
transform.Rotate(0, 0, rotateAmount);
var newRotation = transform.rotation;

for (float t = 0; t <= 1.0; t += Time.deltaTime)
{
transform.rotation = Quaternion.Slerp(oldRotation, newRotation, t);
}
transform.rotation = newRotation;
}
}

最佳答案

for 循环中完成的所有旋转都发生在一个 框架下。你看不到它们在一帧下发生变化。将 Rotate 函数设为协程函数,然后使用 yield return null 在每个循环中等待一个帧,您应该会看到随时间的变化。

private IEnumerator Rotate(float rotateAmount)
{
var oldRotation = transform.rotation;
transform.Rotate(0, 0, rotateAmount);
var newRotation = transform.rotation;

for (float t = 0; t <= 1.0; t += Time.deltaTime)
{
transform.rotation = Quaternion.Slerp(oldRotation, newRotation, t);
yield return null;
}
transform.rotation = newRotation;
}

因为它是协程函数,所以你启动它而不是直接调用它:

StartCoroutine(Rotate(90f));

我注意到您使用了 transform.Rotate(0, 0, rotateAmount) 来获取目标角度。你不需要那样做。如果您需要将对象从当前角度旋转到另一个角度,请获取当前角度,然后将其添加到目标角度并使用 Vector3.Lerp 对旋转进行插值。

请参阅 this 中的“随时间递增的角旋转:” 部分发布。

关于c# - Quaternion.Slerp 由于某种原因旋转不顺畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com