UnrealEngineで当たり判定をブループリントで作っている時、なんか思い通りにイベントが発生してくれずに困ったり、思い通りの動作にできなかったことはありませんか?
自分も、バルカン砲の弾が背景のCubeを貫通したり、ミサイルがプレイヤーのロボットに当たったときの処理がうまく出来ずに苦戦して苦労しています。
そこで今回はアンリアルエンジンの当たり判定を徹底的に調べてみました。結論をパッとは説明できないので順を追って解説していきましょう。ブログの説明だけでは分かりにくいのでYouTube動画でも動作や挙動を確認してください。また実際に実装したブループリント処理も動画内に載せる予定なので詳しい実装設定を見たい人は動画で確認してください。
また間違いがある可能性があるので、間違いを見つけた人は教えてください。
解説動画
まずは基本的な前提条件
当たり判定の種類
アンリアルエンジンでは2種類の当たり判定を発生させる仕組みがあります。まずは物理的なシュミレーションを行い、他の物体との物理演算で挙動を計算する方法です。つづいては当たり判定を発生させることはできるけれど物理的な振る舞いをしないトリガーと呼ばれるものです。
今回の説明に使用したブループリントや要素
今回は上記の図の6つの役者に登場してもらい当たり判定と発生するイベントを調べました。デバッグする際の名前に使用しているのでよく確認してください。
すり抜けるかどうか?
基本、物理対物理ではぶつかり、トリガーはすり抜けると覚えておくと良いでしょう。
画像はクリックして拡大して見てください。
衝突実験結果・デバッグ生情報
物理弾を各Cubeに当てる
画像が小さいと思った人はクリックすると拡大できます。
トリガー弾を各Cubeに当てる
物理・トリガー弾を各Cubeに当てる
実験結果をまとめ
物理弾を各Cubeに当てる
トリガー弾を各Cubeに当てる
物理・トリガー弾を各Cubeに当てる
どうでしょうか?パターン数が多いのでじっくり見ながら、自分の目的にあうパターンの当たり判定の組み合わせを探してみてください。
よく分からなかった部分
ActorHitに関して
ActorHitというイベントも合ったのですがブループリントの使い方がよく分からなかったので今回は検証からスルーしました。もしかしたらこのイベントでないと実装できないこともあるかもしれませんが、今回は検証で疲れたので諦めました。
Selfのコリジョン設定
コンポーネントではなくブループリント自体のSelfにもコリジョンを設定するところがあるのか?と思いきや今よく見ると、「 During Level Streaming 」なのでレベルをロードしているときにも判定を行うか?どうか?でしょうか?
まとめ
今回の実験結果を元に、自分が実装したい当たり判定を作るには、物理で動かすのか?トリガーで動かすのか?などを考えて実装してください。
実際のゲームで実装していくと意図せずイベントが何度も発生したりよくわからない動きをする場合もあるので、またその当たりは詳しい問題や課題が見つかったときに別途記事にしたいと思います。
今回の記事で基本的な部分は把握できたでしょうか?
コメント