6.

UE5 ActorBeginOverlapとOnComponentBeginOverlapの違い

編集
この記事の要点
  • Event ActorBeginOverlap はアクター全体のオーバーラップ通知。誰と重なったかだけ分かる
  • OnComponentBeginOverlap はコリジョンコンポーネント単位の通知。どのコンポーネント同士かまで分かる
  • 複数のコリジョンを持つアクター(武器 / 体 / 当たり判定領域)ではOnComponentBeginOverlap が必須
  • 引数: ActorBeginOverlap は OtherActor のみ。Component 版は OverlappedComponent / OtherActor / OtherComp / OtherBodyIndex / bFromSweep / SweepResult
  • コリジョン設定で Generate Overlap Events = true が必須。Collision Preset が Overlap ◯◯ に設定されていることも必要

2 つのイベントの違い

UE5 で「何かに重なった」ことを検知するイベントは大きく 2 種類あります。

項目Event ActorBeginOverlapOnComponentBeginOverlap
粒度アクター単位コンポーネント単位
取得元アクター自身のイベント個別のコリジョンコンポーネント
付け方イベントグラフから直接配置コンポーネントを右クリック → 「イベントを追加」
引数OtherActor のみOverlappedComponent / OtherActor / OtherComp / OtherBodyIndex / bFromSweep / SweepResult
呼ばれる回数(1 アクター内に複数コリジョンがある場合)1 回(先に重なった瞬間)各コンポーネントごとに発火
得意「触れたら反応」の単純判定体 / 頭 / 武器など部位別の判定

Event ActorBeginOverlap

アクター全体に対する通知です。アクター内のどれか 1 つでもコリジョンが Overlap 設定でぶつかると、1 回だけ呼ばれます(連続してぶつかっても他コンポーネントの分は呼ばれない)。

引数

名前意味
OtherActorActor重なった相手のアクター

「誰と重なったか」しか分からないため、ヒット位置の取得や、体 / 頭の打ち分けには使えません。

OnComponentBeginOverlap

コリジョンコンポーネント自身が持つデリゲートで、そのコンポーネント単位で呼ばれます。武器メッシュの剣先だけ判定したい場合や、当たり判定ボックスを複数持つ場合に必須です。

引数

名前意味
OverlappedComponentPrimitiveComponent自分側のどのコンポーネントが重なったか
OtherActorActor相手のアクター
OtherCompPrimitiveComponent相手側のどのコンポーネントか
OtherBodyIndexint32相手の物理ボディインデックス(SkeletalMesh の部位特定)
bFromSweepboolスイープ判定経由か
SweepResultHitResult位置 / 法線 / 距離など詳細情報

SweepResult.LocationSweepResult.ImpactNormal でヒット位置を取れます。OtherBodyIndex と SkeletalMesh の GetBoneName を組み合わせれば、敵のどの骨にヒットしたか(頭 / 胴体 / 脚など)も判定できます。

使い分けの目安

シーン推奨理由
アイテムを拾う(コリジョン 1 つ)ActorBeginOverlapシンプルで済む
武器の剣先だけ当たり判定OnComponentBeginOverlap剣身コンポーネント限定で発火
頭 / 胴体で別ダメージOnComponentBeginOverlap + BodyIndex骨ごとに判定
トリガーボックスでイベントどちらでも可コリジョン 1 つなら ActorBeginOverlap が短い
位置 / 法線が必要OnComponentBeginOverlapSweepResult から取れる

イベント発火に必要な設定

どちらのイベントも、コリジョンが正しく設定されていないと呼ばれません。

  1. コリジョンコンポーネント(SphereCollision / BoxCollision / Capsule / StaticMesh など)を持つ
  2. Details → Collision → Generate Overlap Events = true
  3. Collision PresetOverlapAll / OverlapAllDynamic / Trigger など、相手とOverlap判定の組合せ
  4. 相手側も Collision Preset で対応するチャンネルが Overlap である

どちらかが BlockIgnore だとオーバーラップイベントは発火しません。

サンプル: ActorBeginOverlap

キャラクターがアイテム(PickupActor)に触れたらメッセージを出す例。

  1. PickupActor の SphereCollision に OverlapAllDynamic 等を設定
  2. イベントグラフに Event ActorBeginOverlap を配置
  3. Other Actor を Cast To MyCharacter
  4. キャストに成功したら Print String、Destroy Actor

サンプル: OnComponentBeginOverlap

剣の剣身だけが当たり判定を持ち、ヒットした骨ごとにダメージを変える例。

  1. 武器アクターに SwordBladeCollision(Box)を追加
  2. Components パネルで右クリック → Add Event → OnComponentBeginOverlap
  3. SweepResult を Break HitResult → Hit Bone Name を取得
  4. 骨名で分岐: Head なら大ダメージ、その他なら通常ダメージ

C++ での宣言例

// ヘッダ
UPROPERTY(VisibleAnywhere) UBoxComponent* BladeCollision;

UFUNCTION()
void OnBladeBeginOverlap(
    UPrimitiveComponent* OverlappedComp,
    AActor* OtherActor,
    UPrimitiveComponent* OtherComp,
    int32 OtherBodyIndex,
    bool bFromSweep,
    const FHitResult& SweepResult);

// cpp の BeginPlay などでバインド
BladeCollision->OnComponentBeginOverlap.AddDynamic(
    this, &AMyWeapon::OnBladeBeginOverlap);

// ActorBeginOverlap 版
UFUNCTION()
void OnMyActorBeginOverlap(AActor* OverlappedActor, AActor* OtherActor);
// BeginPlay 内
OnActorBeginOverlap.AddDynamic(this, &AMyActor::OnMyActorBeginOverlap);

