【Unreal Engine】UE5のラグドール入門:Physics Assetでキャラクターを倒す

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

Rキーを押すとキャラクターが崩れ落ちる例で、ラグドールの仕組みを学びます。Physics Assetのボディと関節、CharacterとMeshの役割、Add Impulseによる押し出しを順に図解します。

敵のHPが0になったとき、その場で消す代わりに、膝を折って床へ倒れ込ませたい。斜面なら、その傾きに沿って身体が転がってほしい。こうした動きを物理で作るのが ラグドール です。

歩いている間はアニメーションで姿勢を作り、倒れるときは重力や衝突に身体の動きを任せます。この記事では、Third Personテンプレートのキャラクターを使い、Rキーで倒れる → 押し出す力を加える → 8秒後に消す ところまで試します。

キャラクターが立った姿から物理によって床へ倒れるイメージ

この記事でわかること

  • 身体を物理で動かすためのPhysics Assetの役割
  • ボディと関節を、エディタで確かめる方法
  • Characterの移動と、Meshの物理を切り替える手順
  • 倒れる身体を押し出す方法と、うまく動かない場合の見方

Sponsored

ラグドールは、身体の動きを物理に任せる仕組み

歩くアニメーションでは、腰・膝・足などの位置や向きを順に変え、歩いている姿を作ります。一方、ラグドールでは、身体の各部分が重力で落ち、床にぶつかり、つながった部分を引っ張ります。その結果として、倒れる姿勢が決まります。

「アニメーションを止める」だけでは、身体は崩れません。動きを任せる物理用の身体が必要 です。その身体を用意するのが、後で見るPhysics Assetです。

アニメーションは腰・膝・足の位置を順に決めるが、ラグドールは重力と床が姿勢を決める

倒れ方は、そのときの姿勢、押された方向、床の形などで変わります。同じ死亡アニメーションを毎回再生する場合とは、ここが違います。階段に足が引っかかったり、斜面を転がったりする動きを、地形に応じて作れます。

ただし、毎回狙ったポーズで倒れるとは限りません。ボスの決められた退場シーンにはアニメーション、地形に応じた崩れ方にはラグドール、と演出に合わせて選べます。両者を混ぜる方法もありますが、まずは全身を物理へ切り替える例から始めましょう。

Physics Assetは「身体の形」と「つながり」を持つ

キャラクターの Skeletal Mesh は、骨の動きに合わせて形が変わるモデルです。Bone(ボーン) は、腰や腕などの位置・向きを決める骨組みを指します。

骨があるだけで、床との衝突や重さが決まるわけではありません。そこで Physics Asset に、物理計算で使う形と、そのつなぎ方を設定します。

要素決めること身体での例
Body(ボディ)衝突する形や質量胴体を囲むカプセル、頭を囲む球
Constraint(コンストレイント)ボディ同士の離れ方・曲がり方の制限腕が肩から外れず、決めた範囲で曲がる

ボディは、見た目の輪郭を細かくなぞる代わりに、球・カプセル・箱などの簡単な形で身体を包みます。Constraintは関節のような役割で、ばらばらの部品が一つの身体として動くようにつなぎます。

骨の数と、物理ボディの数は同じとは限りません。 指まで細かく判定するのか、手を一つのボディにまとめるのかなど、必要な動きに合わせて作ります。最初の練習では、標準キャラクターに付属するPhysics Assetを使います。

骨は位置と向き、ボディは衝突する形、Constraintはつながりを決める

準備:標準キャラクターで小さく試す

今回必要なのは、骨とPhysics Assetを持つキャラクターです。これまでの入力練習で使った白いCubeには骨がないため、別の練習用プロジェクト で始めます。図の青い人形は仕組みを表すもので、操作にはテンプレート付属のモデルをそのまま使います。

