1
1

ブループリントで作る射撃管制システム(FCS)

Posted at

SpaceCombatSB - Unreal Editor 2024_06_29 13_49_26.png

概要

現在鋭意制作中のプロジェクトで使用予定のPDC(CIWS)用の制御機構。
外部アセット参照を極力しない、自己完結した管制システムを目指したもの。

基本要件

作成にあたって要求したのは主に次の3つ

  • 偏差射撃が行えること
  • 標的の速度を内部で算出できること
    (速度を直接与えることはしたくない)
  • あまり処理負荷をかけないこと(大事)

アプローチ

最終的にこの図のようなアプローチで処理を作ることにした。

結果

実際に組んだブループリントはこんな感じ。
全体
BP_PDC1 2024_06_29 14_12_40.png

照準位置算出部分

全景
BP_PDC1 2024_06_29 18_51_13.png
計算サイクルの動作クロックはTimerを使って20fpsに制限しているため、各種計算は1秒を基準にしている。

  • 速度算出
    SpaceCombatSB - Unreal Editor 2024_06_29 19_01_30 - コピー.png

    • 変数"TGT-LastPos"が前サイクルでの標的の位置、"TGT-CurrentPos"が現在のサイクルでの標的の位置情報を格納している。
    • ここで計算した2座標間の距離は1/20秒あたりのものなので、一度20倍して1秒あたりの移動距離に寒山する。
  • 到達時間計算~未来位置算出
    SpaceCombatSB - Unreal Editor 2024_06_29 19_01_37.png

    • 自身と標的の距離を計算し、発射する弾の速度(現在は120unit/flameで固定)から到達所要時間(秒)を計算する
    • 標的の進行方向ベクトルに速度と所要時間を乗算し、未来位置を算出する
  • 未来位置出力~次サイクルへの受け渡し
    SpaceCombatSB - Unreal Editor 2024_06_29 19_01_30.png

    • "AimPosition"に算出した未来位置座標を入力することで測距は完了とし、次の計算サイクルのために"TGT-LastPos"を上書きする。

補足

標的の選定

標的の探知はBigin Overlapイベントを使用しているが、同時に複数の標的が射程内に存在している場合が高い。そのため探知した標的は配列に格納し、順番に狙う形式を取る。

最初の計算サイクル

標的を選定した最初の測距処理には前回の位置というものが存在しないので、ターゲット切り替え時は現在位置をそのままTGT-LastPosとして流用する。

照準

砲塔と砲身を指向する方向についてはこの記事を参照されたし

実行

画面左中央から飛来するミサイルを迎撃させてみる
※デバッグのためLine Traceで算出した未来位置を表示してある

終わりに

モジュラー化とまではいかないが処理ごとにまとまった構造になっているため、特に測距部分はかなり汎用性の高いものができた。
自分への注意点として、制御処理と実際の発射処理のノードが直結してしまったため制御処理の動作クロックを下げると発射レートもそれに伴って低下してしまう。実際の制作に使用する際には発射処理だけは分離しておかなければならない。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1