gpt4 book ai didi

c# - 对象Unity的旋转以错误的值旋转

转载 作者:太空狗 更新时间:2023-10-29 21:59:08 25 4
gpt4 key购买 nike

我的问题是我希望能够将圆柱旋转 9 次。 360/9 是 40,所以我需要做的就是将 40 度旋转 9 次。然而,这不起作用,因为当我第一次旋转圆柱体而不是旋转 40 度时,它旋转了 39.99 度。这也发生在其他轮换中。

我正在这样做。

if(Input.GetKeyUp("i"))
transform.GetChild(m_Section).Rotate(0,40.0f,0);

我有 unity 3.4 版本,它不是专业版,我正在用 C# 编写代码。

感谢任何帮助,因为我刚刚开始尝试学习 unity。

最佳答案

Unity3D 将旋转存储在一个非常抽象的数学表示中,称为 quaternion .欧拉角(您在 Unity 编辑器中看到的)的转换涉及三角函数的级联,因此容易出现舍入错误,尤其是对于简单的浮点类型。

为了在您的案例中解决这个问题,我建议在开始旋转之前存储初始四元数对象并在过程结束时设置它。一些伪代码:

public class RotationController : MonoBehaviour {
Quaternion rotationAtStart;
int numOfRotations = 0;

void rotate () {
numOfRotations++;
if (numOfRotations == 1) {
rotationAtStart = transform.rotation;
} else if (numOfRotations < 9) {
transform.Rotate (new Vector3 (0,40.0f,0));
} else if (numOfRotations == 9) {
transform.rotation = rotationAtStart;
}
}
void Update () {
if (numOfRotations < 9) {
rotate ();
}
}
}

360°的特殊情况,使得这种方式比较稳定。对于小于 360° 的情况,您必须忍受小的舍入误差。对于这种情况,我建议计算目标四元数 Quaternion.RotateTowards 并在类似于 360 度情况的最后一步中设置它。

另一个对你有用的东西是Animations .您可以将动画定义为平滑的或离散的步骤,如果按下“i”,则只需调用 GameObject.animation.Play("MyRotation")。在结束时使用 AnimationEvent 以在动画终止时得到通知。

最后 Mathf 包含一个函数 Approximately处理浮点不精确的问题。

关于c# - 对象Unity的旋转以错误的值旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458679/

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