Rigidbody コンポーネントへの参照をスクリプトから取得し、力(Force)を加えてオブジェクトを動かす方法を学びます。キーボード入力と組み合わせることで、プレイヤーキャラクターの移動制御を実装できます。
このページを読み終えると、以下のことができるようになります。
Start でコンポーネントをキャッシュして Update で使うパターンを使えるRigidbody.AddForce() でオブジェクトに力を加えられるメニューバーの GameObject → Create Empty を選択し、空のゲームオブジェクトを作成してスクリプトを追加してください。

追加したスクリプトの、Start メソッドで球体を生成して Rigidbody コンポーネントを追加しましょう。AddComponent メソッドは追加したコンポーネントを結果として返すので、これをフィールドに保持しておくことで、後続の Update では毎フレーム再取得せずに物理操作に使えます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using UnityEngine;
using UnityEngine.InputSystem;
public class Sample : MonoBehaviour
{
private Rigidbody _rigidbody; // ← フィールドに保存
private void Start()
{
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
_rigidbody = sphere.AddComponent<Rigidbody>(); // 追加したコンポーネントをフィールドに保存
}
private void Update()
{
// _rigidbody を使って毎フレーム処理
}
}
この時点で物理が有効になるので、球体は重力によって落ちていくはずです。
💡 ポイント:
GetComponentは毎フレーム呼ぶとパフォーマンスへの影響が積み重なります。Startで取得してフィールドに持っておきましょう。
Rigidbody コンポーネントの AddForce() メソッドで、オブジェクトに力を加えられます。加えた力は物理エンジンによって自動的に速度・移動に変換されます。
Rigidbody.AddForce() — Rigidbody に力を加えます。
書式:Rigidbody.AddForce メソッド
1
public void AddForce(Vector3 force);
| パラメータ | 説明 |
|---|---|
force |
加える力の方向と大きさ(Vector3) |
Vector3 は X・Y・Z の3方向の値を持つ構造体です(Transform ページで解説済み)。たとえば new Vector3(1, 0, 0) は X 軸方向に 1 の力を意味します。
Input System のキー入力と AddForce を組み合わせると、キーボードでオブジェクトを動かせます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
using UnityEngine.InputSystem;
public class Sample : MonoBehaviour
{
private Rigidbody _rigidbody;
private void Start()
{
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
_rigidbody = sphere.AddComponent<Rigidbody>();
}
private void Update()
{
var move = Vector3.zero;
if (Keyboard.current.rightArrowKey.isPressed) move.x += 1f;
if (Keyboard.current.leftArrowKey.isPressed) move.x -= 1f;
if (Keyboard.current.upArrowKey.isPressed) move.y += 1f;
if (Keyboard.current.downArrowKey.isPressed) move.y -= 1f;
_rigidbody.AddForce(move);
}
}
move は Vector3.zero(全方向ゼロ)から始まり、押されているキーに応じて X または Y 方向の値を足しています。最終的に AddForce に渡すと、その方向に力が加わります。
球体は重力によって Y 軸のマイナス方向に重力加速度がかかり続けます。上キーを押し続けることで、これを打ち消して上方向に持ち上げることができます。
Player にするPlayer スクリプトを作成してアタッチする(またはそのまま Sphere にアタッチ)GetComponent<T>() で Inspector から追加されたコンポーネントの参照を取得できるGetComponent は Start で一度だけ呼び、フィールドに保存しておくAddForce(Vector3) でオブジェクトに力を加えて物理的に移動させられるVector3 の組み立て → AddForce の流れで自然な移動操作を実現できるGetComponent<T>() を Update ではなく Start で呼ぶ理由は何ですか?AddForce(new Vector3(0, 0, 1)) はどの方向に力を加えますか?GetComponent はコストのかかる処理で、毎フレーム呼ぶとパフォーマンスへの影響が積み重なるため。Start で一度だけ取得してフィールドに保持する。Collider とトリガー判定 では、オブジェクト同士が重なったことをスクリプトで検知する方法を学びます。