【Unreal Engine】UE5のキャラ移動入門:Character Movement Componentの速度・ジャンプ・重力

作成: 2026-07-20

UEのCharacterが最初から動く理由と、その手触りを変える場所を図解。Max Walk Speed・Jump Z Velocity・Gravity Scale・Air Controlが体感を何で決めているか、Movement Modes、Set Actor Locationで動かしてはいけない理由まで。

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 で動かすと壊れる理由
  • 実践: もっさりした既定の移動を、キビキビしたアクションの手触りに変える

Sponsored

Characterは3つの部品の詰め合わせ

UEには動かせるものが2種類あります。 PawnCharacter です。Pawnは「プレイヤーが操作できる」というだけの素の入れ物で、歩き方は何も持っていません。Characterはそこに、人型を動かすための部品を最初から積んだものです。

Pawnに対して、Characterがカプセルコリジョン・スケルタルメッシュ・Character Movement Componentを最初から持っていることを示した分解図

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 HeightCapsule Radius で決まります。既定は半径34 / 半高88(つまり全高176cm)で、人間の身長に合わせてあります。当たり判定そのものの考え方は コリジョンの記事 を参照してください。

Sponsored

手触りを決める5つのパラメータ

CMCのパラメータは百以上ありますが、手触りに直結するのは次の5つです。

パラメータカテゴリクラス既定値決めていること
Max Walk SpeedWalking600.0地上での最高速度(cm/秒)
Max AccelerationGeneral2048.0最高速に達するまでの速さ
Braking Deceleration WalkingWalking2000.0入力を離してから止まるまでの速さ
Jump Z VelocityJumping / Falling420.0跳び上がる瞬間の上向きの速度
Air ControlJumping / Falling0.05空中で向きを変えられる度合い(0〜1)
5つのパラメータが、それぞれ移動のどの区間に効いているかを速度グラフ上で示した図

上の表は 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 にすると空中でも地上と同じように曲がれて、マリオ的な救済のある操作になります。

Sponsored

Movement Modesが切り替わる瞬間

CMCは常にどれか1つの Movement Mode にいます。詳細パネルの Default Land Movement Mode で初期値を決められますが、実行中はCMCが自動で切り替えています。

Walking・Falling・Flying・Swimmingの4モードと、床から離れる/着地する/水に入るという切り替わりの条件を示した状態遷移図
モード状態主な入り方
Walking床に接地して歩いている着地したとき
Falling空中にいる(ジャンプ中も落下中も)跳んだとき、床から外れたとき
Flying重力を受けず自由に動くSet Movement Mode で明示的に
Swimming水中。浮力が効くPhysics Volumeの Water Volume に入ったとき

ジャンプ中も落下中も同じ Falling です。この2つをモードで区別することはできないので、上昇中か下降中かを知りたいときは Velocity のZ成分の符号を見ます。

モードの切り替わりは、そのまま アニメーションの切り替え条件 になります。Animation Blueprintで「地上か空中か」を判定するとき、多くの場合 Is Falling(CMCの関数)を使います。この先は Anim BPのステートマシンの記事 へつながります。

Set Movement ModeFlying にすると、その瞬間から重力が無視されます。飛行やゴーストモード、デバッグ用の自由移動はこれで作れます。ただし Flyingのまま床の上に立たせても Walking には戻りません 。自分で Walking に戻す必要があります。

移動はAdd Movement Inputを通す

キャラクターを前に進めたいとき、真っ先に思いつくのは Set Actor Location です。これは動きますが、確実に壊れます。

Set Actor Locationが壁をすり抜け坂で浮くのに対し、Add Movement Inputが壁で止まり坂に沿うことを示した対比図
方法何が起きるか
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 LocationTeleport を組み合わせます。

Sponsored

実践:もっさりをキビキビに変える

メトロイドヴァニアの主人公、ベルトスクロールの喧嘩アクション、見下ろしARPGの近接戦。 ジャンルは違っても「操作が重い」と言われる原因は同じ場所 にあります。Third Personテンプレートの既定値は、汎用の見本として穏やかに調整されているため、アクション向けにはそのまま使えません。

ここでは既定の移動を、数字だけでキビキビした手触りに変え、さらにShiftダッシュを足します。

