ここはControl Rig機能調査の子頁です
任意の座標に対して指定した骨の指定軸を向ける制御
Epic Skeletonで言えばhead骨のY軸を任意の座標に向ける
この記事では胴と首の2段階でLook AtするRigを作成する
Controlを作成
Controlの位置が実行中は特定の骨座標に依存しないので、今回はSpaceなしにしてみる
顔の正面をControlの初期位置にする
Setup Eventノードからheadの正面にControlを動かす
この時に回転も取得しておく
いきなりheadに依存しとるやん
Setup EventはRigが有効になった時に1回だけ走る処理なので許して
公式Doc参照
Gizmoはお好みで
今回はGizmoがZ軸を向いた矢印になるように、Gizmo Transformで回転しておく
X軸
Forwards Solveの先にAimノード作成
Itemが動かす対象
Primary
要するにFront Vector
Itemに指定したBoneのどの軸をTargetに向けるか指定
head骨ならY軸をControlに向けたいのでAxis=(0,1,0)
TargetにはControlの座標を指定
SecondaryはItemに指定したBoneのどの軸をPrimary
要するにUp Vector
Primaryだけだと姿勢が定まらないので補助
head骨はX軸方向が頭上なのでAxis=(1,0,0)
TargetにはControlのZ軸方向を指定
いずれもTarget SpaceはGlobalにしたいので、None指定にしておく
ついでにDetails欄からDebug Settingsを設定
Enabledを有効にしてLine表示
水色がPrimary、青色がSecondaryのTargetとして可視化
Scaleを50にして見やすくする
head制御だけだと、実は首元が回ってない
neck_01の方を回してみよう
Controlはheadと同じものを使う
「neck_01の回転によって、headがControlの方を向いている」という挙動を目指す
Debug Lineは、neckを制御することでHeadノードがちゃんとControlを見ているのかの確認用
neck_01としている所をspine_02にすれば胴向け処理となる
Aim骨の子からheadまでの骨にAnimationが付いている場合ずれる
その場合は一旦初期姿勢に固定しちゃえばよい
やっちゃったらまずい場合もあるので仕様と要相談
例えばAnimStarterPackに入っているAim_Space_Hipは以下のような動きになる
Preview Scene SettingsタブからAnimationを指定できる
胴から首にかけて、段階的にLook Atさせたい
Item Chain + For Each Itemのコンボを使う
For EachノードのratioピンをEvaluate Curveノードに入力することで徐々にAimの効きを強めていく
ABPで使えるLookAtには角度をClampする機能がある
参考:UE4 LookAt機能を使ってGrayちゃんに見つめてもらってみる - Let’s Enjoy Unreal Engine
注目先をClampする仕組みのようだ(AnimationCoreLibrary.cppのSolveAim関数を参照)
Control Rigには今のところ無いっぽい
Rig内でやるか、Aim座標を渡してもらう時にClampしてもらう約束にするかは要件次第かな…