敵のHPが0になったとき、その場で消す代わりに、膝を折って床へ倒れ込ませたい。斜面なら、その傾きに沿って身体が転がってほしい。こうした動きを物理で作るのが ラグドール です。
歩いている間はアニメーションで姿勢を作り、倒れるときは重力や衝突に身体の動きを任せます。この記事では、Third Personテンプレートのキャラクターを使い、Rキーで倒れる → 押し出す力を加える → 8秒後に消す ところまで試します。

この記事でわかること
- 身体を物理で動かすためのPhysics Assetの役割
- ボディと関節を、エディタで確かめる方法
- Characterの移動と、Meshの物理を切り替える手順
- 倒れる身体を押し出す方法と、うまく動かない場合の見方
ラグドールは、身体の動きを物理に任せる仕組み
歩くアニメーションでは、腰・膝・足などの位置や向きを順に変え、歩いている姿を作ります。一方、ラグドールでは、身体の各部分が重力で落ち、床にぶつかり、つながった部分を引っ張ります。その結果として、倒れる姿勢が決まります。
「アニメーションを止める」だけでは、身体は崩れません。動きを任せる物理用の身体が必要 です。その身体を用意するのが、後で見るPhysics Assetです。

倒れ方は、そのときの姿勢、押された方向、床の形などで変わります。同じ死亡アニメーションを毎回再生する場合とは、ここが違います。階段に足が引っかかったり、斜面を転がったりする動きを、地形に応じて作れます。
ただし、毎回狙ったポーズで倒れるとは限りません。ボスの決められた退場シーンにはアニメーション、地形に応じた崩れ方にはラグドール、と演出に合わせて選べます。両者を混ぜる方法もありますが、まずは全身を物理へ切り替える例から始めましょう。
Physics Assetは「身体の形」と「つながり」を持つ
キャラクターの Skeletal Mesh は、骨の動きに合わせて形が変わるモデルです。Bone(ボーン) は、腰や腕などの位置・向きを決める骨組みを指します。
骨があるだけで、床との衝突や重さが決まるわけではありません。そこで Physics Asset に、物理計算で使う形と、そのつなぎ方を設定します。
| 要素 | 決めること | 身体での例 |
|---|---|---|
| Body(ボディ) | 衝突する形や質量 | 胴体を囲むカプセル、頭を囲む球 |
| Constraint(コンストレイント) | ボディ同士の離れ方・曲がり方の制限 | 腕が肩から外れず、決めた範囲で曲がる |
ボディは、見た目の輪郭を細かくなぞる代わりに、球・カプセル・箱などの簡単な形で身体を包みます。Constraintは関節のような役割で、ばらばらの部品が一つの身体として動くようにつなぎます。
骨の数と、物理ボディの数は同じとは限りません。 指まで細かく判定するのか、手を一つのボディにまとめるのかなど、必要な動きに合わせて作ります。最初の練習では、標準キャラクターに付属するPhysics Assetを使います。

準備:標準キャラクターで小さく試す
今回必要なのは、骨とPhysics Assetを持つキャラクターです。これまでの入力練習で使った白いCubeには骨がないため、別の練習用プロジェクト で始めます。図の青い人形は仕組みを表すもので、操作にはテンプレート付属のモデルをそのまま使います。
1. Third Personのキャラクターを複製する
- 新規プロジェクトで「Games → Third Person」を選び、Blueprintで作る。Variantsがある版ではNoneを選ぶ。
- Playして、WASDで移動、Spaceでジャンプできることを確認する。
- コンテンツブラウザでBP_ThirdPersonCharacterを探し、複製して
BP_RagdollPracticeと名付ける。 - レベルの「World Settings → GameMode」で、使用中のGameModeを開く。Default Pawn ClassをBP_RagdollPracticeへ変える。
- コンパイル・保存してPlayする。複製したキャラクターでも、同じように動ければ準備できている。
Default Pawn Classは、プレイヤー用に生成するキャラクターの種類です。レベルへ別のキャラクターを手置きせず、テンプレートと同じPlayerStartから出します。元のキャラクターが出る場合は、レベル側のGameMode Overrideも確認してください。
2. MeshからPhysics Assetを開く
BP_RagdollPracticeのComponentsで Mesh (CharacterMesh0) を選びます。これは身体の見た目を担 当するSkeletal Mesh Componentです。
詳細パネルのSkeletal Mesh Asset欄から、割り当てられているモデルを開きます。そのモデルのAsset DetailsでPhysics Assetを検索し、設定されているアセットを開いてください。ここから入ると、名前の似た別モデルのPhysics Assetを間違えて調べずに済みます。

Physics Asset Editorでは、身体を囲むボディと、それらをつなぐ関節を確認します。腰付近のボディを選び、対応する骨名も見ておきましょう。標準マネキンでは pelvis が腰の骨です。後の押し出しでは、この名前を使います。
ツールバーの Simulate を押し、身体が重力で動くかを確かめます。停止してから設定を編集します。まず付属の設定で試し、調整したい場合はPhysics Assetを複製して、BP_RagdollPracticeのMeshにあるPhysics Asset Overrideへ割り当ててから変更しましょう。Overrideは、このMeshで使う設定を個別に上書きする欄です。
この段階で身体が激しく跳ねるなら、ゲームのBlueprintより先にPhysics Assetを調べます。後半の「暴れるときの確認」で、見分け方を扱います。
実践:Rキーで崩れ落ちるようにする
いきなりHPや攻撃と組み合わせず、まずRキーを押したら倒れるようにします。編集するのはBP_RagdollPracticeです。

1. Rキーの入力を追加する
Input Actionの IA_RagdollPractice を作り、Value TypeをDigital (Bool)、ModifiersとTriggersを空にします。
テンプレートで移動に使っているInput Mapping Context(IMC_Defaultなど)を開き、MappingsへIA_RagdollPracticeを追加してRキーを割り当てます。見つからない場合は、コンテンツブラウザでInput Mapping Contextを絞り込み、IA_MoveやIA_Jumpが登録されているものを確認してください。既存の移動・視点操作の割り当ては残します。
入力アクションとキーの対応に迷う場合は、Enhanced Input入門で、この2種類のアセットの関係を確認できます。
イベントグラフへIA_RagdollPracticeを置き、StartedからPrint Stringへつないで「Rを受信」と表示させます。Playして画面をクリックし、Rで表示が出れば入力の準備は完了です。
2. 倒れる処理に名前を付ける
イベントグラフにCustom Eventを作り、StartPracticeRagdoll と名付けます。これは自分で作る「倒れ始める処理」の入口で、UEの標準ノード名ではありません。
コンパイルし、グラフを右クリックしてStartPracticeRagdollを検索すると、呼び出す 側のノードを置けます。IA_RagdollPracticeのStartedにつないでいたPrint Stringを外し、代わりにこの呼び出しをつなぎます。Custom Eventの定義側は、白い出力から Do Once へつなぎます。
Do Onceは、最初の1回だけ先へ進むノードです。Rを連打しても何度も力を加えたり、後始末の時間を延ばしたりしないために使います。Start Closedはオフ、Resetは未接続にします。

3. 歩くための部品を止める
Characterには、身体のMeshとは別に、移動を担当するCharacter Movementと、移動時の当たり判定であるCapsule Componentがあります。
倒れた身体を物理に任せるときも、これらが通常どおり働くと、見た目だけが倒れてプレイヤーの移動処理が残ってしまいます。そこで、まず通常の移動を止めます。

ComponentsからCharacter Movementをグラフへドラッグし、その参照から Disable Movement を作ります。先ほど置いたDo OnceのCompletedを、このノードの実行入力へつなぎます。図ごとにDo Onceを追加する必要はありません。
続いてCapsule Componentから Set Collision Enabled を作り、New TypeをNo Collisionにします。Disable Movementの実行出力からつなぎます。Capsuleはその場に残りますが、倒れる身体や周囲と衝突しない状態になります。

4. Meshを物理へ切り替える
今度はComponentsのMeshをグラフへドラッグし、次の2ノードを作って順につなぎます。
| ノード | Target | 設定 |
|---|---|---|
| Set Collision Profile Name | Mesh | In Collision Profile Name = Ragdoll |
| Set Simulate Physics | Mesh | Simulate = オン |
CapsuleのSet Collision Enabled → MeshのSet Collision Profile Name → MeshのSet Simulate Physics、の順です。Capsuleの当たり判定を切り、Meshを動かすので、Targetを入れ替えない ようにします。
Collision Profileは、当たり判定の設定一式に付けた名前です。Ragdollは、物理で動くSkeletal Mesh向けの標準プリセットです。独自設定でも作れますが、この練習では標準値を使います。
Set Simulate Physicsをオンにすると、MeshのPhysics Assetにあるボディが物理で動き始めます。ここでPlayしてRを押し、身体が床へ崩れ落ちるか確認してください。倒れた後にWASDを押しても、通常の歩行へ戻らなければ、この段階はできています。
5. 8秒後に後始末する
Set Simulate Physicsの実行出力から Set Life Span を作り、Target=self、In Lifespan=8へ設定します。Selfは、身体の部品ではなくBP_RagdollPracticeというActor全体です。

Life Spanは残りの寿命です。このノードを呼んでから8秒後にActor全体を破棄します。倒れた身体をいつまでも残さず、次の戦闘へ進めるための後始末です。
PlayしてRを押すと、倒れた身体が8秒後に消えるか見ます。今回は自分のキャラクターを消す練習なので、次の確認はPlayを停止してやり直します。
カメラは元のCapsule側に付いているため、倒れて移動するMeshを自動では追いかけません。まずは平らな床で短い距離の動きを試します。
Add Impulseで、倒れる身体を押し出す
重力だけでも倒れますが、攻撃を受けた勢いを出したい場合は Add Impulse を加えます。Impulseは、瞬間的に押して動き出す勢いを与えるものです。押し続ける処理ではないので、今回は倒れ始めるときに1回呼びます。

1. 身体の前方向へ、少し上向きに押す
まずは入力値を作ります。
押し出す値 = 自分の前方向 × 500 + (0, 0, 200)
Vectorは、X・Y・Zの3つの数値をまとめた値です。Get Actor Forward Vector(Target=self)で長さ1の前方向を取り、小数を扱える数値型Floatの500をMultiplyで掛けます。その結果へ、AddでVectorの(0, 0, 200)を足します。
前方向は、ワールドの決まった+Xではなく、今キャラクターが向いている方向です。Zは上下方向なので、200を足すと上向きの動きも加わります。

Meshの参照からAdd Impulseを作り、Set Simulate PhysicsとSet Life Spanの間へ挟みます。

| 入力 | 値・接続 |
|---|---|
| Target | Mesh |
| Impulse | 上のAddの結果 |
| Bone Name | pelvis |
| Vel Change | オン |

Bone Nameには、Physics Assetで確認した腰のボディに対応する骨名を指定します。別モデルを使う場合は、そのモデルの名前へ置き換えます。Noneは「どこにも加えない」ではなく、ルート側のボディを指定する意味です。
Vel Changeをオンにすると、質量に左右されない速度の変化として値を渡します。 今回は腰のボディへ、前方500cm/秒と上方200cm/秒の変化を与える指定です。身体全体の動きは、腰につながるボディや関節、床との衝突にも影響されます。
2. 押す強さを比べる
Playし、平らな広い場所で止まってからRを押します。身体が前へ押し出されて倒れるかを見ます。次は前方向の500を200へ下げ、押し出される距離がどう変わるか比べてください。
同じ値でも、姿勢や接触の仕方で倒れ方は変わります。「この値なら必ず仰向けになる」という設定ではありません。まず勢いの違いを確かめてから、攻撃に合う値を探します。
HPが0になったときの処理へつなぐ
Rキーで倒せるようになったら、StartPracticeRagdollを呼ぶきっかけを、HPが0になったときへ替えられます。
体力とダメージの記事では、HPを持つ箱のBP_Damageableを作りました。その箱はStatic Meshなので、このまま手足のあるラグドールにはなりません。キャラクターへ体力の処理を持たせたうえで、最後の動作を変えます。
Character側で、Damageを引く → HPが0か判定する → StartPracticeRagdollを呼ぶ、という流れにします。HPが0になった瞬間のDestroy Actorは外し、倒れる演出の後に消す ようにします。今回ならSet Life Spanが8秒後に消します。

