概要
アクターの回転はさておきコンポーネントの回転や移動で"Set World ○○"シリーズを多用して処理負荷を爆上がりさせてしまった経験があるので全部Relative系列でやる方法の覚書とその情報共有。
これはあくまで予測だが、例えばアクターの移動に伴うコンポーネントの移動など、平時の内部処理がRelativeかそれに準ずる方式が取られており、"Set world"シリーズを使うとそれらを全てオーバーライドする必要から追加の負荷が掛かっている(二度手間になっている)のかもしれない
この記事では主にコンポーネントをどこかワールド空間上の特定座標の方向に指向したい場合を主とした内容で記そうと思う。
(※自分は脳内計算が得意ではない都合上、直感的、視覚的に扱えるようノードを組んでいるのでmath系ノードの使用数が多少増えるかもしれないが悪しからず...)
今回はこのアクターに付いているSphereとそれに紐づけたCube2本(お察しください)を指向してみる
基本
とりあえず素直に特定座標を向かせる
ノード全景
処理の流れとしては、
となる。
回転する軸を限定する場合は算出したRelative回転を一度breakしてほしい軸のみmake rotatorに接続することになる。
動作時の様子
時間当たりの回転速度を制限する
即座に目標方向を向くのではなくゆっくりと向いて欲しい場合
Relative回転は-180°~+180°で表されるため、そのままclampすると変化量を安定して制限できない。
なのでまず絶対値で"大きさ"をclampしたのち、signノードで正負の向きを戻してやる方法を取る。
そしてRelativeは自身のローカルではなく親のローカル座標系のため"差分"をそのまま使うことはできないので、差分を計算したのち現在のRelative Rotationの値と合算するしなければならない。
おまけ - アクターを指向する
制御対象がアクターの場合は座標系をRelativeからワールドに戻す必要があるのでInverseした値をCompose Transformに通す。
- 入力するTransformはInverseで用いたTransformと同じものを使う。
一度Transormの形を作って座標系を変換した後もう一度Rotatorに分解する必要があるので手間と面積を取るのが少々面倒なのでCompose周辺だけ関数かマクロを作っておくと吉。