gpt4 book ai didi

c# - 来自 Vector3 的 eulerAngles 导致奇怪的旋转

转载 作者:行者123 更新时间:2023-12-04 13:20:20 24 4
gpt4 key购买 nike

我正在尝试更改相机旋转的 eulerAngle X,同时将 y 和 z 保持为 0。

但是,以下 IEnumerator 会产生奇怪的 eulerAngles,例如 10、-74.653、0。

enter image description here

我不明白 y 值如何在以下函数中发生变化:

private IEnumerator LerpCameraNormalRot()
{
float duration = 0.5f;

for (float t = 0f; t < duration; t += Time.deltaTime)
{
float f = Mathf.Lerp(camera.transform.eulerAngles.x, 10, t / duration);
Vector3 vNew = new Vector3(f, 0, 0);
camera.transform.eulerAngles = vNew;
yield return 0;
}
}

这不奇怪吗?我从不更改 Y 和 Z 值!

我只想将 X 旋转 (eulerAngle.x) 从其当前值更改为 10。

谢谢你的帮助!

最佳答案

您正在设置 eulerAngles 但这将导致不同的 localEulerAngles,这在您的图像中由红色框指示。如果对象有任何旋转的祖先,它们可能不匹配!

要解决您眼前的问题,您可以使用 localEulerAngles 而不是 eulerAngles:

float f = Mathf.Lerp(camera.transform.localEulerAngles.x, 10, t / duration);
Vector3 vNew = new Vector3(f, 0, 0);
camera.transform.localEulerAngles= vNew;

问题是它没有考虑从 359 度左右到 0 度的能力。更好的方法是使用 Quaternion.EulerQuaternion.Slerp 来使用四元数而不是欧拉角:

private IEnumerator LerpCameraNormalRot()
{
float duration = 0.5f;
Quaternion startRotation = camera.transform.localRotation;
Quaternion goalRotation = Quaternion.Euler(10f, 0f, 0f);

for (float t = 0f; t < duration; t += Time.deltaTime)
{
camera.transform.localRotation = Quaternion.Slerp(startRotation, goalRotation, t/duration);
yield return 0;
}

camera.transform.localRotation = goalRotation;
}

关于c# - 来自 Vector3 的 eulerAngles 导致奇怪的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53751095/

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