Third Personテンプレートを開くと、キャラクターはもうWASDで走り、スペースで跳びます。ところが「もう少し速くしたい」「ジャンプが浮きすぎている」と思ったとき、どこを触ればいいのか分かりません。Blueprintのイベントグラフを見ても、速度の数字はどこにも書かれていません。
数字は Character Movement Component という部品の中にあります。Characterクラスに最初から付いていて、接地判定も、坂の登り降りも、落下も、この1つが担当しています。この記事では、この部品の主要パラメータが手触りの何を決めているか、Movement Modesの切り替わり方、そして Add Movement Input を使うべき理由を解説します。
この記事でわかること
- Characterは カプセル + メッシュ + Character Movement Component の詰め合わせ
- Max Walk Speed / Jump Z Velocity / Gravity Scale / Air Control がそれぞれ決めていること
- Movement Modes(Walking / Falling / Flying / Swimming)が切り替わる瞬間
Set Actor Locationで動かすと壊れる理由- 実践: もっさりした既定の移動を、キビキビしたアクションの手触りに変える
Characterは3つの部品の詰め合わせ
UEには動かせるものが2種類あります。 Pawn と Character です。Pawnは「プレイヤーが操作できる」というだけの素の入れ物で、歩き方は何も持っていません。Characterはそこに、人型を動かすための部品を最初から積んだものです。

Characterに最初から入っているのは3つです。
| 部品 | 名前 | 役割 |
|---|---|---|
| 当たり判定 | CapsuleComponent | 世界とぶつかる本体。この筒の位置がキャラの位置 |
| 見た目 | Mesh(Skeletal Mesh) | 表示されるモデル。カプセルにぶら下がっているだけ |
| 動き | CharacterMovement | 歩く・跳ぶ・落ち るの全処理 |
大事なのは、 世界とぶつかっているのはカプセルであって、メッシュではない ことです。見た目のモデルは、カプセルに追従して表示されているだけです。「見た目は壁に刺さっていないのに止まる」「腕が壁をすり抜ける」といった現象は、この構造で起きています。
そして移動そのものを担当するのが Character Movement Component (以下CMC)です。CMCを選ぶと、詳細パネルに大量のカテゴリが出てきます。
Character Movement: Walking(地上の移動)Character Movement: Jumping / Falling(ジャンプと落下)Character Movement (General Settings)(重力など全体)Character Movement: Swimming/Flying/Nav Movement
最初に触るのは、上の3つだけで十分です。
補足: カプセルの太さと高さは
Capsule Half HeightとCapsule Radiusで決まります。既定は半径34 / 半高88(つまり全高176cm)で、人間の身長に合わせてあります。当たり判定そのものの考え方は コリジョンの記事 を参照してください。
手触りを決める5つのパラメータ
CMCのパラメータは百以上ありますが、手触りに直結するのは次の5つです。
| パラメータ | カテゴリ | クラス既定値 | 決めていること |
|---|---|---|---|
| Max Walk Speed | Walking | 600.0 | 地上での最高速度(cm/秒) |
| Max Acceleration | General | 2048.0 | 最高速に達するまでの速さ |
| Braking Deceleration Walking | Walking | 2000.0 | 入力を離してから止まるまでの速さ |
| Jump Z Velocity | Jumping / Falling | 420.0 | 跳び上がる瞬間の上向きの速度 |
| Air Control | Jumping / Falling | 0.05 | 空中で向きを変えられる度合い(0〜1) |

