【问题标题】:(Unity) Issue with rotation when transform.up is aligning to a direction(Unity)transform.up 对齐方向时出现旋转问题
【发布时间】:2016-11-08 04:48:48
【问题描述】:

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

我希望我能正确地解释自己。请询问您是否需要进一步说明...

我的想法似乎成功了,直到我发现一些奇怪的东西。

正如预期的那样,玩家绕着圆圈移动而不会掉落(自定义重力效果很好),并且它的 Z 旋转受到影响,因为它与一个方向对齐:

//对齐代码:

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

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

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

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

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

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

编辑:将标签更改为 Unity3D

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    【讨论】:

    • 您好。谢谢回复。所以我对 Unity 有点陌生,并且一直在尝试避免四元数(到目前为止成功)......我检查了 Quaternion.slerp 的 API 文档,但我仍然不完全确定如何完全按照我的想法实现它。如果您能提供任何进一步的帮助,我们将不胜感激。
    • 另外,我想提一下我为这个问题设计了一个不优雅的解决方案。我对此并不感到兴奋,但它似乎从表面上解决了这个问题:transform.up = -(planet.position - transform.position); if(transform.eulerAngles.z == 180) { Vector3 euler; euler = transform.eulerAngles; euler = euler + new Vector3(0,-180,0); transform.eulerAngles = euler; }
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多