Unity 爆風の射線が通っているかどうかの判定

実現したいこと

Unityで3Dシューティングゲームを作ってます。
爆風の射線が通っているかどうかの判定を取りたいです。

前提

Unityのバージョンは2021.3.16f1です。
C#を使ってます。

発生している問題・エラーメッセージ

現在Physics.OverlapCapsuleを用いて爆風の判定を取っています。以下の画像で黒い円が爆風範囲、緑の四角がプレイヤーのコライダーです。
イメージ説明
上記の場合ではプレイヤーが爆風範囲内に居るので、爆風が当たったという判定で問題ありません。

しかし、爆風地点とプレイヤーの間に壁(画像の赤色の線)があった場合は爆風が壁に遮られるので、爆風の判定は以下の画像の青い範囲になるべきです。
イメージ説明
上記の場合ではPhysics.OverlapCapsuleだけでは当たった判定になってしまうので、爆風地点からプレイヤーの座標までPhysics.Raycastで壁があるかどうかを調べれば解決します。

ですが、壁が複雑な形をしている場合はそうも行きません。以下の画像の場合、最終的には当たった判定になるべきです。ですが、爆風範囲にプレイヤーが居るのでPhysics.Raycastの判定をしますが、爆風とプレイヤーの座標の間に壁があるので当たってない判定になります。また、より正確に判定する為にコライダーの角に対してもPhysics.Raycastの判定をしようと考えましたが、この場合だと当たってない判定になってしまいます。
イメージ説明
判定するコライダーの座標を増やせばかなり正確に判定できますが、爆風の範囲が広がる程、そして座標を増やす程重い処理になってしまいます。また、プレイヤーだけではなく複雑な形のオブジェクトにも適用したいので、汎用的な対処方法を教えて頂きたいです。
宜しくお願いします。

コメントを投稿

0 コメント