お世話になってます。
表題の件で、負荷や拡張性を見据えてこのまま実装を進めて良いのかかなり悩んでおり、Forumに投稿しました。
以下、具体的な内容になります。
概要
バイオハザード7や8では、インタラクト可能なアイテムに近づくと以下のようなアイコンが表示されます。(以降このアイコンのことを強調表示といいます)
これを自分のゲームに実装したくて、現在奮闘中です。
試した事
①アイテムのBPにCollisionを用意してうまい事やる
ゲーム内で色々試してみて、まずは以下のような仕様だと仮定しました。
プレイヤーが強調表示可能な範囲にOverlapし、強調表示可能なView/angleの場合、強調表示する
この機能を実装するためにSphereCollisionComponentをもったBP(以降、ItemBP)を作成し、以下のような内容で実装しました。
- ItemBPのSphereCollisionにPlayerがOverlapしたら、インタフェースで自身の参照をPlayerControllerに渡す
- PlayerControllerは受け取った参照を強調表示可能アイテム配列に格納する
- PlayerControllerで視界を取得し、強調表示可能アイテムが視界の特定の範囲内に入ったら、そのItemBPに対してインターフェースで通知を行う
- 通知を受け取ったItemBPは設定されている強調表示用Widgetに対してインターフェースでアニメーション開始通知を送り、setVisibilityでtrueを設定する
この内容でも強調表示自体はできるのですが、アイテムとプレイヤーの間に壁がある場合でもアイコンが表示されてします。
そのため、それを防ぐためには強調表示可能アイテム配列に入ってるActorとLineTraceで結び、間に壁などがある場合は強調表示しないなどの仕様を追加で実装する必要がありました。
②MultiTraceを利用する
①のような経緯があり、他の人はどのように実装しているのか気になり始め、色々しらべてみたのですが全く同じ要件を実装している人は多くありませんでした。
ですが、このような動画を見つけ、初めてMultiTraceの存在を知りました。
一見、楽に実装できそうだったのですが、アイテムごとに範囲を変えたい場合などに色々と面倒そうだと感じています。
質問
上記のような状況で、①でも②でもごにょごにょ付け足してやれば要件を満たせるような実装ができると思うのですが、MultiTraceという初めて知る機能も出てきたので、「もっとスマートな方法があるのでは?」という疑問が常につきまとっています。「動いていればそれが正解」という名言もありますが、一種の正解のようなものを知りたく、アドバイスいただけると非常に助かります。
作業環境
- Unreal Engine 5.2.1
- Windows