この記事について
この記事では 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 を切り替えることで「加速」「衝撃」「ダッシュ」など多彩に使える