Unityで3Dキャラクターを動かしたい。でも、CharacterControllerとRigidbody、どちらを使えばいいか分からない。
多くの学生が最初に悩むのが、この2つの違いです。
実は、用途に応じて使い分けることで、効率的に実装できます。
この記事では、3Dキャラクターの動かし方について、CharacterControllerとRigidbodyの違いを解説します。
✨ この記事でわかること
- CharacterControllerとRigidbodyの違い
- それぞれの使い分け方
- TPS/FPSの違い
- 実装例と調整のコツ

3Dキャラクターの移動は、ゲームの操作感に大きく影響します。まずは、CharacterControllerとRigidbodyの違いを理解しましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
CharacterControllerとRigidbodyの違い

3Dキャラクターを動かす方法には、主に2つあります。
- CharacterController:物理演算を使わず、直接移動を制御
- Rigidbody:物理演算を使い、物理的な挙動を再現
それぞれ、特徴が異なります。
CharacterControllerの特徴
操作感が良く、アクションゲーム向きです。
例えば、壁にぶつかる、段差を乗り越える、といった処理をUnityが自動で行ってくれるため、初心者でも「思った通りに動くキャラ」を簡単に作れます。
ただし、物理挙動は弱く、慣性や押される挙動は再現できません。
物理演算を使うので、慣性や摩擦、衝突のリアルな挙動を再現できます。
例えば、坂道で加速したり、他のオブジェクトに押されると吹き飛ぶ、といった自然な動きが可能です。
しかし、キー入力どおりに動かすのは難しく、段差で引っかかったり、操作が思い通りにならない場合があります。
まとめると、CharacterControllerは「操作感重視で簡単に動かしたいプレイヤーキャラクター向け」、Rigidbodyは「リアルな挙動を再現したいオブジェクトや敵向け」と言えます。
CharacterControllerを使った移動

