虽然我从一个非常好的,面向世界的地球开始:
经过大量人工干预和旋转后,地球仪可能如下所示:
显然,我应该实现某种恢复功能,将某个轴上的地球恢复到一定程度。
我天真地创建了以下代码:
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朝着理想的方向努力,但它并没有走最快的路。任何进一步的帮助将不胜感激。
答案 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即可。否则,你会经常对你的代码进行打击,正如你所写的那样,它总是将它旋转回默认值。