この時点の押し出し方向は、キャラクター自身の前方です。敵が「撃たれた方向へ」倒れるようにするには、攻撃側からその方向を渡します。Line TraceならEnd−Startを長さ1へそろえた方向、実体の弾なら飛んでいた方向が候補になります。
Hit ResultのNormalは、当たった面が向いている方向です。弾の進む方向と同じとは限らないため、攻撃方向としてそのまま使わないようにします。
暴れる・床を抜けるときの確認
不具合が出たら、Physics Asset Editorだけでも起きるか、ゲーム内でだけ起きるか を分けます。倒れ方を決めるアセットと、ゲーム中に切り替える処理を、別々に調べられます。
| 症状 | 最初に見るところ |
|---|---|
| Rを押しても何も起きない | 入力確認のPrint Stringが出るか、Startedからの呼び出し |
| 棒立ちのまま動かない | Set Simulate PhysicsのTargetがMeshか、Physics Assetとボディがあるか |
| 身体が床を抜ける | Meshの物理衝突が有効か、床に当たり判定があり、互いにBlockするか |
| 身体が激しく跳ねる | 衝突するボディ同士の重なり、関節、Capsuleとの衝突 |
| 倒れるが、押し出されない | Add Impulseを物理オンの後に呼んでいるか、腰の骨名とボディ |
| 身体が消えない | Set Life SpanのTargetがselfか、値が8か、実行線が届いているか |
ボディ同士が重なっていて、その組み合わせで衝突が有効だと、互いを押し出そうとします。一方、関節は身体をつなぎ止めようとするため、激しく暴れる原因になります。Physics Asset Editorで、問題のボディの大きさ・位置と、隣り合うボディ間の衝突を確認します。

重力を切ったシミュレーション(No Gravity) も、切り分けに使えます。床へ落ちる前から動きが乱れるなら、ボディや関節の設定を先に調べます。逆に、エディタ内では正常でゲーム内だけ乱れるなら、Capsuleや周囲の物との重なりを確認します。
少し震える程度なら、動きの勢いを徐々に弱める 減 衰(Damping) の調整が役立つ場合もあります。ただし、値を極端に上げて原因を隠さないようにします。まず当たり判定と関節を整え、その後で落ち着き方を調整します。
おまけ:身体の一部だけ動かす・起き上がる
「Below」は、骨のつながりをたどった範囲
Set All Bodies Below Simulate Physicsでは、指定した骨から先のボディを物理へ切り替えられます。ここでのBelowは、画面上で下にある部分ではなく、骨の親子関係で子に当たる側 です。
肩 → 上腕 → 前腕 → 手とつながっていれば、上腕を起点に腕側を対象にできます。Include Selfは、起点にした骨自身も含めるかの設定です。

ただし、これだけで「歩きながら腕だけ自然に脱力する」仕組みが完成するわけではありません。動かすボディや関節に加えて、アニメーションの姿勢と物理の結果をどう混ぜるかも設計します。全身の例を理解してから広げる題材です。
起き上がるには、身体と移動の基準を合わせる
倒れたMeshが転がっても、移動の基準だったCapsuleは元の場所に残っています。物理をオフにして歩行を戻すだけでは、身体と移動位置がずれたり、姿勢が急に変わったりします。

復帰させる場合は、Capsuleの置き直し、Meshの位置・姿勢、衝突、移動、起き上がりアニメーションを合わせて扱います。今回の「倒れて消える」処理とは別の段階として作ると、確認しやすくなります。
倒れた身体を残す場合も、数や残す時間を決めます。物理のスリープは、落ち着いたボディの計算を休ませる仕組みですが、衝突などで再び動く場合があります。永久に固定する操作とは区別してください。
まとめ
Physics Assetには、身体の各部分を表すボディと、それをつなぐ関節があります。ラグドールにすると、この身体が重力や衝突で動き、倒れる姿勢を作ります。
まずは付属のPhysics Assetを確かめ、Rキーで倒れるところから試してみてください。倒れる、押し出される、時間がたつと消える、の順に確かめると、HPが0になったときの演出へ組み込む際にも、どこまで動いているかを見分けられます。
参考:Third Personテンプレート、Skeletal Meshの物理切替、Physics Assetのテスト、Physics Assetの不具合調査、Add Impulse、衝突設定。