【问题标题】:transform.lookat issue (C# Unity3D)transform.lookat 问题(C# Unity3D)
【发布时间】:2012-12-04 12:02:04
【问题描述】:

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

if (Spin == true)  
{  
  transform.LookAt(ParentOrb.transform);  
  transform.Rotate(90,0,0);  
  transform.Translate(transform.forward*Time.deltaTime*5,Space.World);   
}

然而,一旦本应围绕另一个对象运行的对象,当它达到 0 的世界 y 值(正下方/正上方)时,它开始疯狂地旋转。

我确实将lookat 的第二个参数更改为vector.3.up、transform.up 和vector3.zero。

当我使用 vector3.up 时,旋转也是同样的问题。
当我使用 transform.up 时,它开始自转。
当我使用 vector3.zero 时,它确实开始围绕自身旋转,但它与实际的球体无关,而是它自己的轨道。

我希望能够让它在一个完整的周期中绕着 parentorb 运行。

感谢您阅读我的问题。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    恭喜你,你可能刚刚遇到Gimbal Lock

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

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

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

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

    【讨论】:

    • 非常感谢 迄今为止最接近的解决方案。^^
    • 啊,一直在测试,我太仓促了。 >imageshack.us/a/img843/7434/rotations.jpg 沿着这条线的东西,它开始根据位置围绕特定轨道旋转。你给我的那个只有一个陈旧的轨道旋转。我想我可以尝试更多地使用这个功能,看看我是否可以让它工作。如果我可以让它向中心旋转,然后使用 .right,很可能。
    • 好吧,我想我毕竟可以用这个,只要让它当我按下按钮时,我使用 Lookat the center,然后我需要找出如何旋转 z根据当前方向。
    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多