CharacterControllerは、物理演算を使わずに移動を制御します。
操作感が良く、アクションゲームに適しています。
以下のコードで、基本的な移動ができます。
|
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using UnityEngine; public class PlayerController3D : MonoBehaviour { [SerializeField] private float moveSpeed = 5f; [SerializeField] private float jumpHeight = 2f; private CharacterController controller; private Vector3 velocity; private bool isGrounded; void Start() { controller = GetComponent<CharacterController>(); } void Update() { isGrounded = controller.isGrounded; if (isGrounded && velocity.y < 0) { velocity.y = 0f; } // 移動入力 float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector3 move = transform.right * horizontal + transform.forward * vertical; controller.Move(move * moveSpeed * Time.deltaTime); // ジャンプ if (Input.GetButtonDown("Jump") && isGrounded) { velocity.y += Mathf.Sqrt(jumpHeight * -3.0f * Physics.gravity.y); } // 重力 velocity.y += Physics.gravity.y * Time.deltaTime; controller.Move(velocity * Time.deltaTime); } } |
このコードで、WASDキーで移動、スペースキーでジャンプができます。
CharacterControllerは、自動的に地面との衝突を処理します。
isGroundedで接地判定も簡単に取得できます。

CharacterControllerは、物理演算を使わないので、操作感が良くなります。3Dアクションゲームでは、こちらがおすすめです。
Rigidbodyを使った移動

Rigidbodyは、物理演算を使い、物理的な挙動を再現します。
リアルな動きができますが、操作感はCharacterControllerほど良くありません。
以下のコードで、基本的な移動ができます。
|
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using UnityEngine; public class PlayerRigidbody : MonoBehaviour { [SerializeField] private float moveSpeed = 5f; [SerializeField] private float jumpForce = 10f; private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { // 移動入力 float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical"); Vector3 move = transform.right * horizontal + transform.forward * vertical; rb.velocity = new Vector3(move.x * moveSpeed, rb.velocity.y, move.z * moveSpeed); // ジャンプ if (Input.GetButtonDown("Jump") && isGrounded) { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); } } void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Ground")) { isGrounded = true; } } void OnCollisionExit(Collision collision) { if (collision.gameObject.CompareTag("Ground")) { isGrounded = false; } } } |
このコードで、Rigidbodyを使った移動ができます。
Rigidbodyは、物理演算を使うので、慣性や摩擦の影響を受けます。
リアルな動きができますが、操作感はCharacterControllerほど良くありません。
使い分けのポイント

CharacterControllerとRigidbodyは、用途に応じて使い分けます。
ただし、状況に応じて使い分けることが大切です。以下のような場面を参考にしてください。
- プレイヤーキャラクターで操作感を重視したい場合:ジャンプや移動を正確に制御したいアクションゲーム。CharacterControllerを使うと、壁や段差の接触を自動で処理してくれるので操作が安定します。
- 敵キャラクターやオブジェクトにリアルな物理挙動を入れたい場合:衝突で吹き飛ぶ、慣性で滑る演出を加えたいとき。Rigidbodyを使うと、物理演算で自然な動きが表現できます。
- 混合の場面:プレイヤーキャラクターはCharacterControllerで正確な操作感を維持し、敵や落下するオブジェクトはRigidbodyで物理挙動を入れると、ゲーム全体の動作が自然になります。
- 特殊な挙動が必要な場合:キャラクターが乗り物に乗る、スプリングで弾む演出など。Rigidbodyを一時的に併用することで、特殊な力学挙動を表現できます。
| CharacterControllerを使う場面 | Rigidbodyを使う場面 |
| アクションゲーム | 物理シミュレーション |
| 操作感を重視する場合 | リアルな動きが必要な場合 |
| プレイヤーキャラクター | 敵やオブジェクト |
基本的には、プレイヤーキャラクターにはCharacterController、敵やオブジェクトにはRigidbodyを使います。
状況に応じて柔軟に使い分けることが大切です。
TPSとFPSの違い

3Dゲームには、2つの視点があります。
- TPS(Third Person Shooter):プレイヤーの後ろから見る視点
- FPS(First Person Shooter):プレイヤーの視点で見る視点
TPSは、プレイヤーキャラクターが見えるので、操作しやすいです。
FPSは、プレイヤーの視点なので、没入感があります。
アクションゲームでは、TPSが一般的です。
FPSは、シューティングゲームなどで使われます。
カメラの設定

TPSカメラは、プレイヤーの後ろから見る視点です。
以下のコードで、基本的なTPSカメラができます。
|
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 26 27 28 29 |
using UnityEngine; public class TPSCamera : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private float distance = 5f; [SerializeField] private float height = 2f; [SerializeField] private float rotationSpeed = 2f; private float currentRotationX; private float currentRotationY; void LateUpdate() { // マウス入力でカメラを回転 currentRotationX += Input.GetAxis("Mouse X") * rotationSpeed; currentRotationY -= Input.GetAxis("Mouse Y") * rotationSpeed; currentRotationY = Mathf.Clamp(currentRotationY, -35f, 60f); // カメラの位置を計算 Quaternion rotation = Quaternion.Euler(currentRotationY, currentRotationX, 0); Vector3 direction = rotation * Vector3.back; Vector3 position = target.position + direction * distance + Vector3.up * height; transform.position = position; transform.LookAt(target.position + Vector3.up * height); } } |
このコードで、マウスでカメラを回転させ、プレイヤーの後ろから見る視点ができます。
distanceの値を変えると、カメラとプレイヤーの距離が調整できます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的な3Dキャラクター操作を学ぶには

ここまで、3Dキャラクターの動かし方について解説してきました。
ただし、実際のゲーム制作では、さらに多くの要素が必要になります。
アニメーション、エフェクト、UI、サウンドなど、全体を体系的に学ぶには、専門の講座が効率的です。
Unity入門の森では、3Dアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
3Dアクション制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

Unityで3Dキャラクターを動かす方法について解説しました。
要点のまとめ
- CharacterControllerは、操作感が良く、アクションゲームに適している
- Rigidbodyは、物理演算を使い、リアルな動きができる
- プレイヤーキャラクターにはCharacterController、敵やオブジェクトにはRigidbodyを使う
- TPSは、プレイヤーの後ろから見る視点で、操作しやすい
基本を押さえれば、あとは応用していくだけです。
まずは、ここで紹介したコードを実際に動かしてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント