transform.lookat问题(C#Unity3D)

时间:2012-12-04 12:02:05

标签: c# unity3d

我一直在修复如何让一个物体像另一个物体上的轨道一样旋转。

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时,它确实绕着自己旋转,但它与实际的球体无关,而是它自己的轨道。

我希望能够让它在一个完整周期内绕着父母轨道运行。

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:3)

恭喜,您刚刚遇到Gimbal Lock

Unity3D框架的辉煌之处在于,通常存在一种适用于您的解决方案的现有方法。在这种情况下,有Transform.RotateAround

此代码应该更接近您最初的预期功能:

transform.RotateAround(ParentOrb.transform.position, Vector3.back, 40f * Time.deltaTime);

其中40f是每秒任意预期的旋转速度(以度为单位)。