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

3Dキャラクターの移動は、ゲームの操作感に大きく影響します。まずは、CharacterControllerとRigidbodyの違いを理解しましょう。
\あなたにピッタリのアクションゲーム制作講座を見つけよう!/
おすすめ第1位
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の横スクロールACTをスマホ化・広告実装まで対応。ゲームのリリースまでを見据えた実践的なカリキュラムで、作って終わりにならない一本です。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダ風の3Dアクションをスマホ対応で作れる入門講座。全16回で初心者でも3Dゲーム開発の基礎からしっかり習得できます。
3プラットフォーム対応
Unity FPSゲームの
作り方講座
FPS・VR・スマホの3プラットフォームに同時対応。1本作るだけで3つのゲームが完成する圧倒的なコスパが魅力の講座です。
あなたのオリジナルゲーム、今年こそ完成させませんか?
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の値を変えると、カメラとプレイヤーの距離が調整できます。
実践的な3Dキャラクター操作を学ぶには

ここまで、3Dキャラクターの動かし方について解説してきました。
ただし、実際のゲーム制作では、さらに多くの要素が必要になります。
アニメーション、エフェクト、UI、サウンドなど、全体を体系的に学ぶには、専門の講座が効率的です。
Unity入門の森では、3Dアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
3Dアクション制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
アクションゲームを作りたいなら!Unity入門の森のアクション制作講座で本格ゲーム開発に挑戦しよう
Unity入門の森には、横スクロール・3Dアクション・FPSまで幅広いアクションゲームを作れる講座が揃っています。作りたいジャンルや目標に合わせて選んでみてください。
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!スマホ化・広告実装まで対応した本格横スクロールACTを作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの市販ゲームに近い本格的なゲーム設計
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを開発できるようになる本格的な講座です。
ステージ選択・ボスの弱点システム・新武器ゲットというロックマン風のゲーム設計はもちろん、スマホ実機ビルド・AdMob広告実装(リワード・インタースティシャル)まで対応。作って終わりではなく、リリースして収益化するところまで学べます。
書籍や他のチュートリアルでは扱われていないリリースレベルの開発スキルを習得したい人に、自信を持っておすすめできる一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
ロックマン風の2Dアクションゲームをリリースまで作り上げよう
→ Unity 2Dアクションゲームの作り方講座を見てみる
広告収益まで視野に入れた実践スキルを今すぐ手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- 画像・動画・全ソースコード公開の充実したサポート
- アセットを使った実践的なゲーム開発手法が身につく
ゼルダ風3Dアクションゲームの作り方講座は、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを作りたい人におすすめの入門講座です。
3Dゲーム開発の基礎からスマホ化まで全16回でしっかり習得できます。画像・動画・全ソースコードを公開した丁寧な解説で、初めて3Dゲームに挑戦する人でも確実に完成まで到達できる構成です。
「3Dゲームはなんだか難しそう」と感じている人が最初の一歩を踏み出すのに最適な講座です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の第一歩を踏み出そう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
3D開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
Unity FPSゲームの作り方講座【全17回!FPS・VR・スマホの3プラットフォームを同時に作れる!】

- APEX・バトルフィールド風のFPSゲームをゼロから開発
- FPS・スマホ・VRの3プラットフォームに同時対応
- 書籍では学べないVR対応弓矢FPSのオリジナリティ高い開発手法
- 地上・空中の敵AIや弓矢チャージショットなど本格システムを実装
- 初心者でも安心の丁寧な解説と完成プロジェクトファイル付き
Unity FPSゲームの作り方講座は、APEX・バトルフィールド・Call of Dutyのような一人称視点のFPSゲームを作るための講座です。
弓矢を使ったオリジナリティの高いFPSをベースに、PC・スマホ・VRの3プラットフォームに同時対応した開発手法を全17回で習得できます。VR空間で弓を構えて矢を射るという高度なアクションの実装まで、書籍では学べないスキルが身につきます。
1本の講座でFPS・スマホ・VRを同時に作れるのはこの講座ならでは。3Dゲーム開発の幅を一気に広げたい中・上級者志望の方にもおすすめです。
FPS・スマホ・VRの3プラットフォームを同時に完成させる
1本作るだけで3つのゲームが完成する圧倒的な開発体験を手に入れよう
→ Unity FPSゲームの作り方講座を見てみる
書籍では学べないVR対応FPSで、一歩先の3Dゲーム開発スキルを今すぐ!
まとめ

Unityで3Dキャラクターを動かす方法について解説しました。
要点のまとめ
- CharacterControllerは、操作感が良く、アクションゲームに適している
- Rigidbodyは、物理演算を使い、リアルな動きができる
- プレイヤーキャラクターにはCharacterController、敵やオブジェクトにはRigidbodyを使う
- TPSは、プレイヤーの後ろから見る視点で、操作しやすい
基本を押さえれば、あとは応用していくだけです。
まずは、ここで紹介したコードを実際に動かしてみてください。
動かしながら理解を深めていくのが、上達への近道です。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント