2.

UE5のEvent ActorBeginOverlapとは|On Component Begin Overlapとの違い

編集

Event ActorBeginOverlap(イベント・アクター・ビギン・オーバーラップ)は、UE5のブループリントにおいて、アクター全体がいずれかのコンポーネントで他のアクターと重なり始めた時に発火するイベントです。アクターに含まれるどのコリジョンコンポーネントであっても、そこへ別のアクターが侵入してオーバーラップ状態が成立した瞬間に、一度だけ呼び出されます。本記事では、このイベントが発火する前提条件、提供されるピン、コンポーネント単位のイベントとの違い、典型的な使い方、そしてつまずきやすい落とし穴までを順に整理します。

この記事の要点
  • Event ActorBeginOverlapは、アクターを構成するいずれかのコンポーネントが他のアクターと重なり始めた時に発火する、アクター単位のオーバーラップ開始イベントです。
  • 発火には、対象コンポーネントでGenerate Overlap Eventsが有効であり、双方のコリジョン応答(Collision Response)が Overlap(または Block を含む適切な設定)になっていることが前提です。
  • 侵入してきた相手アクターはOther Actorピンから取得でき、これを使って「特定のクラスのときだけ反応する」といった判定を行います。
  • 類似のOn Component Begin Overlapコンポーネント単位で、どのコンポーネントが重なったかを区別できます。アクター全体をひとまとめに扱うか、個々のコンポーネントを区別するかで使い分けます。
  • 重なりが解消された時に対となるEvent ActorEndOverlapが発火するため、入った/出たをセットで扱えます。

Event ActorBeginOverlap とは何か

Event ActorBeginOverlapは、UE5のブループリント(特にActorを継承したクラスのイベントグラフ)で使える標準のイベントノードです。役割は、そのアクターが他のアクターと重なり始めた瞬間を検知し、処理のきっかけを与えることにあります。

ここで重要なのは「アクター単位」という性質です。1つのアクターは複数のコリジョンコンポーネント(カプセル、ボックス、スフィア、スタティックメッシュなど)を持てますが、Event ActorBeginOverlapはそれらのコンポーネントを区別せず、アクター全体として「いずれかのコンポーネントが重なり始めた」というタイミングをまとめて知らせます。アクター内部のどのコンポーネントが触れたかには関心がなく、相手のアクターと自分のアクターという2者の関係に着目するイベント、と捉えると理解しやすくなります。

なお、似た性質を持つものとしてC++側のNotifyActorBeginOverlapがあり、ブループリントのEvent ActorBeginOverlapはこれに対応する位置づけのイベントです。本記事ではブループリント上の挙動を中心に説明します。

発火の前提条件

Event ActorBeginOverlapは、ノードを置いただけでは期待どおりに動かないことがあります。オーバーラップが成立するには、関与する両方のアクター(のコンポーネント)の設定が条件を満たしている必要があります。一般的には次の条件が揃った時に発火します。

  • コリジョンが有効であること:対象のコンポーネントで衝突判定そのものが有効(少なくとも Query 用途で有効)になっている必要があります。コリジョンが無効化されていると、重なりは検出されません。
  • Generate Overlap Events が有効であること:オーバーラップを通知させたいコンポーネントで、プロパティ Generate Overlap Events にチェックが入っている必要があります。これがオフだと、物理的に重なってもイベントは発生しません。
  • コリジョン応答が Overlap を生成する設定であること:双方のコリジョン応答(Collision Response)が、互いのチャンネルに対して Overlap を返す(あるいは少なくとも一方が Overlap を返し、もう一方が Ignore でない)状態である必要があります。両者ともに Ignore のチャンネル同士では、重なりイベントは生成されません。

つまり、「コリジョンが有効」「Generate Overlap Events がオン」「コリジョン応答が Overlap として成立」という3点が、Event ActorBeginOverlapを動かすための基本的な土台になります。これらは関与する両アクター側のコンポーネントについて確認するのがポイントです。具体的なチャンネルやプリセットの組み合わせはプロジェクト設定にも依存するため、意図どおり発火しない場合は両者のコリジョン設定を見直すことをおすすめします。

Other Actor ピンの役割

Event ActorBeginOverlapノードは、出力ピンとしてOther Actorを提供します。これは、自分のアクターに対して重なり始めてきた相手のアクターへの参照です。多くの場合、このピンが処理の起点になります。

たとえば「プレイヤーキャラクターが触れた時だけ反応したい」というケースでは、Other Actorに対してCast To(特定のキャラクタークラスへのキャスト)を行い、キャストが成功した場合のみ後続の処理を実行する、という形が定番です。これにより、無関係なアクターが重なっても誤って処理が走るのを防げます。Other Actorを判定せずに処理を書くと、想定外のアクターでも発火してしまう点には注意してください。

なお、アクター単位のイベントであるEvent ActorBeginOverlapは、自分側・相手側のどのコンポーネントが触れたかという詳細までは1つのピンとしては提供しません。コンポーネントの区別が必要な場合は、後述のOn Component Begin Overlapを検討します。

On Component Begin Overlap との違い

初学者がもっとも混同しやすいのが、アクター単位のEvent ActorBeginOverlapと、コンポーネント単位のOn Component Begin Overlapの違いです。両者は「重なり始め」を検知する点では共通しますが、どの粒度で扱うかが異なります。On Component Begin Overlapは、コンポーネントを選択した状態で詳細(Details)パネルのイベント欄などから追加する、特定コンポーネントに紐づくイベントです。