1. Third Personのキャラクターを複製する

  1. 新規プロジェクトで「Games → Third Person」を選び、Blueprintで作る。Variantsがある版ではNoneを選ぶ。
  2. Playして、WASDで移動、Spaceでジャンプできることを確認する。
  3. コンテンツブラウザでBP_ThirdPersonCharacterを探し、複製して BP_RagdollPractice と名付ける。
  4. レベルの「World Settings → GameMode」で、使用中のGameModeを開く。Default Pawn ClassをBP_RagdollPracticeへ変える。
  5. コンパイル・保存して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を間違えて調べずに済みます。

使用中のMeshからSkeletal Mesh、Physics Assetをたどり、Simulateで確かめる

Physics Asset Editorでは、身体を囲むボディと、それらをつなぐ関節を確認します。腰付近のボディを選び、対応する骨名も見ておきましょう。標準マネキンでは pelvis が腰の骨です。後の押し出しでは、この名前を使います。

ツールバーの Simulate を押し、身体が重力で動くかを確かめます。停止してから設定を編集します。まず付属の設定で試し、調整したい場合はPhysics Assetを複製して、BP_RagdollPracticeのMeshにあるPhysics Asset Overrideへ割り当ててから変更しましょう。Overrideは、このMeshで使う設定を個別に上書きする欄です。

この段階で身体が激しく跳ねるなら、ゲームのBlueprintより先にPhysics Assetを調べます。後半の「暴れるときの確認」で、見分け方を扱います。

Sponsored

実践:Rキーで崩れ落ちるようにする

いきなりHPや攻撃と組み合わせず、まずRキーを押したら倒れるようにします。編集するのはBP_RagdollPracticeです。

Rで倒れ、勢いを加え、呼び出しから8秒で消す完成イメージ

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は未接続にします。

IA_RagdollPracticeのStartedから独自イベントを呼び、定義側をDo Onceへつなぐ

3. 歩くための部品を止める

Characterには、身体のMeshとは別に、移動を担当するCharacter Movementと、移動時の当たり判定であるCapsule Componentがあります。

倒れた身体を物理に任せるときも、これらが通常どおり働くと、見た目だけが倒れてプレイヤーの移動処理が残ってしまいます。そこで、まず通常の移動を止めます。

移動用CapsuleとCharacter Movementを止め、身体のMeshを物理で動かす

ComponentsからCharacter Movementをグラフへドラッグし、その参照から Disable Movement を作ります。先ほど置いたDo OnceのCompletedを、このノードの実行入力へつなぎます。図ごとにDo Onceを追加する必要はありません。

続いてCapsule Componentから Set Collision Enabled を作り、New TypeをNo Collisionにします。Disable Movementの実行出力からつなぎます。Capsuleはその場に残りますが、倒れる身体や周囲と衝突しない状態になります。

前のDo OnceからDisable Movement、CapsuleのNo Collisionへ続く接続

4. Meshを物理へ切り替える

今度はComponentsのMeshをグラフへドラッグし、次の2ノードを作って順につなぎます。

ノードTarget設定
Set Collision Profile NameMeshIn Collision Profile Name = Ragdoll
Set Simulate PhysicsMeshSimulate = オン

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全体です。

前のCapsule設定からMeshの衝突と物理を有効にし、selfの寿命を8秒にする

Life Spanは残りの寿命です。このノードを呼んでから8秒後にActor全体を破棄します。倒れた身体をいつまでも残さず、次の戦闘へ進めるための後始末です。

PlayしてRを押すと、倒れた身体が8秒後に消えるか見ます。今回は自分のキャラクターを消す練習なので、次の確認はPlayを停止してやり直します。

カメラは元のCapsule側に付いているため、倒れて移動するMeshを自動では追いかけません。まずは平らな床で短い距離の動きを試します。

Add Impulseで、倒れる身体を押し出す

重力だけでも倒れますが、攻撃を受けた勢いを出したい場合は Add Impulse を加えます。Impulseは、瞬間的に押して動き出す勢いを与えるものです。押し続ける処理ではないので、今回は倒れ始めるときに1回呼びます。

腰のボディへ前方500cm毎秒と上方200cm毎秒の速度変化を与える概念図

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を足すと上向きの動きも加わります。

