実際、私は小さなスペースシューター ゲーム (2.5D、トップダウン ビュー) をプログラミングしています。プレイヤーは XZ 軸に沿って移動し、右ミニスティック (ゲームパッド) を介して宇宙船を回転させるか、カーソル位置 (キーボード + マウス) を見ることができます。
そのため、動きと回転 (Y 軸、ヨー) は分離されています。全体が正常に機能し、見栄えがします-しかし、今は次のことをしたいです:
宇宙船が横に移動する場合、横方向の速度に応じて、X / ピッチ軸を中心に回転 / 左右に少し傾く必要があります。
したがって、次の入力から横方向の速度を計算する必要があります。
速度ベクトル (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);