上の表は CMCクラスそのものの既定値 です。Third Personテンプレートの BP_ThirdPersonCharacter はこれを一部上書きしているので、実際の値は詳細パネルで確認してください。
速度は3つの数字で決まる
「速さ」を1つの数字だと思っていると、調整がうまくいきません。実際は3つに分かれています。
- Max Walk Speed は上限だけを決めます。ここを上げても、加速が遅ければ短い距離では速く感じません
- Max Acceleration は上限に達するまでの立ち上がりです。ここが低いと、走り出しがもったりします
- Braking Deceleration Walking は止まるときの効きです。ここが低いと、キーを離してからずるずる滑ります
アクションゲームで「キビキビしている」と感じるのは、たいてい後ろ2つが高い状態です。逆に、氷の床やレースゲームの滑る挙動は、この2つを下げて作れます。
ジャンプは高さと滞空を分けて考える
ジャンプで一番よくある誤解が、 Jump Z Velocity を下げれば「重い」ジャンプになる というものです。実際には高さが下がるだけで、浮いている感じは変わりません。
跳び上がる速度と重力の関係は、次の2つで決まります。
- 頂点の高さ =
Jump Z Velocityの2乗 ÷(2 × 重力) - 滞空時間 =
Jump Z Velocity÷ 重力 × 2
重力はWorld Settingsの -980(cm/秒²)に、CMCの Gravity Scale を掛けた値です。つまり Gravity Scale を上げると、高さも滞空も一緒に縮みます 。高さを保ったまま滞空だけ縮めたいなら、Gravity Scaleを上げて、その分 Jump Z Velocity も上げます。
| やりたいこと | 触るところ |
|---|---|
| もっと高く跳びたい | Jump Z Velocity を上げる |
| 浮遊感を消したい(キビキビ) | Gravity Scale を上げ、Jump Z Velocity も上げて高さを戻す |
| ふわふわさせたい(月面) | Gravity Scale を下げる |
| 空中で操作したい | Air Control を上げる(0.05は「ほぼ効かない」設定) |
Air Control は、空中にいる間に入力がどれだけ効くかの割合です。 0 にすると跳んだ瞬間の軌道が完全に固定され、昔ながらの硬い操作感になります。 1.0 にすると空中でも地上と同じように曲がれて、マリオ的な救済のある操作になります。
Movement Modesが切り替わる瞬間
CMCは常にどれか1つの Movement Mode にいます。詳細パネルの Default Land Movement Mode で初期値を決められますが、実行中はCMCが自動で切り替えています。

| モード | 状態 | 主な入り方 |
|---|---|---|
| Walking | 床に接地して歩いている | 着地したとき |
| Falling | 空中にいる(ジャンプ中も落下中も) | 跳んだとき、床から外れたとき |
| Flying | 重力を受けず自由に動く | Set Movement Mode で明示的に |
| Swimming | 水中。浮力が効く | Physics Volumeの Water Volume に入ったとき |
ジャンプ中も落下中も同じ Falling です。この2つをモードで区別することはできないので、上昇中か下降中かを知りたいときは Velocity のZ成分の符号を見ます。
モードの切り替わりは、そのまま アニメーションの切り替え条件 になります。Animation Blueprintで「地上か空中か」を判定するとき、多くの場合 Is Falling(CMCの関数)を使います。この先は Anim BPのステートマシンの記事 へつながります。
Set Movement Mode で Flying にすると、その瞬間から重力が無視されます。飛行やゴーストモード、デバッグ用の自由移動はこれで作れます。ただし Flyingのまま床の上に立たせても Walking には戻りません 。自分で Walking に戻す必要があります。
移動はAdd Movement Inputを通す
キャラクターを前に進めたいとき、真っ先に思いつくのは Set Actor Location です。これは動きますが、確実に壊れます。

| 方法 | 何が起きるか |
|---|---|
Set Actor Location | 位置を 強制的に書き換える 。壁の中にも入れる。坂を無視して水平に進む。床に立っていてもFallingのままになる |
Add Movement Input | 「この方向へ進みたい」という 要求を積む 。実際に動かすのはCMCで、壁・坂・段差・重力を全部処理してくれる |
Add Movement Input は毎フレーム呼ばれることを前提にした関数で、引数は3つです。
| 引数 | 意味 |
|---|---|
| World Direction | 進みたい方向のベクトル(ワールド座標) |
| Scale Value | その方向への入力の強さ。アナログスティックなら 0〜1 |
| Force | チェックすると入力の無効化設定を無視する。通常はオフのまま |
積まれた要求はフレームの最後にCMCが受け取り、加速・最高速・摩擦・接地判定を通したうえで実際の移動に変換します。 壁で止まるのも、坂を登れるのも、段差に乗り上げるのも、この経路を通っているからです 。
Third Personテンプレートでは、World Directionを「カメラの向きを基準にした前方向」から作っています。そのため カメラを右に回してWを押すと、キャラは画面の奥へ進みます 。この「カメラ基準」の仕組みは Spring Armの記事 で詳しく扱います。入力の受け取り方そのものは Enhanced Inputの記事 を参照してください。
補足: ノックバックや爆風で吹き飛ばしたいときは
Launch Characterを使います。速度を直接与える関数で、そのままFallingへ入ります。ワープや強制移動など、物理を無視して本当に位置だけ変えたい場面ではSet Actor LocationにTeleportを組み合わせます。
実践:もっさりをキビキビに変える
メトロイドヴァニアの主人公、ベルトスクロールの喧嘩アクション、見下ろしARPGの近接戦。 ジャンルは違っても「操作が重い」と言われる原因は同じ場所 にあります。Third Personテンプレートの既定値は、汎用の見本として穏やかに調整されているため、アクション向けにはそのまま使えません。
ここでは既定の移動を、数字だけでキビキビした手触りに変え、さらにShiftダッシュを足します。
完成形
同じ高さまで跳んでも、滞空時間がおよそ半分になります。走り出しと停止が鋭くなり、Shiftを押している間だけ速度が上がります。

