【问题标题】:Unity Rotation & QuaternionsUnity 旋转和四元数
【发布时间】:2017-03-23 05:09:46
【问题描述】:

我正在学习 Unity,我有一个问题。

我不明白为什么这条线将旋转重置为 0,0,0。我所做的只是重新分配它的欧拉值?

transform.rotation = 
             Quaternion.Euler(transform.rotation.x,
                              transform.rotation.y,
                              transform.rotation.z);

我这样做的原因是因为我需要锁定一个轴并保持其他轴的变化。所以我想在x和z轴发生变化后我可以这样做:

transform.rotation = Quaternion.Euler(transform.rotation.x,
                                      LOCKED ROTATION VALUE,
                                      transform.rotation.z);

我确定它很简单,但我无法找出问题所在。

提前致谢。

【问题讨论】:

  • 您不能将transform.rotation 中的值放入Quaternion.Euler。这不会像你想的那样。 transform.rotation 返回一个四元数,四元数是复数,不是浮点数。例如。在 y 轴上旋转 180 度将是 w = 0, x = 0, y = 1, z = 0 的四元数。
  • 从不出于任何原因使用四元数。您可能已经在网上看到过它们,这令人困惑。要在 Unity 中旋转对象,请使用“旋转”。在许多情况下,您也可以使用“eulerAngles”。享受吧!
  • @JoeBlow 完全不同意,请重新检查使用四元数的优点以及它们如何比您建议的要好得多,只有当您正确理解问题时,我打赌您会改变你的想法。关于他们的 gamasutra 上有一篇不错的文章。
  • 嗨维洛。 OP理解四元数是不可思议的。 切勿使用四元数,除非您是完全抽象、四维、虚平面数学方面的专家。

标签: unity3d rotation unity5


【解决方案1】:

Here is some documentation with transform.Rotate()。我会用这个来旋转。

// Here is an example if you want to just rotate the Z axis.
transform.Rotate(new Vector3(0, 0, 10f) * Time.deltaTime);

Also, here is some other documentation on Quaternion。您可以使用 RotateTowards 等函数。

如果您的游戏对象上有一个刚体,那么您可以在 Unity 中锁定它的旋转。点击游戏对象,在 Rigidbody 组件下点击 Constraints,然后点击 Freeze Rotation 下的轴。

【讨论】:

  • 我的对象没有刚体,我也不需要。
  • @Sangratura - 当然。抱歉,我没有明确说明您只需要使用 Rotate()。只是给你选择。
  • 嗨@Sangratura。 不要使用四元数是绝对必要的。如果(出于某种原因)您想要设置 eulerAngles,只需使用 transform.eulerAngles。
【解决方案2】:

您正在使用 transform.rotation 就好像它正在暴露欧拉角(它不是)。如果你想从你的旋转中得到欧拉角,你必须这样做:

transform.rotation = 
             Quaternion.Euler(transform.rotation.eulerAngles.x,
                              transform.rotation.eulerAngles.y,
                              transform.rotation.eulerAngles.z);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多