よくある落とし穴

  • Generate Overlap Events 切り忘れ — どちらかが false だと呼ばれない
  • Collision Preset が NoCollision / Block 系 — Overlap イベントは Block では発火しない
  • SkeletalMesh の物理アセット側で Overlap が無効 — キャラクター本体の Capsule とは別物
  • BeginPlay より前にバインド済み — C++ で AddDynamic を Constructor に書くと、SpawnActor 直後の重なりを取りこぼす場合がある
  • Begin と End がペアでない — 同時に複数コンポーネントが重なると Begin の回数 ≠ End の回数になりうる

FAQ

Q: 同じアクターに両方バインドしたら?
A: 両方発火します。役割が違うので組み合わせ自体は問題ありません。

Q: Begin と End の組はそれぞれペア?
A: はい。ActorBeginOverlapActorEndOverlapOnComponentBeginOverlapOnComponentEndOverlap

Q: Tick で位置判定すれば?
A: 動きますが負荷が高く、すり抜け(高速移動で 1 フレームに通り抜け)対策にもなりません。エンジン側の Overlap / Sweep を使うのが基本です。

関連

  • Tips — 親カテゴリ
  • Event ActorEndOverlap / OnComponentEndOverlap
  • Collision Preset / Generate Overlap Events
  • HitResult / Sweep / Trace
  • SkeletalMesh の物理アセット / GetBoneName
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 床の上に乗ったらイベントを発生させる方法
  2. OverlapAllDynamicとOverlapAllの違い
  3. タイトル画面を作る方法
  4. サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
  5. ボタンに文字を記載する方法
  6. Event ActorBeginOverlapとOn Component Begin Overlapの違い
  7. キャラクターに特定のオブジェクトとの当たり判定を付ける
  8. 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
  9. 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
  10. 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
  11. Blenderファイルをインポートする方法
  12. 鏡を作成する方法
  13. レベルブループリントでキャラクターの出現を設定する方法
  14. サードパーソンテンプレートにおけるキャラクター出現の定義
  15. アイテムに近づいたらボタンを押してイベントを発火させる方法
  16. 画面の中央にメッセージを表示する方法
  17. どこからでも呼び出せるカスタムイベントを作成する方法
  18. カスタムイベントに引数を追加する方法
  19. 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
  20. オブジェクトに近づいている間だけメッセージを表示する方法
  21. PCの画面を操作するUIを作る方法
  22. コンテンツブラウザに画像を追加する方法
  23. SetInputMode_UIOnlyを取り消す方法
  24. 特定の画像の上にマウスカーソルを置いたら手マークにする方法
  25. オブジェクトがアウトライナーで選択できない原因と解決策
  26. PlayerStartを作成する方法
  27. メニュー画面を作成して開く方法
  28. 「Esc」キーを押してメニュー画面を開く方法
  29. イベントの「On Clicked」と「On Pressed」の違い
  30. 「Set Input Mode」の種類と使い方
  31. 「Set Game Paused」の使い方と詳細解説
  32. Motion Matchingとは?
  33. 「GameMode」と「GameModeBase」の違い
  34. マップに配置したTargetPointを取得する方法
  35. TargetPointにタグをつけて取得する方法
  36. Spawnしたインスタンスがイベントを実行する方法
  37. 特定の時間ごとに処理を実行する方法
  38. 数値をランダムで出力する方法
  39. ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
  40. MaxWalkSpeedを変更する方法
  41. しゃがむ動作を導入する方法
  42. キャラクターのアニメーションを設定する方法
  43. 導入済みのプラグインを確認する方法
  44. Motion Matchingの導入と必要なプラグイン
  45. プレイヤーを非表示にする方法
  46. カメラを傾ける角度を制限させる方法
  47. 配列からランダムに重ならない要素を特定の数取得する方法
  48. カメラの映す画面に文字やエフェクトを付ける方法
  49. キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
  50. プライマリーデータアセットを活用する方法
  51. プレイヤーのHPといった変数を定義する最適な場所
  52. カメラに映った画面をスクリーンショットとして保存する方法
  53. ゲーム内のカメラ映像を保存して再表示する方法
  54. HighResShot を使って高解像度の画像を保存する方法(UE5)
  55. HighResShotで保存した画像のファイル名を取得する方法
  56. SceneCapture2DとFrameGrabberの画像保存方法の比較
  57. SceneCapture2Dを使用して画像を保存・取得する方法
  58. HighResShotとTake High Res Screenshotの違い
  59. ゲーム終了ボタンを作成する方法
  60. 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
  61. 画面上にメッセージを指定された時間表示させる方法
  62. シェーダコンパイル時間を短縮する方法
  63. 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
  64. データベースを活用する方法
  65. UE5.5がインストールされた環境にUE5.4を追加で導入する方法
  66. World PartitionとWorld Compositionの違い
  67. オープンワールドテンプレートとは?
  68. ポーンをスポーンさせても視点を切り替えない方法
  69. キャラクター同士がすり抜けてしまう問題の解決方法
  70. キャラクターの外見を動的に変更
  71. World Partitionでインスタンスが「アンロード済み」になる問題
  72. データ アセットとデータ テーブルの違い
  73. コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
  74. エディターのソースコードの自動保存の頻度を高める方法
  75. SpawnActorでSpawn Transform Rotationが反映されない理由
  76. ミニマップを表示しポーンの位置を反映する方法
  77. RInterp ToとVInterp Toの違い
  78. 毎秒実行するイベントの定義方法
  79. Niagara のエフェクトにコリジョンを持たせる方法
  80. 「Overlap」と「Hit」の違い
  81. OverlapはあるがHitがない原因
  82. Overlapした位置の座標を取得する方法
  83. ブループリントでレベル間のパラメータを受け渡す方法

最近更新/作成されたページ