概要
自主制作プロジェクトにおいて某SF宇宙船用の移動処理をBPで実装。
エンジンバージョンは5.2~5.3
基本要件
要求される挙動は...
- 進行方向へ移動する。
- 目標座標を指定し、基本はその座標へ繰り返しアプローチする軌道を取る。
(今回は中央に陣取る"ボーグキューブ"を目標とする) - 一定距離内に障害を検知した場合は旋回しそれを回避する。
- 旋回が終わったら艦のロール軸回転を水平に戻す。
ノード構造
最終的にブループリントはこのスパゲッティのようになりました_(┐「ε:)_
②センサー部分
③制御中枢部分
- センサー部分の情報と追跡対象との位置関係をもとに、大きく分けて4種類の行動に分岐する。
3. 僚艦接近時の回避機動
接近を検知した場合、検知方向と反対側に転舵する
例) 右上方向に検知-->左下方向に転舵
4. トレーサーがターゲットを検知した際の回避機動
左右45°のトレーサーが反応した場合は侵入角度が深すぎるということなので、フレームあたりの旋回角度をより大きくしている。
※ターゲットとの衝突(オーバーラップ)は絵面的に一番避けたいので、分岐の優先順位として最優先になるように配置している。
回転値の算出
これらの分岐を経て実際のrotatorにする処理
アクターから見たアクターのローカル回転は常に0なので、現在値に変化量を与えてワールド回転に戻すというのが基本戦略。
(回転しすぎて裏返ると困るので、再び仮想transformを基準として最終的な回転に制限をかけている
以上のロジックで実際に動かしてみるとこんな感じに
https://youtu.be/BJ1jdWjCp5c
終わりに
実装から半年以上経っての記事作成となったため、改めて見ると計算処理の煩雑さが目立つ他、おそらくTimerノードを用いて動作クロックを30fps程度に落としても問題ない(今ならそうする)。
...が、ロール軸回転の算出で使用した仮想的なtransformを置く手法は我ながら良い発明だったと思う。