リジッドボディに力を加える方法

ここではC#スクリプトからリジッドボディに力を加える方法について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

力を加えるにはAddForceメソッドを使う

UnityではC#スクリプトからリジッドボディに力を加えるために「AddForce」メソッドが用意されています。使い方は簡単で、第一引数にベクトルを指定するだけです。

具体的にはStartメソッド等であらかじめRigidbodyを取得しておき、FixedUpdate内などで例えば

rigidBody.AddForce(Vector3.forward * 10);

のように呼び出して使えばOKです。

力の加え方の種類

それでAddForceメソッドの第二引数には力の加え方を指定することができます。力の加え方を指定する「ForceMode」には次の4種類があります。

  1. ForceMode.Force
  2. ForceMode.Acceleration
  3. ForceMode.Impulse
  4. ForceMode.VelocityChange

デフォルトは1番のForceMode.Forceです。今回は次のようなC#スクリプトで各々がどのような動きをするかを確認してみました。

using UnityEngine;

public class AddForceTest : MonoBehaviour
{

  [SerializeField]
  float power = 10;

  Rigidbody rigidBody;

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

    void FixedUpdate()
    {
    rigidBody.AddForce(Vector3.right * power, ForceMode.Force);
    }
}

ForceMode.Force

上記スクリプトでの「power」の設定値は10です。リジッドボディの質量を考慮して、継続的に力を加えたいときに使います。

ForceMode.Acceleration

powerの設定値は10です(カメラを引き気味にして撮影しています)。わかりづらいですが徐々に加速しています。リジッドボディの質量を無視して、継続的に力を加える(=加速させる)ときに使います。

ForceMode.Impulse

powerの設定値は1です。10だと一瞬で画面外に飛んで行ってしまいました。爆発や衝突など、リジッドボディの質量を考慮して瞬間的に力を加えたいときに使います。

ForceMode.VelocityChange

powerの設定値は1です。こちらも10だと一瞬で画面外に飛んで行ってしまいました。リジッドボディの質量を無視して瞬間的に速度を変更したいときに使います。

ForceModeの違いまとめ

上記のForceModeの違いをまとめると下の表のようになります。

ForceMode 質量を考慮するか? 力の加え方
ForceMode.Force 考慮 継続的
ForceMode.Acceleration 無視 継続的
ForceMode.Impulse 考慮 瞬間的
ForceMode.VelocityChange 無視 瞬間的