ここではC#スクリプトからリジッドボディに力を加える方法について説明します。
※この記事で使用しているUnityのバージョン:Unity2019.1
力を加えるにはAddForceメソッドを使う
UnityではC#スクリプトからリジッドボディに力を加えるために「AddForce」メソッドが用意されています。使い方は簡単で、第一引数にベクトルを指定するだけです。
具体的にはStartメソッド等であらかじめRigidbodyを取得しておき、FixedUpdate内などで例えば
rigidBody.AddForce(Vector3.forward * 10);
のように呼び出して使えばOKです。
力の加え方の種類
それでAddForceメソッドの第二引数には力の加え方を指定することができます。力の加え方を指定する「ForceMode」には次の4種類があります。
- ForceMode.Force
- ForceMode.Acceleration
- ForceMode.Impulse
- 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 | 無視 | 瞬間的 |