Unity

【Unity】Rigidbodyでの移動方法(MovePosition / 4種類のAddForce)

この記事について

この記事では Rigidbody を使ってオブジェクトを物理挙動で移動させる方法を解説します。Unityでは座標を直接変更するのではなく、Rigidbodyを通して「速度」や「力」を与えるのが基本です。

この記事でわかること

  • Rigidbodyの移動方法の使い分け
  • MovePositionで座標移動
  • AddForce + ForceModeで力を加えて動かす

Rigidbodyとは?

Rigidbodyについては以下の記事を参考にしてください。

Rigidbodyの移動方法の使い分け表

方法特徴質量の影響向いている用途
MovePosition指定座標へ補間して移動。衝突判定あり。無関係キャラクター移動、追従処理、カメラの追尾
AddForce (Force)継続的な力を加えて加速。自然な物理挙動。あり車の加速、風や重力の追加効果
AddForce (Impulse)一瞬の力を加える。瞬発的な動作。ありジャンプ、爆発、弾丸の衝撃
AddForce (VelocityChange)質量を無視して速度を直接変更。瞬間的。なしダッシュ、ノックバック、瞬間移動
AddForce (Acceleration)質量を無視して一定の加速を与える。なしジェット推進、持続的な浮遊

Rigidbodyをスクリプトで制御

MovePosition(座標を指定して移動)

MovePosition」はオブジェクトをターゲットの座標へ補間しながら移動させる方法です。衝突判定も効くため、キャラクターの移動や追従処理、カメラのスムーズな追尾などに向いています。

using UnityEngine;

public class Rigidbody_Move : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // 右に移動(1秒で1.0)
        Vector3 target = transform.position + Vector3.right * Time.fixedDeltaTime;
        rb.MovePosition(target);
    }
}

AddForce(4種類のForceMode)

物理的な力を加えることで移動させる方法です。加え方はForceModeで切り替えられます。

ForceMode.Force

ForceMode.Force」は継続的な力を与えて加速させるモードです。質量の影響を受けるため、車のアクセルや風の影響といった自然な物理挙動を再現するのに適しています。

rb.AddForce(Vector3.forward * 10f, ForceMode.Force);

ForceMode.Impulse

ForceMode.Impulse」は一瞬だけの力を与えるモードで、ジャンプや爆発、弾丸の衝撃といった瞬発的な動作に使います。質量の影響を受けるため、重さによる挙動の違いも表現できます。

rb.AddForce(Vector3.up * 5f, ForceMode.Impulse);

ForceMode.VelocityChange

ForceMode.VelocityChange」は質量を無視して速度を直接変化させます。瞬間的な移動やダッシュ、ノックバック処理に向いており、重量の大小に関係なく同じ効果が得られます。

rb.AddForce(Vector3.right * 3f, ForceMode.VelocityChange);

ForceMode.Acceleration

ForceMode.Acceleration」は質量を無視して一定の加速度を加えるモードです。ロケットの推進や浮遊するオブジェクトなど、持続的に加速を与えたいケースで利用されます。

rb.AddForce(Vector3.up * 1f, ForceMode.Acceleration);

まとめ

  • MovePosition → ターゲット座標に補間して移動
  • AddForce → 力を加えて物理的に自然な移動
  • ForceMode を切り替えることで「加速」「衝撃」「ダッシュ」など多彩に使える