1. 導入
例として「つるはし」の当たり判定を考えてみる。

岩につるはしが当たって効果がある部分は"柄"(一般に木製の棒; stick)ではなく、その先に装着した"頭"(一般に鋼鉄製; head)の部分だけ。便宜上のゲーム表現では柄は当たり判定なし、頭だけ当たり判定ありで、「キャラクターがつるはしを振るうアクション」を行うとそんな当たり判定のつるはしオブジェクトがプレイヤーに合わせて出現するような実装をしたい場合がままあります。
リアリティーを求める場合は柄の当たり判定も実装して力のかかり具合と材質から柄がダメージを受け破壊されてしまう要求もあるかもしれませんが、今回はそこまでせず、古典的なアクションゲームにありがちな便宜上の当たり判定の実装をしたい事にします。
2. 前提となる状態
- つるはしの見た目のメッシュデータ Tsuruhashi を UE4 でインポートできている
- Tsuruhashi をメッシュとして設定した StaticMeshActor の Tsuruhashi_Blueprint を配置できている
例示の簡単のためモデルデータをレベルエディターへドラッグアンドドロップすれば生成される状態で紹介します。 C++ コードで実装する場合、実行中に動的にオブジェクトを生成する場合も本質的には同様です。
3. つるはしの頭の部分にだけ当たり判定を付ける
- Tsuruhashi_Blueprint オブジェクトの RootComponent の StaticMeshComponent に
+Add Componentで Cube を追加する - 追加した Cube の Tsuruhashi_Blueprint オブジェクト内での Location と Scale を適当に設定して当たり判定としたい空間を占めるように設定する
- 追加した Cube のプロパティー Collision の
Generate Overlap Eventsが ON になっている事を確認(デフォルトでON)Collision PresetsをOverlapAllDynamicsに設定
- Tsuruhashi_Blueprint オブジェクトの RootComponent の StaticMeshComponent のプロパティー Collision の
Generate Overlap Eventsを OFF に設定Collision PresetsをNoCollisionに設定
- Tsuruhashi_Blueprint オブジェクトを
Edit Blueprintして Event Graph にEvent ActorBeginOverlapに当たり判定に伴う処理を実装する- note: 動作確認目的では
Event ActorBeginOverlapのOther ActorからGet Object NameしてPrint Stringすれば十分
- note: 動作確認目的では
- 動作確認が済んだら Cube のプロパティー Rendering の
Visibleを OFF に設定
以上のように当たり判定用に Cube あるいは必要に応じて Sphere や Cone などをコンポーネントとして追加して組み立てると一部分に当たり判定を持つ「つるはし」のような道具の実装は簡単にできる。



4. 応用
- プレイ中の視認によるデバッグ目的や、エンドユーザーへ当たり判定の表示機能を提供したい場合は §3 で追加した Cube の
Visibleを適当なトリガーで ON/OFF できるようにし、マテリアルも当たり判定の可視化用に適当な半透明の黄色ベタなどを設定するとよい。 - 当たり判定の可視化が UE4Editor の開発環境の表示機能だけで十分でメッシュとマテリアルによる表示が不要な場合は StaticMeshComponent の Cube や Sphere ではなく
Box CollisionやSphere CollisionやCapsule Collisionをコンポーネントとして追加するとよい。- note: C++ コードの場合は
UBoxComponentやUSphereComponentやUCapsuleComponentを ctor 等で生成してSetupAttachmentする。
- note: C++ コードの場合は
- アクター単位でなくコンポーネント単位で当たり判定を行いたい場合は Event Graph で
Event ActorBeginOverlapを定義せずにBind Event to OnComponentBeginOverlapを定義し、そのTargetにCubeコンポーネントを与え、EventへOnComponenBeginOverlap_Cubeなどお好みのユーザー定義イベントを束縛させるとよい。- note: C++ コードの場合は
OnComponentBeginOverlap.AddDynamicで実装する。
- note: C++ コードの場合は


5. 参考
- UShapeComponent | Unreal Engine API Reference
- Unreal Engine | イベント
- Event ActorBeginOverlap | Unreal Engine Blueprint API Reference
- Unreal Engine | 5.オーバーラップしているアクタをテストする
- OnComponentBeginOverlap | Unreal Engine API Reference
- Unreal Engine | 動的デリゲート
- UE4: C++ クラスで実装したアクターのコンポーネントの OnComponentBeginOverlap.AddDynamic 等がうまく動作しない時に確認すること - C++ ときどき ごはん、わりとてぃーぶれいく☆