完成形

同じ高さまで跳んでも、滞空時間がおよそ半分になります。走り出しと停止が鋭くなり、Shiftを押している間だけ速度が上がります。

調整前後のジャンプ軌道を並べた図。同じ高さでも滞空時間が半分になり、走り出しと停止の立ち上がりが鋭くなる

再現条件

Third Personテンプレート で新規プロジェクトを作り、Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter を開きます。コンポーネントタブで CharacterMovement を選んだ状態で、詳細パネルの値を確認します。

テンプレートの初期状態は次のとおりです(ここが出発点)。

パラメータカテゴリ初期値
Max Walk SpeedWalking500.0
Max AccelerationGeneral Settings2048.0
Braking Deceleration WalkingWalking2000.0
Jump Z VelocityJumping / Falling700.0
Air ControlJumping / Falling0.35
Gravity ScaleGeneral Settings1.0

この状態でPlayすると、ジャンプの頂点はおよそ 2.5m 、跳んでから着地までおよそ 1.4秒 かかります。この1.4秒が「もっさり」の正体です。

さらに、ダッシュ用に次の変数をBP_ThirdPersonCharacterへ追加します。

変数名既定値用途
WalkSpeedFloat500.0通常時の速度
SprintSpeedFloat900.0ダッシュ中の速度

入力側は IA_Sprint(Value Type: Digital / Bool)を作り、IMC_DefaultLeft Shift に割り当てておきます。手順は Enhanced Inputの記事 と同じです。

手順1:数値を書き換える

詳細パネルで次のように変更します。

パラメータ変更前変更後狙い
Gravity Scale1.02.5落下を強くして滞空を縮める
Jump Z Velocity700.0900.0重力を上げた分の高さを取り戻す
Air Control0.350.6空中でも軌道を修正できるように
Max Acceleration2048.04096.0走り出しを鋭くする
Braking Deceleration Walking2000.04000.0停止のずるつきを消す

この5つだけで手触りが変わります。計算すると、頂点はおよそ 1.65m 、滞空はおよそ 0.73秒 です。高さは3分の2ほどに減りますが、時間は半分になります。 人が「重い」と感じているのは高さではなく時間 なので、ここを縮めるのが効きます。

手順2:Shiftダッシュを組む

イベントグラフに、次のノードを組みます。

IA_SprintのTriggeredとCompletedから、CharacterMovementのSet Max Walk Speedへつなぐノードグラフ図
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 VelocityVector LengthPrint String に流します。通常時は 500 付近、Shift中は 900 付近で頭打ちになれば成功です(Print Stringの使い方)。

うまくいかないときは、症状から切り分けます。

  • ジャンプの高さが変わらないGravity Scale を変えた後に Jump Z Velocity を戻し忘れている
  • Shiftを押しても速くならないIMC_DefaultIA_Sprint の割り当てが無いか、Set Max Walk Speedの Target が別のコンポーネントを指している
  • Shiftを離しても速いままCompleted ではなく Triggered にだけつないでいる
  • 空中で操作できないAir Control が既定の 0.05 のまま(テンプレート値の 0.35 に戻っていないか確認)
  • 走り出しは速いのに止まらないBraking Deceleration Walking だけ変え忘れている

ポイントは2つです。

  • 「重い」の正体は速度ではなく時間: 最高速を上げても、加速と減速と滞空が長ければ重いままです。まず Max AccelerationBraking Deceleration Walking、そして Gravity Scale を疑ってください
  • ダッシュは値の差し替えで足りる: 別の移動処理を書く必要はありません。CMCのプロパティを実行中に書き換えるだけで、加速も減速も接地判定もそのまま働きます。しゃがみ(Crouch / UnCrouch)も同じ考え方で、Max Walk Speed Crouched の値に切り替わるだけです

走る速度が決まったら、次は「その走りをどこから見せるか」です。三人称カメラの組み方は Spring Armの記事 へ続きます。

Sponsored

動かないときのチェック

移動まわりでよく詰まる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 TableData 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 は接地判定ごと飛ばしてしまう

いま作っているキャラクターは、跳んでから着地するまでに何秒かかっているでしょうか。まずはそこを測ってみてください。