【发布时间】: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理解四元数是不可思议的。 切勿使用四元数,除非您是完全抽象、四维、虚平面数学方面的专家。