Dav*_*ave 6 c# rotation unity-game-engine
我的问题是我希望能够旋转一个圆柱9次.360/9是40所以我应该做的就是旋转40度9次.然而,这不起作用,因为当我第一次旋转圆柱而不是旋转40度它旋转39.99度时.这也发生在其他轮换中.
我正在这样做.
if(Input.GetKeyUp("i"))
transform.GetChild(m_Section).Rotate(0,40.0f,0);
Run Code Online (Sandbox Code Playgroud)
我有统一版本3.4它不是专业版我在C#编码.
任何帮助,因为我刚开始尝试学习团结.
Unity3D 将旋转存储在一种非常抽象的数学表示形式中,称为四元数。欧拉角(您在 Unity 编辑器中看到的内容)的转换涉及一系列三角函数,因此容易出现舍入错误,尤其是对于简单的浮点类型。
\n\n为了在您的情况下解决这个问题,我建议在开始旋转之前存储初始四元数对象,并在过程结束时设置它。一些伪代码:
\n\npublic class RotationController : MonoBehaviour {\n Quaternion rotationAtStart;\n int numOfRotations = 0;\n\n void rotate () {\n numOfRotations++;\n if (numOfRotations == 1) {\n rotationAtStart = transform.rotation;\n } else if (numOfRotations < 9) {\n transform.Rotate (new Vector3 (0,40.0f,0));\n } else if (numOfRotations == 9) {\n transform.rotation = rotationAtStart;\n }\n }\n void Update () {\n if (numOfRotations < 9) {\n rotate ();\n }\n }\n } \nRun Code Online (Sandbox Code Playgroud)\n\n360\xc2\xb0的特殊情况使得这种方法稳定。对于小于 360\xc2\xb0 的情况,您必须忍受较小的舍入误差。对于这种情况,我建议计算目标四元数Quaternion.RotateTowards并在最后一步中将其设置为类似于 360 度情况。
另一个对你有用的东西是动画。您可以将动画定义为平滑或离散步骤,并GameObject.animation.Play("MyRotation")在按下“i”时调用。在最后使用 AnimationEvent 来获取动画何时终止的通知。
最后,Mathf 包含了一个approximation函数来处理浮点不精确的问题。
\n