再現条件
Third Personテンプレート で新規プロジェクトを作り、Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter を開きます。コンポーネントタブで CharacterMovement を選んだ状態で、詳細パネルの値を確認します。
テンプレートの初期状態は次のとおりです(ここが出発点)。
| パラメータ | カテゴリ | 初期値 |
|---|---|---|
| Max Walk Speed | Walking | 500.0 |
| Max Acceleration | General Settings | 2048.0 |
| Braking Deceleration Walking | Walking | 2000.0 |
| Jump Z Velocity | Jumping / Falling | 700.0 |
| Air Control | Jumping / Falling | 0.35 |
| Gravity Scale | General Settings | 1.0 |
この状態でPlayすると、ジャンプの頂点はおよそ 2.5m 、跳んでから着地までおよそ 1.4秒 かかります。この1.4秒が「もっさり」の正体です。
さらに、ダッシュ用に次の変数をBP_ThirdPersonCharacterへ追加します。
| 変数名 | 型 | 既定値 | 用途 |
|---|---|---|---|
WalkSpeed | Float | 500.0 | 通常時の速度 |
SprintSpeed | Float | 900.0 | ダッシュ中の速度 |
入力側は IA_Sprint(Value Type: Digital / Bool)を作り、IMC_Default で Left Shift に割り当てておきます。手順は Enhanced Inputの記事 と同じです。
手順1:数値を書き換える
詳細パネルで次のように変更します。
| パラメータ | 変更前 | 変更後 | 狙い |
|---|---|---|---|
| Gravity Scale | 1.0 | 2.5 | 落下を強くして滞空を縮める |
| Jump Z Velocity | 700.0 | 900.0 | 重力を上げた分の高さを取り戻す |
| Air Control | 0.35 | 0.6 | 空中でも軌道を修正できるように |
| Max Acceleration | 2048.0 | 4096.0 | 走り出しを鋭くする |
| Braking Deceleration Walking | 2000.0 | 4000.0 | 停止のずるつきを消す |
この5つだけで手触りが変わります。計算すると、頂点はおよそ 1.65m 、滞空はおよそ 0.73秒 です。高さは3分の2ほどに減りますが、時間は半分になります。 人が「重い」と感じているのは高さではなく時間 なので、ここを縮めるのが効きます。
手順2:Shiftダッシュを組む
イベントグラフに、次のノードを組みます。