観点Event ActorBeginOverlapOn Component Begin Overlap
検知の単位アクター単位(いずれかのコンポーネントが重なった時)コンポーネント単位(その特定コンポーネントが重なった時)
自分側コンポーネントの区別区別しない(まとめて1つのイベント)区別できる(コンポーネントごとに用意)
取得できる主な相手情報Other ActorOther Actor/Other Comp など、より詳細
追加方法の例イベントグラフ上にイベントとして配置対象コンポーネントを選び詳細パネル等から追加
向いている場面アクター全体を1つの当たり判定として扱いたい複数の当たり判定を別々に扱い分けたい

たとえば、トリガー用のボックス1つだけを持つシンプルなアクターであれば、どちらを使っても結果は似たものになります。一方、1体のキャラクターに「頭」「胴」「足元」など複数のコリジョンを持たせ、当たった部位ごとに処理を変えたい場合は、コンポーネント単位のOn Component Begin Overlapが適しています。逆に、内部構成を気にせず「このアクターに何かが触れた」という事実だけを扱いたいなら、Event ActorBeginOverlapが簡潔です。

Event ActorEndOverlap との対応

Event ActorBeginOverlapには、重なりが解消された時に発火する対のイベントとして Event ActorEndOverlapが用意されています。Beginが「入った瞬間」、Endが「出た瞬間」を担当し、両者をセットで使うことで、領域への出入りに応じた状態管理が行えます。

典型的には、Beginで「範囲内フラグをオンにする」「UIを表示する」などの処理を行い、Endで「フラグをオフにする」「UIを隠す」といった後始末を行います。Beginだけを実装してEndを忘れると、領域から出たのに状態が戻らない、という不整合が起きやすいため、出入りで状態が変わる仕組みを作るときは両方を対で実装することを意識すると安全です。

使い方の例:トリガー領域

もっとも代表的な使い方が、トリガー領域(トリガーボックス)です。たとえば、ボックスコリジョンを持つアクターを配置し、そこへプレイヤーが入った時に演出を起こす、といった流れは次のように組み立てられます。

  • 1. コリジョンを用意する:トリガーにしたいアクターへボックスやスフィアなどのコリジョンコンポーネントを設定し、Generate Overlap Events を有効にして、プレイヤーに対して Overlap を返すコリジョン設定にします。
  • 2. Event ActorBeginOverlap を配置する:そのアクターのイベントグラフにEvent ActorBeginOverlapを追加します。
  • 3. Other Actor を判定する:Other ActorをプレイヤークラスへCast Toし、成功した場合のみ後続処理へ進めます。
  • 4. 処理を実行する:ドアを開く、敵をスポーンさせる、メッセージを表示する、チェックポイントを記録するなど、目的の処理を接続します。
  • 5. 必要なら ActorEndOverlap で戻す:領域から出た時に元へ戻す必要があれば、Event ActorEndOverlapで対の処理を実装します。

このパターンは、アイテムの取得、進入禁止エリアの検知、カットシーンの開始トリガーなど、幅広い場面に応用できます。アクター全体を1つの判定として扱えるため、構成がシンプルなトリガーには特に扱いやすい選択肢です。

落とし穴と注意点

つまずきやすいポイント内容と対処
そもそも発火しないGenerate Overlap Events がオフ、コリジョンが無効、または双方のコリジョン応答が Overlap になっていないと、重なってもイベントは起きません。両アクター側のコリジョン設定をそれぞれ確認します。
複数コンポーネントで複数回発火する想定違いアクター単位とはいえ、相手アクターが複数のコリジョンを持ち、それぞれが順に重なるような構成では、状況によって複数回の通知が起こり得ます。発火回数に依存したカウント処理は、フラグ管理などで重複を吸収できる作りにしておくと安全です。
自分自身や意図しない相手に反応するOther Actorを判定せずに処理を書くと、無関係なアクターでも処理が走ります。Cast Toやタグ、クラス判定で相手を絞り込み、必要なら自分自身を除外する条件を入れます。
Begin だけ実装して End を忘れる出入りで状態が変わる仕組みでは、Event ActorEndOverlapを実装し忘れると状態が戻らなくなります。入った/出たは対で扱います。
当たり判定が広すぎる/狭すぎるコリジョンの大きさが意図と合っていないと、早すぎる・遅すぎるタイミングで発火します。実際にプレイして範囲を調整します。

よくある質問(FAQ)

Q1. Event ActorBeginOverlap と On Component Begin Overlap は、どちらを使えばよいですか。
アクター全体を1つの当たり判定としてまとめて扱いたいならEvent ActorBeginOverlapが簡潔です。1つのアクター内の複数コリジョンを部位ごとに区別して処理を分けたい場合は、コンポーネント単位のOn Component Begin Overlapが向いています。どちらの粒度が目的に合うかで選びます。

Q2. 設定したのにイベントがまったく発火しません。何を見直せばよいですか。
まず関与する両方のコンポーネントで Generate Overlap Events が有効か、コリジョンが有効か、そして互いのコリジョン応答が Overlap として成立しているかを確認してください。一方でも Ignore になっていたり、Generate Overlap Events がオフだったりすると、物理的に重なってもイベントは起きません。プリセットやチャンネルの組み合わせはプロジェクト設定にも依存するため、不確実な場合は公式ドキュメントで現在のバージョンの仕様を確認することをおすすめします。

Q3. 「重なり始め」と「ヒット」は別物ですか。
別物です。オーバーラップ系のイベントは、相手とすり抜けながら重なっている状態の「開始・終了」を扱います。一方、物理的にぶつかった衝突を扱う Hit 系のイベントは、衝突位置などの追加情報を伴います。すり抜けながら侵入を検知したいならオーバーラップ、固い衝突を検知したいならヒット、という用途の違いで使い分けます。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

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