0
0

(覚書)回転制御をRelative座標系で完結させたい

Posted at

概要

アクターの回転はさておきコンポーネントの回転や移動で"Set World ○○"シリーズを多用して処理負荷を爆上がりさせてしまった経験があるので全部Relative系列でやる方法の覚書とその情報共有。

これはあくまで予測だが、例えばアクターの移動に伴うコンポーネントの移動など、平時の内部処理がRelativeかそれに準ずる方式が取られており、"Set world"シリーズを使うとそれらを全てオーバーライドする必要から追加の負荷が掛かっている(二度手間になっている)のかもしれない

この記事では主にコンポーネントをどこかワールド空間上の特定座標の方向に指向したい場合を主とした内容で記そうと思う。
(※自分は脳内計算が得意ではない都合上、直感的、視覚的に扱えるようノードを組んでいるのでmath系ノードの使用数が多少増えるかもしれないが悪しからず...)

今回はこのアクターに付いているSphereとそれに紐づけたCube2本(お察しください)を指向してみる
SpaceCombatSB - Unreal Editor 2024_06_29 15_10_47.png

基本

とりあえず素直に特定座標を向かせる
ノード全景
BP_Lookat-Demo 2024_06_29 15_18_53.png
処理の流れとしては、

となる。

回転する軸を限定する場合は算出したRelative回転を一度breakしてほしい軸のみmake rotatorに接続することになる。
動作時の様子
trackingNormal.gif

時間当たりの回転速度を制限する

即座に目標方向を向くのではなくゆっくりと向いて欲しい場合
BP_Lookat-Demo 2024_06_29 18_02_04.png
Relative回転は-180°~+180°で表されるため、そのままclampすると変化量を安定して制限できない。
なのでまず絶対値で"大きさ"をclampしたのち、signノードで正負の向きを戻してやる方法を取る。
そしてRelativeは自身のローカルではなく親のローカル座標系のため"差分"をそのまま使うことはできないので、差分を計算したのち現在のRelative Rotationの値と合算するしなければならない。

動作の様子
trackingSlow.gif

おまけ - アクターを指向する

制御対象がアクターの場合は座標系をRelativeからワールドに戻す必要があるのでInverseした値をCompose Transformに通す。
BP_Lookat-Demo 2024_06_29 17_01_14.png

  • 入力するTransformはInverseで用いたTransformと同じものを使う。

一度Transormの形を作って座標系を変換した後もう一度Rotatorに分解する必要があるので手間と面積を取るのが少々面倒なのでCompose周辺だけ関数かマクロを作っておくと吉。

0
0
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
0
0