【Unity】斜めの移動が速くなってしまう

2023年4月1日

Unityで斜めの移動が早くなってしまう原因は、通常、以下の2つの要因が考えられます。

要因

  1. 同時に複数の方向に移動するため、実際の速度が向きの速度の合計よりも大きくなってしまうため。
  2. 物理エンジンの設定が正しくないため、速度が正しく計算されていないため。

この問題を解決するために、以下の方法を試してみてください。

  1. ベクトルの正規化:移動方向のベクトルを正規化し、ベクトルの長さが1になるようにします。これにより、斜めの移動速度が他の方向の速度と同じになります。
  2. 物理エンジンの設定の変更:物理エンジンの設定を変更し、重力、摩擦、空気抵抗、速度の最大値などを調整します。これにより、速度が正しく計算され、移動が均一になります。
  3. 移動の制限:プレイヤーが斜めに移動する場合、速度を制限することができます。これにより、斜めの移動速度が他の方向の速度よりも速くならないようになります。
  4. 移動のベクトル分解:プレイヤーの移動ベクトルを分解し、水平方向の移動と垂直方向の移動を別々に処理することができます。これにより、斜めの移動速度が他の方向の速度と同じになります。

これらの方法を組み合わせることで、斜めの移動速度を調整することができます。

ベクトルの正規化サンプル

移動方向のベクトルを正規化する方法のサンプルコード

// 移動方向を示すベクトル
Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

// ベクトルを正規化
moveDirection.Normalize();

// 正規化されたベクトルを使用して移動する
transform.position += moveDirection * moveSpeed * Time.deltaTime;

上記のコードでは、まずInput.GetAxis()関数を使用して、水平方向と垂直方向の入力を取得します。次に、Vector3クラスを使用して、これらの値を移動方向のベクトルに結合します。

その後、Normalize()関数を使用して、移動方向のベクトルを正規化し、長さを1にします。最後に、正規化されたベクトルを使用して、移動速度moveSpeedをかけ、時間Time.deltaTimeを考慮した上で、現在の位置に加算することで、プレイヤーを移動させます。

このように、ベクトルを正規化することで、斜めの移動速度を他の方向の速度と同じにすることができます。

Unity,学習,小技バトル

Posted by hidepon