発射体回避

Last-modified: 2024-02-27 (火) 00:44:05

編集時ver. 3.8.5

概要

発射体回避(Projectile Avoidance)は、敵から飛んでくる発射体(ミサイル/アドキャ砲弾/CRAM砲弾)に対し、旋回したり機首を上げ下げしたりして回避をする動作をするための追加ルーティンだ。

発射体の距離、速度、角度などいろいろな情報から実際に式を組んで動作させる必要があるため、慣れが必要だが、ビークルの生存性を格段に上げられるだろう。

AIの追加ルーティンの1つであり、使うにはAIカードのビヘイビア&追加ルーティンが必要だろう(ビヘイビアを必要としないビークルは除く)。

UI解説

PA01.png

テスト用ミサイル出現
敵のビークルを出さずに、位置や高度、接近速度などの条件を指定した発射体を仮想上で出現させるためのもの。
下の方で書いた構文がちゃんと動いているかの判断に使用する。
後述

最優先する発射体の決定
検知した全ての発射体の情報(距離、高度、接近速度、角度)から、下で使用する発射体1つを決めるもの。
例えば一番距離が近い発射体や、一番着弾が早い発射体が最優先されるようにするなど。

発射体の回避方法
上で決めた1つの発射体の情報(距離、高度、速度など)から、どのように回避するかを決めるもの。
着弾数秒前に思いっきり旋回するように組むのが定石だろう。
少々トリッキーだが、ここからA~E軸を通してブレボに発射体の情報を送り、より詳細な回避機動を組むこともできる。

テスト用ミサイル出現

PA4.png
「有効」ボタンを押すと、それぞれのミサイルが仮想的に出現し、各パラメーターを調整できる。それぞれの項目は以下の通り。

PA02_0.png
PA03_1.png

最優先する発射体の決定

PA05.png

Priority

実際に発射体の優先度を計算する部分。
上の項目にある"Distance", "Altitude", "ClosingVelocity", "AngleFromIntercept", "t"の変数、有限小数、円周率"pi"(=3.1415...)を使用し、
下の項目にある演算子の他、"+", "-", "*", "/"などの基本的な演算子で計算する。
大文字小文字は区別される("sin()"ではダメだが”Sin()"ではOK)。
変数は一時変数である"A", "B"も使用できる。後述。
PA04.png

A, B

上のPriorityに書く数式を短くするためのもの。その他推進軸で使用するA~Eとは関係ない。長い数式を書くわけでなければ必要はない。
簡単に言えば「数式の塊を格納するため」の場所。例えば
Priority

If(ClosingVelocity*Cos(AngleFromIntercept)<=300, ClosingVelocity*Cos(AngleFromIntercept), 0)

を、
Priority

If(A<=300, A, 0)

A

ClosingVelocity*Cos(AngleFromIntercept)

と書ける。
この数式自体にはあまり意味はない。

発見した発射体の優先度をここで全て計算し、その中で最も優先度が高い発射体の情報を下に送る。

発射体の回避方法

PA06_0.png
No linkをクリックすると、操作対象となる推進軸を選択できる。
右の窓は計算式を書く場所。デフォルトだと"If(100-d,1,0)"が入っており、これは最も優先度の高い発射体が100m以内に入ると1を出力する(それまでは0を出力)計算式である。
上の項目にある変数、有限小数、円周率"pi"(=3.1415...)を使用し、
下の項目にある演算子の他、"+", "-", "*", "/"などの基本的な演算子で計算する。
1つの推進軸に1つの計算式を割り当てられ、最大3つの推進軸を操作可能。
A, Bは前述の通り一時変数である。
PA10.png
PA09_0.png

設定方法

まずは優先度を考えよう

よくある設定

最も近い発射体を優先する(デフォルト)

1/Distance

コピー!↑

最も弾着の早い(と思われる)発射体を優先する

ClosingVelocity/Distance

コピー!↑

もう少し踏み込んだ設定

  • If文の条件を"Abs(ClosingVelocity/Cos(AngleFromIntercept))<=300"にすることで、速度が300m/s以下とそれより上を分けることができる。これを満たすものはCRAM/ミサイル、満たさないものはアドキャと分けられる。
    (重力による加速や敵ビークル速度による速度の加算を考えると、400くらいにしてもいいかもしれない)

どのようにビークルを回避させるか

よくある設定

上で決めた最優先の発射体が100m以内に入ると1を出力(デフォルト)

If(100-d,1,0)

↑コピ!
動作させる推進軸をPitch Up(+)/Down(-)に設定すると、発射体が100m以内になったらピッチアップして避ける。

ブレボに発射体の情報を出力

操作する推進軸をブレボの推力コンポーネントで受け取れるようにし、ミサイルの距離などを-1から1の間に丸めると、ブレボでそれらの情報を参照できるようになる。
PA07.png
PA08.png