[UE4]Control Rig機能調査:LookAt(Aim)をゲーム中に使う
ここはControl Rig機能調査の子頁です
LookAt(Aim)をゲーム中に使う
設計
要件
Characterに対して特定のActorを注目する指示が出せるようにしたい
構成
Character Blueprint(以下キャラBP)
キャラBPの所有Skeletal Meshに設定するAnimation Blueprint(以下ABP)
ABPのAnim Graphに設定するControl Rig(以下Rig)
責任
キャラBP
外部(今回はLevel BP)から注目状態(開始・終了)と注目対象Actorの指示を受ける
注目対象Actorから注目Transformを作る
ABPに注目状態と注目Transformを渡す
ABPは貰った情報をRigに流す
Rigは最新の注目状態と注目Transformを用いてキャラの姿勢を更新する
※今回はこのようにするが、どのProjectでも最適な設計というわけではない。全員が納得するまで責任を押し付けあおう。
Control Rig側の準備
Control RigのMy Blueprintタブから変数作成
注目状態を決めるbool変数
注目TransformとしてTransform変数(World Space)
↑2つは外部からの設定用として、公開変数(Instance Editable)にする
注目TransformをComponent Spaceに変換したTransform変数(Component Space)
Controlを使うか注目Transformを使うかを決めるbool
Aimの割合を示すfloat
Sequenceノードを活用して、Aim処理の前にAimTargetとAimRatioの初期化を行っておく
Controlの代わりに、Component SpaceのTransformでAim処理させる
IsAimingがfalseの時は元の姿勢を保つようにする
AimRatioを初期化用のSetTransformに適用
Aimノードにも適用
Curve値とMutiplyしておけばよい
Animation Blueprintの準備
お手元のEpic Skeleton対応のキャラクターなら何でもOK
ここではBlueprintちゃんのABPを改造して使う
コピーしてオリジナルは残すことを推奨
AnimGraphでControl Rigノードを作り、作成したRigを適用
Control RigノードのDetails欄で制御用変数のUse Pinを有効化
Set Ref Pose from Skeletonを有効化
グレイマンSkeletonのInitial TranformでRigを作っている為
ABP用のbool変数、transform変数を作成してRigに接続
キャラBPから呼び出すための関数も作成
要件によってはBlueprint Inerfaceにしてもよい
ABPのEdit Previewでパラメータをいじって挙動を確認
なんか無限にたこやき要求されている気持ちになる
キャラクターBPの準備
これもBlueprintちゃん付属のBPを使う
コピーしてオリジナルは残すことを推奨
Begin Playで先ほど作成したABPの参照を変数に保存
Blueprint Interfaceを使う場合は不要
注目対象Actorを指定するSetAimTargetイベントを作成
常に最新のActor位置を追従できる様に、Delay 0を使ってループするAimLoop処理を作成
Delayを使ったLoopについてはDelayメモを参照
動作確認
Levelに適当なActorを配置
Level Blueprintで適当なInput Eventを作成し、注目処理を呼び出し
アイドリングアニメーションの首振りに影響されず注視できるはず
注目を滑らかにする
開始と終了でカクっと動くのをどうにかしたい
あと目標がワープするとやっぱりカクっと動くのでどうにかしたい
AimRatio初期化時にAccumulate Lerpで徐々に変化させる
AimノードをAim Mathノードに置き換えて、その出力をこれまたAccumulate Lerpで徐々に変化させる