gpt4 book ai didi

c# - 宇宙飞船 : Rolling Sideways

转载 作者:行者123 更新时间:2023-11-30 04:21:58 25 4
gpt4 key购买 nike

实际上,我正在编写一个小型太空射击游戏(2.5D,俯 View )。玩家可以沿着 XZ 轴移动并通过右侧的迷你摇杆(游戏 handle )旋转宇宙飞船或查看光标位置(键盘 + 鼠标)。

因此,运动和旋转(Y 轴、偏航)是分开的。整个工作正常并且看起来不错 - 但现在我想执行以下操作:

如果宇宙飞船侧向移动,它应该围绕 X/俯仰轴旋转/左右倾斜一点,具体取决于侧向速度。

因此,我必须根据以下给定输入计算横向速度:

速度 vector (X 轴和 Z 轴上的运动,Y 始终为“0”)方向 vector (在 Y 轴上旋转,X 和 Z 始终为“0”)

利用侧向速度,我可以围绕 X 轴旋转我的宇宙飞船,并将得到的四元数乘以围绕 y 轴的旋转。

有人对此有解决方案吗?


解决方案:只需按宇宙飞船的航向“旋转”速度 vector ,并使用“roll/z”轴作为绕 X 轴(该轴,其中你的 scapy 指向):

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);

最佳答案

几种可能性:

  1. 将速度 vector 与飞船的局部左方向进行比较(首先确保它们在同一坐标空间中)。您可以使用 Vector3.Angle 函数或点积来进行比较。适当缩放结果,并围绕正向轴应用局部旋转。

  2. 直接接受用户输入。如果用户在一个方向扫射,应用滚动值。您可以使用介于 -1 和 +1 之间的 float 以及变化率。如果他们向左扫射,则以该速率将值移向 -1,或者如果他们向左扫射,则将值移至 +1。如果两个键都没有被按下,则将值移回 0。(您可能也想尝试使用 Lerp、SmoothStep 和 SmoothDamp 函数)。缩放值以围绕相关轴应用适当的旋转。

关于c# - 宇宙飞船 : Rolling Sideways,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com