我一直在修复如何让一个物体像另一个物体上的轨道一样旋转。
if (Spin == true)
{
transform.LookAt(ParentOrb.transform);
transform.Rotate(90,0,0);
transform.Translate(transform.forward*Time.deltaTime*5,Space.World);
}
然而,一旦对象围绕另一个物体运行,当它击中世界时y值为0(直接低于/高于)时,它开始像疯了一样旋转。
我确实将lookat的第二个参数更改为vector.3.up,transform.up和vector3.zero。
当我有vector3.up时,旋转也是同样的问题 当我进行转换时,它开始绕自己旋转 当我有了vector3.zero时,它确实绕着自己旋转,但它与实际的球体无关,而是它自己的轨道。
我希望能够让它在一个完整周期内绕着父母轨道运行。
感谢您阅读我的问题。
答案 0 :(得分:3)
恭喜,您刚刚遇到Gimbal Lock!
Unity3D框架的辉煌之处在于,通常存在一种适用于您的解决方案的现有方法。在这种情况下,有Transform.RotateAround。
此代码应该更接近您最初的预期功能:
transform.RotateAround(ParentOrb.transform.position, Vector3.back, 40f * Time.deltaTime);
其中40f是每秒任意预期的旋转速度(以度为单位)。