Event: EnhancedInputAction IA_Sprint
├ [Triggered] → Set Max Walk Speed
│ Target: Character Movement(コンポーネントから引き出す)
│ Max Walk Speed: SprintSpeed(900.0)
│
└ [Completed] → Set Max Walk Speed
Target: Character Movement
Max Walk Speed: WalkSpeed(500.0)
Set Max Walk Speed は、コンポーネントタブの CharacterMovement をイベントグラフへドラッグし、そこから引き出して検索すると出てきます。専用のノードではなく、プロパティの設定ノードです。
Triggered はキーを押している間ずっと発火し、Completed は離した瞬間に1回だけ発火します。押しっぱなしで何度 Set Max Walk Speed が呼ばれても、同じ値を入れ直すだけなので問題ありません。
確認する
Playして、次の3点を見てください。
- ジャンプの 着地までが体感で半分 になり、跳ねた後すぐ次の操作に移れる
- Wを押した瞬間から最高速までがほぼ一瞬になり、離すとほとんど滑らずに止まる
- Shiftを押すと目に見えて速くなり、離すと元に戻る
数字で確かめたいときは、イベントグラフで Get Velocity → Vector Length を Print String に流します。通常時は 500 付近、Shift中は 900 付近で頭打ちになれば成功です(Print Stringの使い方)。
うまくいかないときは、症状から切り分けます。
- ジャンプの高さが変わらない →
Gravity Scaleを変えた後にJump Z Velocityを戻し忘れている - Shiftを押しても速くならない →
IMC_DefaultにIA_Sprintの割り当てが無いか、Set Max Walk Speedの Target が別のコンポーネントを指している - Shiftを離しても速いまま →
CompletedではなくTriggeredにだけつないでいる - 空中で操作できない →
Air Controlが既定の0.05のまま(テンプレート値の0.35に戻っていないか確認) - 走り出しは速いのに止まらない →
Braking Deceleration Walkingだけ変え忘れている
ポイントは2つです。
- 「重い」の正体は速度ではなく時間: 最高速を上げても、加速と減速と滞空が長ければ重いままです。まず
Max AccelerationとBraking Deceleration Walking、そしてGravity Scaleを疑ってください - ダッシュは値の差し替えで足りる: 別の移動処理を書く必要はありません。CMCのプロパティを実行中に書き換えるだけで、加速も減速も接地判定もそのまま働きます。しゃがみ(
Crouch/UnCrouch)も同じ考え方で、Max Walk Speed Crouchedの値に切り替わるだけです
走る速度が決まったら、次は「その走りをどこから見せるか」です。三人称カメラの組み方は Spring Armの記事 へ続きます。
動かないときのチェック
移動まわりでよく詰まる4つを、原因ごとにまとめます。
| 症状 | 見るところ |
|---|---|
| 坂を登れず滑り落ちる | Walkable Floor Angle(既定 45.0 度)。これより急な面は床として扱われず、Fallingになります |
| 小さな段差で止まる | Max Step Height(既定 45.0)。この高さまでは自動で乗り上げますが、超えると壁扱いです |
| 空中で全く曲がれない | Air Control。クラス既定の 0.05 はほぼ効きません |
| ジャンプできない | Can Jump の条件。既にFallingだと跳べません。多段ジャンプは Jump Max Count を2以上に |
Walkable Floor Angle を上げると急な坂も歩けるようになりますが、上げすぎると 壁をよじ登れてしまいます 。50〜55度あたりが上限の目安です。
段差が引っかかるときは、まず階段の形を疑ってください。ランプ(スロープ)を1枚敷くだけで解決することも多く、Max Step Height を極端に上げるより安全です。
おまけ:先に知っておくと良いこと
- キャラの回転はCMCとPawnで分かれている: 進行方向へ体を向けるのは CMCの
Orient Rotation to Movement、カメラの向きに体を合わせるのは Pawn側のUse Controller Rotation Yawです。両方オンにすると競合します(→ Spring Armの記事) - 回転の速さは Rotation Rate:
Orient Rotation to Movementがオンのとき、向き直る速さはRotation RateのZ(Yaw)で決まります。テンプレートは500.0で、上げるほどキビキビ振り向きます。移動と関係なく向きを制御したいとき(砲塔、監視カメラ、頭だけ向ける)は、Componentに任せず自分で回します → 回転と補間の基礎 - 数値はデータで持つと調整が早い: 速度やジャンプ力を Data Table や Data Asset に逃がすと、キャラごとの差分を表で管理できます
- 移動処理をTickに書かない:
Add Movement Inputは入力イベントから呼べば十分です。毎フレームの独自処理を足す前に Tickを減らす設計 を確認してください - CMCはマルチプレイを前提に作られている: そのぶん処理は重めですが、位置の同期や補正が最初から入っています。
Set Actor Locationで自作すると、この恩恵をすべて失います - CMCには後継が用意されつつある:
Moverというプラグインがあり、Epicは将来これがCMCを置き換えると説明しています。ただし現時点ではまだ仕様が変わりうる段階で、実績もCMCのほうが圧倒的です。 いまはCMCで作って構いません 。ここで覚える「上限・加速・制動の3つで速さが決まる」「Movement Modeで状態が変わる」「入力は要求として積む」という考え方は、移行することになってもそのまま通用します
まとめ
- Characterは カプセル + メッシュ + CMC の詰め合わせ。世界とぶつかっているのはカプセル
- 速さは Max Walk Speed / Max Acceleration / Braking Deceleration Walking の3つに分かれている
- ジャンプは 高さと滞空を分けて考える 。滞空だけ縮めるなら
Gravity Scaleを上げてJump Z Velocityも上げる - Movement Modeは自動で切り替わる 。ジャンプ中も落下中も同じ Falling
- 移動は必ず
Add Movement Inputを通す。Set Actor Locationは接地判定ごと飛ばしてしまう
いま作っているキャラクターは、跳んでから着地するまでに何秒かかっているでしょうか。まずはそこを測ってみてください。