この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
SEOタイトル: UE 特定オブジェクト接触時の処理完全ガイド

この記事の要点
  • 接触検出は OnActorBeginOverlap (重なり) or OnComponentHit (物理衝突) を使う
  • Collision Profile を正しく設定 (BlockAll / OverlapAll / 独自プロファイル)
  • 対象の判定は Cast To 特定クラス、または Tag 比較で行う
  • キャラクターを倒すには Set Simulate Physics = true (Ragdoll 化) + アニメーション切替
  • 組織的にはダメージシステム (Apply Damage) + OnTakeAnyDamage 経由が拡張しやすい

接触イベントの基本

Unreal Engine で「特定のオブジェクトに触れた」を検出する方法は、用途に応じて以下を使い分けます。

イベント発火タイミング典型用途
OnActorBeginOverlapActor 同士が重なった瞬間トリガー領域・アイテム取得・ダメージゾーン
OnActorEndOverlap重なりが終わった瞬間ゾーンから出た時の処理
OnComponentBeginOverlap特定 Component と重なった瞬間頭にだけヒット時 / 足の接地
OnComponentHit物理衝突が発生壁にぶつかる音 / 跳ね返り
OnTakeAnyDamageダメージを受けたHP 減少 / 死亡判定

Collision Profile を理解する

接触検出には Collision Profile 設定が必須。それぞれのコンポーネントに以下を設定します:

  • Collision Enabled: No Collision / Query Only / Physics Only / Collision Enabled
  • Object Type: Pawn / WorldStatic / WorldDynamic / PhysicsBody 等
  • Response: 各 Object Type に対して Ignore / Overlap / Block
プリセット概要
BlockAllすべてをブロック (壁・床)
OverlapAllすべてを Overlap (検知のみ・物理影響なし)
OverlapAllDynamic動的オブジェクトのみ Overlap
Pawnキャラクター用
Triggerトリガー領域用
Custom...独自定義

ステップ 1: 障害物 Actor を作る

  1. Content Browser → 右クリック → Blueprint Class → Actor → 名前 BP_Obstacle
  2. Components パネルで Add Component → Static Mesh / Box Collision など
  3. Collision Preset を OverlapAllDynamic
  4. 「Generate Overlap Events」を ON
  5. Tags にタグを追加 (例: Obstacle) ← Cast の代わりに使うと軽量

ステップ 2: キャラクター側で接触を受ける

キャラクター BP の Event Graph で、Components パネルの Capsule Component を選択 → Details タブの「Events」セクションから On Component Begin Overlap をクリック → イベントノードが生成。

[On Component Begin Overlap (Capsule)]
    Overlapped Component
    Other Actor               ──→ [Cast To BP_Obstacle]
    Other Comp                       Success → Falldown 処理
    Other Body Index                 Failed  → 何もしない
    From Sweep
    Sweep Result

Cast To が重い場合は Tag 比較

[On Component Begin Overlap (Capsule)]
    Other Actor ──→ [Actor Has Tag]
                        Tag = "Obstacle"
                    ──→ Branch
                            True → Falldown 処理

ステップ 3: キャラクターを倒す (Ragdoll)

キャラクターを倒すには、Skeletal Mesh の物理シミュレーションを ON にして関節ごとに倒れる Ragdoll を発動します:

[Falldown 関数]
    1. [Disable Movement] (Character Movement)

    2. [Get Mesh (Skeletal Mesh Component)]
       ──→ [Set Collision Profile Name]
              In Collision Profile Name = "Ragdoll"
       ──→ [Set Simulate Physics]
              Simulate = true
              Bone Name = "pelvis"  (省略すると全身)
       ──→ [Set All Bodies Simulate Physics]
              New Simulate = true

    3. [Get Capsule Component]
       ──→ [Set Collision Enabled]
              New Type = NoCollision

    4. [Stop Animation]
       Anim Instance → Stop Slot Animation

    5. (任意) アニメーション再生
       Play Anim Montage = AM_KnockDown

「Ragdoll」プロファイルを用意

Project Settings → Engine → Collision で Custom Collision Profile を追加:

  • Name: Ragdoll
  • Collision Enabled: Collision Enabled (Query and Physics)
  • Object Type: PhysicsBody
  • Pawn: Ignore (自分自身に再衝突しないように)
  • WorldStatic / WorldDynamic: Block

ダメージシステムを使う組織的な方法

直接 Falldown を呼ぶより、ダメージシステムを経由したほうが、毒沼・落下・攻撃など多様な原因に対応しやすくなります。

# 障害物側
[On Actor Begin Overlap]
    Other Actor ──→ [Apply Damage]
                       Damaged Actor    = Other Actor
                       Base Damage      = 9999
                       Event Instigator = nullptr
                       Damage Causer    = self
                       Damage Type      = (DT_Crash 等)

# キャラクター側
[Event On Take Any Damage]
    Damage        ──→ [Subtract from Health]
    Damaged Actor       Branch (Health <= 0?)
                          True → Falldown 処理
                          False → ヒットアニメ

OnComponentHit で物理衝突を取る

Overlap ではなく Block 関係の物理衝突を検出したい場合 (例: 高速で壁にぶつかる)、OnComponentHit:

[On Component Hit (Capsule)]
    Hit Component
    Other Actor
    Other Comp
    Normal Impulse  → Vector の大きさで衝撃強度判定
    Hit Result      → Impact Point / Bone Name など

# 衝撃が一定以上なら倒れる
[Vector Length (Normal Impulse)]
    ──→ Compare > 1000.0
    ──→ Branch
          True → Falldown

Launch Character で吹っ飛ばす

Ragdoll 化する前に強制的に吹き飛ばしたいなら:

[Launch Character]
    Launch Velocity = (Forward * -800, 0, 400)  ← 後ろ向き + 上
    XY Override = true
    Z Override  = true

Anim Notify でアニメーションから処理を発火

「倒れるアニメの中で物理に切り替えたい」場合、Anim Montage に Notify を仕込んでイベントで受け取ります:

  1. Animation Sequence を開く
  2. 該当フレームを右クリック → Add Notify → New Notify (BeginRagdoll)
  3. キャラクター BP の Event Graph で AnimNotify_BeginRagdoll ノードを置き、物理 ON 処理を繋ぐ

FAQ

Q: OnActorBeginOverlap が発火しない
A: ① 双方のコリジョンが Overlap になっているか確認 (片方が Ignore だと無視)。 ② Generate Overlap Events が両方で ON か。 ③ Collision Enabled が Query Only 以上か。

Q: Ragdoll になった後、起き上がらせたい
A: Set Simulate Physics = false + Capsule の位置を Mesh の root bone に合わせ直し、Set Collision Enabled = QueryAndPhysics に戻す。専用 Wake Up アニメ Montage を再生するのが定石。

Q: 大量のオブジェクトで毎回 Cast すると重い
A: Cast の代わりに Tag 比較 or Gameplay Tag。または親クラス (Interface) を作って Does Implement Interface で判定。