(Unity)当transform.up与方向对齐时旋转问题

时间:2015-04-14 15:02:24

标签: c# unity3d

我正在测试Unity中的一些想法,其中玩家可以绕着它走一圈(因此圆圈有自己的重力)并且也正确定向。这个游戏目前正在2D中完成,因此所有对象都是精灵。

我希望我能够正确解释自己。请询问您是否需要进一步澄清......

似乎我成功了解了我的想法,直到我注意到一些奇怪的东西。

正如预期的那样,玩家围绕圆圈移动而不会脱落(自定义引力工作得很好)并且Z旋转受到影响,因为它与方向对齐:

//对齐代码:

//我们反转方向,使对象以正确的方式站立。

private void Update()
{
    transform.up = -(planet.position - transform.position); 
}

它主要起作用。然而,当玩家对象的旋转Z自然达到180时,它似乎水平翻转(如镜像效果),然后当旋转Z离开180时它恢复正常。视觉翻转发生是因为由于某种原因,对象的Y在180处变为180同时也是。在任何其他方面,X或Y在旋转方面都没有变化。只有Z.所以当Z点击180时,Y受影响,当我们离开Z 180时,Y返回0。

如果有人需要对正在发生的事情有一些直观的了解,我很乐意提供一个在游戏中发生的快速视频。

此错误的可见性往往取决于您在圈子中移动的速度。如果你的移动速度足够快,你可能跳过180以上并且根本看不到它,但是如果你移动得足够慢,那就不可否认了。这也是一个问题,因为我只是让相机成为玩家的孩子,所以当玩家翻转时,相机也会导致整个场景翻转,这对于玩家来说看起来非常微不足道。

我真的不知道如何解决这个问题,因为我不知道为什么会做这样的事情。在每个其他旋转值,它表现得很好。它仅在Z = 180时(因此对象完全倒置)它是否决定以错误的方式旋转。

编辑:将标签更改为Unity3D

1 个答案:

答案 0 :(得分:0)

这可能是因为将四元数(实际上在内部用于旋转)转换为用于显示的欧拉角。你能尝试使用Quaternion.Slerp来旋转吗?