(Unity)transform.up与某个方向对齐时出现旋转问题



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

我真的希望我能好好解释自己。请询问您是否需要进一步澄清。。。

我似乎成功地实现了我的想法,直到我发现了一些奇怪的事情。

因此,正如预期的那样,玩家在圆圈内移动而不会脱落(自定义重力作用很好),其Z旋转会受到影响,因为它与一个方向对齐:

//对齐代码:

//我们反转方向,使物体以正确的方式直立。

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

它有效。。。主要地然而,当玩家对象的旋转Z自然达到180时,它看起来是水平翻转的(就像镜像效果一样),然后随着旋转Z离开180,它会恢复正常。发生视觉翻转是因为出于某种原因,对象的Y也同时变为180。在任何其他点上,X或Y都不会相对于旋转发生变化。只有Z。所以当Z达到180时,Y受到影响,当我们离开Z 180时,Y返回0。

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

这个bug的可见性往往取决于你在圆圈周围移动的速度。如果你移动得足够快,你可能会跳过180,根本看不到它的发生,但如果你移动的足够慢,不可否认它是存在的。还有一个问题是,我只是把相机做成了玩家的孩子,所以当玩家翻转时,相机也会导致整个场景翻转,这对玩家来说可能看起来非常麻烦。

我真的不知道如何解决这个问题,因为我不知道它为什么会做这样的事情。每隔一个旋转值,它的行为都很好。只有当Z=180时(因此对象完全颠倒),它才会决定以错误的方式旋转。

编辑:已将标签更改为Unity3D

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

最新更新