我有一个方向盘,由物理的 daydream 控制器控制(它的工作方式类似于 Wii 控制器)。我使用以下代码来实现它:
我需要调整轴,因为控制器的默认位置对于方向盘不是很好。
但是在三维角度中,最大向左和向右旋转之间的角度范围为180度。在此范围内一切都好,但如果我再多旋转一点,这些值就会变成负数,一切都会混乱。有什么办法让玩家只能在此范围内(3轴旋转的z轴上的0-180)旋转?
编辑:主要问题在于,跨越0或180后旋转的值会变为负值,它们对于两者都相同,但顺序不同。跨越0时为-1到-180,而180时为-180到-1。
void Update() {
transform.localRotation = GvrController.Orientation;
transform.localRotation = new Quaternion(0.0f, 0.0f, -transform.localRotation.y, transform.localRotation.w);
}
我需要调整轴,因为控制器的默认位置对于方向盘不是很好。
但是在三维角度中,最大向左和向右旋转之间的角度范围为180度。在此范围内一切都好,但如果我再多旋转一点,这些值就会变成负数,一切都会混乱。有什么办法让玩家只能在此范围内(3轴旋转的z轴上的0-180)旋转?
编辑:主要问题在于,跨越0或180后旋转的值会变为负值,它们对于两者都相同,但顺序不同。跨越0时为-1到-180,而180时为-180到-1。
Quaternion.Euler
替代(我必须承认-我自己并不经常使用欧拉方法,但它使其非常容易跟踪) - Luke BriggseulerAngles.y
。在你的问题中,你直接使用四元数的 'y' 分量,这将简而言之给出意想不到的结果。 - Luke Briggs