实际上,我正在编写一个小型太空射击游戏(2.5D,Topdown View)。玩家可以沿着 XZ 轴移动并通过右迷你杆(游戏手柄)旋转飞船或查看光标位置(键盘 + 鼠标)。
因此,运动和旋转(Y 轴,偏航)是分开的。整个事情工作正常,看起来不错 - 但现在我想做以下事情:
如果宇宙飞船侧向移动,它应该围绕 X / Pitch 轴旋转 / 左右倾斜一点,取决于侧向速度。
所以,我必须从以下给定输入计算横向速度:
速度矢量(X 和 Z 轴上的运动,Y 始终为“0”)方向矢量(Y 轴上的旋转,X 和 Z 始终为“0”)
通过横向速度,我可以围绕 X 轴旋转我的宇宙飞船,并将得到的四元数乘以围绕 y 轴的旋转。
有谁对此有解决方案吗?
解决方案:只需通过飞船的航向“旋转”速度矢量,并使用“roll/z”轴作为围绕 X 轴(您的船头指向的轴)的侧向旋转:
Quaternion Rotation = Quaternion.Euler(0, mHeading.y, 0);
Vector3 RealVeloctiy = Quaternion.Euler(0, -mHeading.y, 0) * Velocity;
float Angle = RealVeloctiy.z * 2.5f;
Rotation = Rotation * Quaternion.Euler(Angle, 0, 0);