【发布时间】:2012-12-14 15:20:18
【问题描述】:
实际上,我正在编写一个小型太空射击游戏(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);
【问题讨论】: