【Unreal Engine】UE5のキャラ移動入門:走り出し・ジャンプ・Shiftダッシュを調整する

作成: 2026-07-20最終更新: 2026-09-05

Character Movementで移動の遊び心地を整える入門記事。速度と加速の違い、ジャンプの高さと滞空時間、空中操作を整理し、白い練習用キャラクターでShiftダッシュまで試します。

WASDで歩き、スペースで跳べるようになったら、次は動かしていて気持ちのよいキャラクターにしてみましょう。「走り出しを素早くしたい」「ジャンプの高さは好きだけれど、着地までが長い」。この2つでは、変える設定が違います。

Characterには、歩行やジャンプを担当する Character Movement Component が最初から付いています。この記事では、この部品の設定を一つずつ変え、画面の動きと結び付けます。最後に、Shiftを押している間だけ速く走るダッシュを加えます。

この記事でわかること

  • 速度の上限、加速、止まり方を分けて調整する方法
  • ジャンプの高さと滞空時間を、一緒に考える理由
  • WalkingとFalling、地上と空中での操作の違い
  • 練習用キャラクターにShiftダッシュを付ける手順
キャラクターの走り出し、ジャンプ、Shiftダッシュを調整する

Sponsored

Characterの移動を担当する部品

Pawnは、プレイヤーやAIに操作されるActorの土台です。CharacterはPawnを引き継ぎ、人型キャラクターなどの歩行に必要な部品を組み合わせたクラスです。

他のエンジンでいうと: Character は Unity の CharacterController を付けた GameObject、Godot の CharacterBody3D に当たります。歩行・ジャンプ・斜面の扱いが最初から入っている点も同じです。

部品移動での役割
CapsuleComponent身体を包むカプセル形の当たり判定。床や壁との接触に使う
Mesh身体の見た目。人型モデルやアニメーションを表示する
Character Movement入力を受け取り、加速・歩行・ジャンプ・落下などを処理する
Capsuleが当たり判定、Meshが見た目、Character Movementが移動を担当する

カプセルが壁へ触れると、表示用のモデルも一緒に止まります。見た目を細かい人型にしても、通常の歩行ではカプセルで身体の通れる場所を調べます。見た目と判定の形を分ける考え方は、当たり判定の基礎で確認できます。

入力は「進みたい方向」として渡す

Wキーを押したとき、Add Movement Inputへ進みたい方向と入力の強さを渡します。Character Movementがその入力を受け取り、実際にどのように動くかを計算します。

入力した方向と強さをCharacter Movementへ渡し、加速や床の判定を任せる

World Directionは、ステージ全体の基準で表した向きです。通常は長さ1の方向を渡し、Scale Valueで強さを指定します。たとえばScale Valueが1ならその方向へ、-1なら逆方向へ進む入力になります。

ここで渡しているのは移動距離ではありません。前のフレームからの経過秒数を表すDelta Secondsを、Scale Valueへさらに掛ける必要はありません。Characterの移動部品が時間の経過を考慮します。

一方、Set Actor Locationは「この位置へ置く」という直接の指示です。ワープには使えますが、毎フレーム位置を書くだけで、歩行の加速や段差の処理まで作れるわけではありません。普段の歩行はAdd Movement Inputへ任せると、これから調整する設定が働きます。

速さ・走り出し・止まり方を分ける

キャラクターのBlueprintを開き、コンポーネント一覧の「Character Movement」を選びます。詳細パネルの検索欄へ項目名を入れると、目的の設定を探せます。

最初に、次の3つを区別しましょう。

項目何を決めるか大きくしたとき
Max Walk Speed歩行速度の上限十分に加速した後、速く進める
Max Acceleration入力に応じて速度を増やす強さ走り出しで速度が上がりやすい
Braking Deceleration Walking歩行中、入力をやめたときなどの減速の強さ止まりやすくなる

速度は「1秒でどれだけ進むか」、加速度は「1秒あたりに速度がどれだけ変わるか」 です。UEでは通常、距離はcmです。Max Walk Speed=500なら上限は毎秒500cm、つまり毎秒5mです。

上限を900にしても、その瞬間に毎秒9mで走り始めるとは限りません。加速が緩やかなら、速くなるまでに時間がかかります。「最高速は十分なのに、押してすぐ動いた感じがしない」ときは、Max Accelerationも見ます。

速さの上限、走り出しの加速、停止時の減速は別々の設定で調整する

地面の摩擦も、曲がり方と止まり方に効く

Ground Frictionは、地上での方向転換などに効く摩擦の設定です。値が大きいほど、入力した方向へ進む向きを変えやすくなります。身体の見た目を回す設定とは別です。

「Use Separate Braking Friction」がオフの場合、停止時にもGround Frictionを使い、Braking Friction Factorを掛けた摩擦で減速します。そのため、Braking Deceleration Walkingだけを小さくしても、すぐに氷の床のようになるとは限りません。

最初の練習では摩擦を固定し、上限・加速・減速の違いを比べます。何が効いたか分かってから、滑る床などへ応用すると調整しやすくなります。

ジャンプは高さと時間の両方を見る

ジャンプでは、高さに加え、滞空時間(跳んでから着地するまでの時間) も操作の印象を変えます。主に次の設定が関わります。

項目役割
Jump Z Velocity跳び出すときの上向きの速度
Gravity Scaleこのキャラクターに掛かる重力の倍率
Air Control空中で、横方向の入力をどれだけ動きへ反映するか

通常の重力では、Zが上下方向です。Jump Z Velocityで上へ跳び出し、重力によって上向きの速度が小さくなり、頂点を過ぎると落下します。

Gravity Scaleだけを上げると、着地までの時間が短くなり、到達する高さも下がります。 高さを保ちたいなら、Jump Z Velocityも一緒に上げます。

たとえば、地球上に近い下向きの重力で比べると、次の目安になります。実践では、この比較に使う重力の値もそろえます。

比較Jump Z VelocityGravity Scale上がる高さの目安同じ高さへ戻るまで
A:基準7001約250cm約1.43秒
B:重力だけ2倍7002約125cm約0.71秒
C:跳び出す速度も上げる10002約255cm約1.02秒
重力だけを増やすと低く短いジャンプになり、跳び出す速度も上げると高さを戻せる

CはAとほぼ同じ高さへ跳び、早く着地する組み合わせです。Bのように低く短く跳ぶ動きも、狭い足場を素早く渡るゲームなどでは候補になります。どちらがよいかは、遊ばせたい場面で比べます。

この表は、長押しによるジャンプ延長がなく、天井や別の力の影響を受けない場合の計算上の目安です。ゲーム内では床との接触や更新の刻みなどで差が出ます。

Air Controlは、着地点の修正に使う

Air Controlを小さくすると、空中で横へ動かそうとした入力が効きにくくなります。大きくすると、跳んだ後にも着地点を修正しやすくなります。

これは上へ跳ぶ強さではありません。また、0でも壁への接触などで軌道は変わるため、「何があっても同じ軌道を飛ぶ」という意味ではありません。

同じジャンプで、跳んだ後にDやAを押してみます。高さを変えずに、空中でどこまで横へ寄せられるかを比べると、役割が分かります。

WalkingとFalling:今どのように動くか

Character Movementは、Movement Modeという「現在の移動方法」 を持っています。普段の歩行とジャンプでは、主に2つを行き来します。

  • Walking:歩ける床の上を移動する。
  • Falling:床を離れ、重力の影響を受けながら移動する。

ジャンプで上昇している間もFallingです。 名前は「落下」ですが、下降だけを表しているわけではありません。ジャンプや崖からの踏み外しでFallingになり、歩ける床へ着地するとWalkingへ戻ります。

Walkingからジャンプや踏み外しでFallingになり、歩ける床に着地するとWalkingに戻る

飛行用のFlying、水中用のSwimmingなどもあります。FlyingはSet Movement Modeなどで切り替える必要があり、モードを変えるだけで上下の操作まで追加されるわけではありません。まずはWalkingとFallingを理解してから、別の移動方法を足していきましょう。

Sponsored

実践:移動を調整して、Shiftダッシュを付ける

Enhanced Input入門で作った、白い直方体のBP_InputPracticeを使います。WASD移動とジャンプが動くところから始めます。GameModeとPlayerStartも同記事の設定を使い、キャラクターを追加で手配置しません。

この練習では、身体の見た目に追加のStatic MeshであるBodyを使っています。最初から付いているMeshは空のままでも、CapsuleとCharacter Movementで移動を試せます。

比較用に、十分な広さの平らな床を使います。動きを観察しやすいよう、近くに目印の箱を置いておくと便利です。練習中はFキーによる操作モードの切り替えを使わず、通常の移動入力を有効にしておきます。

1. 比較の出発点をそろえる

BP_InputPracticeでCharacter Movementを選び、次の値にします。テンプレートの既定値ではなく、今回の比較用の値です。

項目
Max Walk Speed500
Max Acceleration2048
Braking Deceleration Walking2000
Ground Friction8
Braking Friction Factor2
Use Separate Braking Frictionオフ
Jump Z Velocity700
Gravity Scale1
Air Control0.2

「Class Defaults」のJump Max Hold Timeは0、Jump Max Countは1にします。長押しの延長や2段ジャンプを加えず、1回のジャンプで比較するためです。

重力の比較では、「プロジェクト設定」→「Physics」のDefault Gravity Zを-980にし、レベルのWorld SettingsでOverride World Gravityがオフであることを確認します。通常の下向き重力を使い、練習用プロジェクトで試してください。

コンパイル・保存してPlayし、Wを押す、離す、ジャンプする、という順で元の動きを覚えます。

2. 走り出しと停止を変える

Playを止め、Max Accelerationを4096へ変えます。ほかはそのままで再びPlayし、押した直後の動きを比べます。最高速は500のままですが、そこへ到達するまでが変わります。

続いてBraking Deceleration Walkingを4000へ変え、Wを離した後の止まり方を比べます。摩擦も効いているので、変化が小さい場合もあります。最高速を上げる前に、発進と停止を別々に触るのがこの練習の目的です。

3. ジャンプを3通りで比べる

Playを止めて値を変え、A→B→Cの順で試します。

  1. Jump Z Velocity=700、Gravity Scale=1で、その場から1回跳ぶ。
  2. Jump Z Velocityは700のまま、Gravity Scale=2にする。低く、短いジャンプになるか見る。
  3. Gravity Scaleは2のまま、Jump Z Velocity=1000にする。高さがAに近づき、着地はAより早いか見る。

同じ床で、移動キーを押さずに跳びます。低い天井があると途中でぶつかるため、上に十分な空間を確保します。最後は好みの組み合わせを残してください。

空中操作も試したければ、Air Controlを0と0.5で比較します。跳んでから横入力を入れ、着地点をどれだけ修正できるかを観察します。ほかの値は固定したままにします。

4. Shift用の入力を追加する

InputPracticeフォルダへInput ActionのIA_Sprintを作り、Value TypeをDigital (Bool)にします。ModifiersとTriggersは空のままにします。

通常移動用のIMC_PlayerControlsを開き、MappingsへIA_Sprintを追加してLeft Shiftを割り当てます。このIMCはEnhanced Input入門で有効にしているので、同じものへ追加します。

BP_InputPracticeのイベントグラフへIA_Sprintのイベントを置きます。Character Movementをコンポーネント一覧からグラフへドラッグし、Getの参照を作ります。その青い出力から検索すると、Set Max Walk Speedを追加できます。

5. 押したら900、離したら500へ戻す

Set Max Walk Speedを2つ用意し、Targetは両方ともCharacter Movementの参照につなぎます。Targetは「どの部品の上限を変えるか」の指定です。

  • IA_SprintのStarted → Max Walk Speed=900のSet
  • IA_SprintのCompleted → Max Walk Speed=500のSet
  • IA_SprintのCanceled → 同じMax Walk Speed=500のSet
IA_SprintのStartedから、Character MovementのMax Walk Speedを900へ変える

離したときは、元の速度へ戻します。

CompletedとCanceledを同じSetにつなぎ、Max Walk Speedを500へ戻す

上の2枚は、同じIA_Sprintイベントの配線を分けて示しています。イベントを2つ置く必要はありません。

Startedは入力が始まったとき、Completedは成立していた入力が終わったときです。Canceled側も通常速度へ戻す処理につなぎ、入力が途中で取り消された場合に備えます。

ここで変えるのは速度の上限です。キャラクターの現在位置へ毎フレーム距離を足す処理は加えません。

コンパイル・保存してPlayし、画面をクリックします。Wを押して歩き、Wを押したまま左Shiftを押すと加速し、Shiftだけ離すと通常の速さへ戻るか確認します。Shiftだけ押しても、移動方向の入力がなければ走り出しません。

6. 実際の速さを画面に出す

見た目だけでは差が分かりにくい場合は、Get Velocityを使います。Velocityは方向を含む速度です。そこからVector Length XYへつなぐと、上下方向を除いた速さを数値で取り出せます。

BP_InputPracticeで、既存のIA_PracticeMoveからつながる最後のAdd Movement Inputの後ろにPrint Stringを追加します。

  1. Get Velocityを置く。Targetはself。
  2. Return ValueをVector Length XYのAへつなぐ。
  3. そのReturn ValueをPrint StringのIn Stringへつなぐ。数値から文字への変換が自動で入る。
  4. 最後のAdd Movement Inputの白い実行出力を、Print Stringへつなぐ。
  5. Print StringのDurationを0にする。
移動入力の後に水平速度を取り出し、文字へ変換してPrint Stringへ渡す

移動入力が続く間、短い表示で値を更新します。広い平地で十分に加速すると、通常は約500、ダッシュ中は約900へ近づきます。壁に押し付けたり、入力を弱めたりしている場合は、上限に届かなくても正常です。

この表示は移動入力のイベントから呼ぶため、キーを離した後の減速を継続して測るものではありません。確認が終わったら、追加したPrint Stringへの白い線を外しておきます。

