将球体恢复到方向?

时间:2016-05-09 18:18:11

标签: unity3d rotation transform interpolation

虽然我从一个非常好的,面向世界的地球开始:

Good

经过大量人工干预和旋转后,地球仪可能如下所示:

Bad

显然,我应该实现某种恢复功能,将某个轴上的地球恢复到一定程度。

我天真地创建了以下代码:

Before
0 1 0 1 1 1
After
0 0 1 1 1 1

然而,这显然不起作用。它肯定在全球范围内旋转,但它并没有像预期的那样移动......

是否有人对Slerp或类似的东西有更多经验可以将我的地球旋转到0点?

与往常一样,非常感谢任何帮助或建议。

编辑:如果我以前不清楚,我希望实现这样的目标:https://gfycat.com/PeacefulJubilantCottontail(这是我对问题的解决方案)。我确实试过在这里使用其他解决方案,但我想有一个误解,因为它们没有用。

虽然,以下天真的代码分类工作,我仍然觉得有更好的方法来做...

if(transform.parent.rotation.eulerAngles.y != 0)
{
     goalRotation.eulerAngles = new Vector3(transform.parent.rotation.eulerAngles.x, transform.parent.rotation.eulerAngles.y, 0); 
     transform.parent.rotation = Quaternion.Slerp(transform.parent.rotation, goalRotation, Time.deltaTime);
}

我唯一真正存在的问题是Slerp朝着理想的方向努力,但它并没有走最快的路。任何进一步的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是你想要做的吗?

quaternion defaultRotation = transform.parent.rotation;
bool returnToDefault = false;

void Update()
{
    if(returnToDefault)
    {
        Vector 3 rot = new Vector 3 (transform.parent.rotation.x, Quaternion.Slerp(transform.parent.rotation, defaultRotation, Time.deltaTime).Euler.y, transorm.parent.rotation.y);
        transform.parent.EulerAngles = rot;
    }
}

只要你想让它返回,只需将变量returnToDefault更改为true即可。否则,你会经常对你的代码进行打击,正如你所写的那样,它总是将它旋转回默认值。