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

タイトル: Event ActorBeginOverlapとOn Component Begin Overlapの違い
SEOタイトル: UE5 Event 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