Sponsored

うまく動かないときのチェック

症状確認するところ
Max Walk Speedを変えても速くならない実際に操作しているBP_InputPracticeを編集したか。別のSetで上書きしていないか。走れる広さがあるか
Shiftを離しても速いままCompletedとCanceledから500へ戻す白い線がつながっているか
Shiftに反応しないIA_Sprintの型、IMC_PlayerControlsのLeft Shift、IMCが有効か、Play画面へ入力が届いているか
数字は変わるが、走り出しが遅いMax Accelerationを確認する。上限と加速を分けて比べる
減速度を下げても滑らないGround Friction、Use Separate Braking Friction、Braking Friction Factorも確認する
重力を上げたら足場へ届かなくなったジャンプの高さも下がる。Jump Z Velocityと組み合わせて調整する
ジャンプが表の目安と大きく違うJump Max Hold Time、プロジェクトとレベルの重力、天井、着地先の高さを確認する
小さな段差や坂で止まるCapsuleの判定と、Max Step Height・Walkable Floor Angleを確認する

Max Step Heightは乗り上げられる段差の高さ、Walkable Floor Angleは歩ける斜面の角度の基準です。見た目が小さな段差でも、当たり判定が別の形だと通れないことがあります。Modeling Modeの記事のように単純な床・坂で試すと、地形と移動設定のどちらが原因かを切り分けやすくなります。

おまけ:ジャンプの時間を数字で比べる

「着地が少し早くなった気がする」を数字でも確かめたい場合は、跳んだ時刻を覚え、着地した時刻から引きます。 毎フレーム数える処理は必要ありません。

BP_InputPracticeへ、Float変数JumpStartTimeとBoolean変数bMeasuringJumpを作ります。初期値はそれぞれ0とfalseです。

跳び出した時刻を保存する

イベントグラフでOn Jumpedを検索し、イベントを追加します。これは入力ボタンを押しただけでなく、Characterが実際に跳び出したときに呼ばれます。

On JumpedからSet JumpStartTimeへ白い線をつなぎ、値にはGet Game Time in SecondsのReturn Valueを渡します。その後にSet bMeasuringJump=trueをつなぎます。

On Jumpedで開始時刻を保存し、ジャンプを測っていることを覚える

Get Game Time in Secondsは、ゲーム内で経過した時間を秒で返します。たとえば開始から5.2秒で跳べば、JumpStartTimeに5.2を覚えます。

着地した時刻との差を表示する

On Landedイベントを追加し、Branchへつなぎます。ConditionはGet bMeasuringJumpです。True側だけ、Set bMeasuringJump=false → Print Stringの順に実行します。

On Landedで計測中か確認し、Trueの場合だけ時間差を表示する

Printへ渡す値は、次のように作ります。

  1. Get Game Time in SecondsのReturn ValueからSubtractを作る。
  2. 上側のAに現在の時刻、下側のBにGet JumpStartTimeをつなぐ。
  3. 引き算の結果をPrint StringのIn Stringへつなぐ。文字への変換を使い、Durationを3にする。
現在の時刻から保存した開始時刻を引き、秒数をPrint Stringへ渡す

5.2秒で跳び、6.3秒で着地したなら、表示は約1.1秒です。bMeasuringJumpで確認するのは、Play開始直後に床へ降りた場合などを、ジャンプとして数えないためです。

同じ高さの床で、その場ジャンプを繰り返してA・B・Cを比べます。計算上の値との小さな差より、Bは低く短く、CはAに近い高さで早く戻る、という関係を観察しましょう。ポーズや時間の倍率変更は使わずに測ります。

:::note ジャンプの目安を計算したい場合

長押し延長などを含めない単純な運動では、跳び出す速度をv、下向き重力の大きさをgとすると、高さはv²÷(2g)、同じ高さへ戻る時間は2v÷gです。

Gravity Scale=2なら、今回のgは980×2=1960です。v=1000なら高さは約255cm、時間は約1.02秒になります。表の数値はこの計算によるもので、UE実機の測定結果ではありません。

:::

まとめ

移動の調整では、最高速、走り出し、止まり方を分けて触ります。ジャンプは高さと着地までの時間を一緒に見て、空中操作は着地点を修正できる量として比べます。

白い練習用キャラクターでも、加速、短いジャンプ、Shiftダッシュが加わると操作の印象が変わります。同じ床・同じ入力で一つずつ試し、作りたいゲームに合う値を探してみてください。

見た目の走りやジャンプを動きへ合わせる段階では、Animation Blueprintの記事へ進めます。

参考:Character MovementAdd Movement InputGround FrictionOn LandedVector Length XYGet Game Time in Seconds

Unreal Engine このセクションのノート98