我的游戏对象的变换不会在 360 - "pingpongs" 270 - 90 之间旋转。(Unity 3D C#)



如果很难理解,请提前道歉,如果需要,我会绘制图表。

我正在使用Unity3D开发游戏,但玩家的转换出现了问题。游戏是第一人称的3D游戏,在某些地方重力会发生变化,玩家可以沿着墙壁行走——这一切都在进行中。

当玩家的重力如此之大,以至于它在墙上行走时,当我旋转角色的以环顾四周时,它的变换表现得很奇怪。它可以旋转一整圈,在玩游戏时角色没有明显的问题。

如果我在播放模式下查看检查员,假设我不断向右转弯,会发生以下情况:

  • 旋转增加到90度
  • 当它达到90度时,它开始反向向下计数,直到0,就好像我改变了方向(但我仍在右转)
  • 然后它向下计数,超过0,继续到270-一旦达到270,它就开始再次向上计数,增加到90,以此类推。其他轴不时变化,仅变化0.00001度,但它们保持在应该的值附近(地面上也发生了同样的事情,旋转得很好,所以我认为这不是问题所在)

序列类似于:0, 1, 2 ... 88, 89, 90, 89, 88 ...1, 0, 359, ...271, 270, 271 ... 359, 0, 1 ...89, 90, 89 ...

当我在"场景"视图中观看变换时,它像车窗上的雨刷一样来回移动,而我的角色本身只是不断地朝一个方向转动。当我在地面上时,它会像它应该的那样绕一整圈,尽管它的价值仍然是"乒乓球"。

发生这种情况的原因是什么?当玩家角色在地板上时不会发生这种情况,只有当它在墙上时才会发生。我需要知道的原因是,比赛中还有其他一些东西依赖于模仿球员的轮换,而这个问题给了我不想要的行为。

任何帮助都将不胜感激,我已经有一段时间遇到麻烦了!

你不应该依赖Unity中的角度值,它使用四元数进行旋转:

https://unity3d.com/ru/learn/tutorials/modules/intermediate/scripting/quaternionshttp://docs.unity3d.com/ScriptReference/Quaternion.html

奇怪的行为来自于这样一个事实,即角度值的多个组合表示相同的旋转。

最新更新