我正在创建一个游戏,你可以使用旋转遥控器(它只知道它的旋转)来驾驶汽车。我将转换Quaternion
(这是控制器的输出)转换为方向盘旋转时出现问题。这是我尝试的所有事情中最接近工作形式的事情(transform.localRotation是旋转的方向盘):
void Update() {
transform.localRotation = GvrController.Orientation;
transform.localRotation = new Quaternion(0.0f, 0.0f, transform.localRotation.z, transform.localRotation.w);
}
这显然不是一个好的解决方案,效果不是很好。我正在尝试做的事情有一个非常简单的可视化: 控制器的默认方向面向前方,如图所示。
基本上整个问题是如何跳过除了负责旋转的轴(图片上的轴1)之外的所有轴并将其应用到方向盘上。你知道我该怎么办?
编辑: 因为如果没有适当的可视化就很难解释这个问题,我会拍摄我的控制器的照片并在它们上画出轴。
这是控制器的默认方向:
这就是它上面标有轴的方式:
答案 0 :(得分:2)
使用Quaternion.Euler和Quaternion.eulerAngles。注意,与Vector3不同,Euler函数的顺序是z,x和y。 EulerAngles以度为单位返回角度(而rotation.x返回该轴的四元数量)。 Euler函数需要一个角度,所以你需要像:
Quaternion rot = GvrController.Orientation;
transform.localRotation = Quaternion.Euler(rot.eulerAngles.z, 0, 0);
根据控制器轴的设置方式,如果它不是y-up z-forward,则可能需要尝试其他方向,例如
transform.localRotation = Quaternion.Euler(rot.eulerAngles.x, 0, 0);
或
transform.localRotation = Quaternion.Euler(0, 0, rot.eulerAngles.z);
等等。很快就会清楚它使用哪个系统。
另外,如果方向盘不是任何使用旋转而不是localRotation的父级。