概要
自主制作プロジェクトで使用する宇宙船に搭載予定の推進制御システム。
スタートレックなどのような慣性を排除したものではなく、スラスター主体の動作を目指す。
基本要件
要求される主な挙動は次の通り。
- スラスターによる平行移動を取り入れる
- 艦首を目標座標に向ける
- 移動方向とそれに関連するスラスターエフェクトの同期
- ローカルのロール回転の基準面を任意に制御できること
アプローチ
本来であれば加速度と速度を内部で疑似的に計算するのがおそらく一番素直だと思うが、残念ながら活路が見出せなかったので今回は、
速度は全て艦のローカル軸ごとに調整し、最後に合算して全体の速度とする
方式を取ることにした。
結果
では実際のブループリントを見ていこう。
この画像のコメント付きノード群が推進システムの全景。
遠目に見ると面倒に見えるが、実は同じ分岐の仕方を軸と動きごとに繰り返しているだけなので取り回しは悪くないと思っている。
これが1モジュールの全体で、この画像のノードではローカルZ軸の推力の係数を計算させている。
まず分岐の内容としては、上から順に
- 下向き(Z軸マイナス)の速度を増やして上向き(Z軸プラス)の速度を減らす
- 垂直方向の速度を0まで減らす
- 上向きの速度を増やして下向きの速度を減らす
となる。
ルートの合流地点で上下の推力を合算してこの軸全体の推力としている
また、分岐の上限として
- 目標座標が自身から見て下側にある
- 目標座標との上下誤差は許容範囲内である
- 目標座標は自身から見て上側にある
となっており、中央ルートがないと一生上下にフニフニ動き続ける恐れがあったので閾値として設けることにした。
よりリアルな速度増減を演出するために上下それぞれの方向で速度を調整したり、Curveアセットを参照して増減値を決定しているため、やっていることの割にノード使用数は多いかもしれない。
同様の構造でそれぞれ
ローカルY軸推力(左右)
ローカルX軸推力(前後)
ローカルZ軸回転(旋回)
ローカルY軸回転(揺動)
ローカルX軸回転(ロール)
も計算した後、
軸ごとの数値を反映する。
実際に動かしてみる
(一定間隔で目標座標をピックアップしてトレーサーで示している)
終わりに
現時点ではまだスラスターエフェクトは実装していないが、条件ごとにルートを分離してあるのでそれぞれのルートに必要なNiagara制御ノードを組み込めばエフェクトとの同期も図れる。
変数の運用上関数にはできない(フレームを跨いでBP内部で情報を保持したい)が、同系統の推進方法を持たせたいアセットには流用できるのでぜひ試してみてほしい。