前方向へ500を掛けて上方向200を足すVectorの計算

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

物理オンと既存のSet Life Spanの間にAdd Impulseを挟む実行順
入力値・接続
TargetMesh
Impulse上のAddの結果
Bone Namepelvis
Vel Changeオン
MeshをTargetへ、計算したVectorをImpulseへ接続する

Bone Nameには、Physics Assetで確認した腰のボディに対応する骨名を指定します。別モデルを使う場合は、そのモデルの名前へ置き換えます。Noneは「どこにも加えない」ではなく、ルート側のボディを指定する意味です。

Vel Changeをオンにすると、質量に左右されない速度の変化として値を渡します。 今回は腰のボディへ、前方500cm/秒と上方200cm/秒の変化を与える指定です。身体全体の動きは、腰につながるボディや関節、床との衝突にも影響されます。

2. 押す強さを比べる

Playし、平らな広い場所で止まってからRを押します。身体が前へ押し出されて倒れるかを見ます。次は前方向の500を200へ下げ、押し出される距離がどう変わるか比べてください。

同じ値でも、姿勢や接触の仕方で倒れ方は変わります。「この値なら必ず仰向けになる」という設定ではありません。まず勢いの違いを確かめてから、攻撃に合う値を探します。

Sponsored

HPが0になったときの処理へつなぐ

Rキーで倒せるようになったら、StartPracticeRagdollを呼ぶきっかけを、HPが0になったときへ替えられます。

体力とダメージの記事では、HPを持つ箱のBP_Damageableを作りました。その箱はStatic Meshなので、このまま手足のあるラグドールにはなりません。キャラクターへ体力の処理を持たせたうえで、最後の動作を変えます。

Character側で、Damageを引く → HPが0か判定する → StartPracticeRagdollを呼ぶ、という流れにします。HPが0になった瞬間のDestroy Actorは外し、倒れる演出の後に消す ようにします。今回ならSet Life Spanが8秒後に消します。

HPが0になったらDestroyせずラグドールへ移し、Set Life Spanで倒れる時間を残してから消す

この時点の押し出し方向は、キャラクター自身の前方です。敵が「撃たれた方向へ」倒れるようにするには、攻撃側からその方向を渡します。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は、起点にした骨自身も含めるかの設定です。

Belowは骨の親子関係をたどる範囲で、Include Selfは起点も含める

ただし、これだけで「歩きながら腕だけ自然に脱力する」仕組みが完成するわけではありません。動かすボディや関節に加えて、アニメーションの姿勢と物理の結果をどう混ぜるかも設計します。全身の例を理解してから広げる題材です。

起き上がるには、身体と移動の基準を合わせる

倒れたMeshが転がっても、移動の基準だったCapsuleは元の場所に残っています。物理をオフにして歩行を戻すだけでは、身体と移動位置がずれたり、姿勢が急に変わったりします。

倒れたMeshへCapsuleの位置を合わせ、姿勢と移動を戻す概念図

復帰させる場合は、Capsuleの置き直し、Meshの位置・姿勢、衝突、移動、起き上がりアニメーションを合わせて扱います。今回の「倒れて消える」処理とは別の段階として作ると、確認しやすくなります。

倒れた身体を残す場合も、数や残す時間を決めます。物理のスリープは、落ち着いたボディの計算を休ませる仕組みですが、衝突などで再び動く場合があります。永久に固定する操作とは区別してください。

まとめ

Physics Assetには、身体の各部分を表すボディと、それをつなぐ関節があります。ラグドールにすると、この身体が重力や衝突で動き、倒れる姿勢を作ります。

まずは付属のPhysics Assetを確かめ、Rキーで倒れるところから試してみてください。倒れる、押し出される、時間がたつと消える、の順に確かめると、HPが0になったときの演出へ組み込む際にも、どこまで動いているかを見分けられます。

参考:Third PersonテンプレートSkeletal Meshの物理切替Physics AssetのテストPhysics Assetの不具合調査Add Impulse衝突設定

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