マルチスレッドアニメーションとアニメーションレイヤーを用いたアニメーションの実装

マルチスレッドアニメーションとアニメーションレイヤーを用いて、走りのロコモーションを実装する。

AnimationBlueprint を作成

AnimationBlueprintを新規作成し、「ABP_Base」と命名する。

「CH_Player」の [Mesh] を選択し、[Animation] > [AnimClass] を「ABP_CharacterBase」に設定する。

「ABP_CharacterBase」の AnimGraph を開き、[StateMachine] を追加して「SM_Locomotion」と命名し、[OutputPose]とつなげる。

「SM_Locomotion」の中に入り、下のようにステートを組む。

AnimationLayer を作成

AnimationLayerInterfaceを新規作成し、「ALI_AnimLayer」と命名する。

4つの AnimationLayer を作成する。

コンパイルして保存する。

AnimationBlueprint で AnimationLayer の設定

AnimationBlueprint「ABP_CharacterBase」を開く。
[ClassSettings] > [Interfaces] > [ImplementedInterfaces] > [Add] から「ALI_AnimLayer」を選択し、コンパイルして保存する。

[AnimGraph] > [SM_Locomotion] > [Idle] を開き、[MyBluprint]パネルから「FullBody_IdleState」をドラッグ&ドロップして [OutputAnimationPose] につなげる。

[Run_Start]、[RunCycle]、[RunStop]も同様に行い、コンパイルする。

AnimNode関数の実装

AnimationBlueprint「ABP_CharacterBase」の [ANIMATION LAYERS] > [Full Body Idle State] を開く。
「Sequence Player] ノードと [Output Pose] ノードをつなぐ。

[Sequence Player] > [Details] > [Functions] > [On Become Relevant] > [Create Binding] から関数を作成し、「SetUpIdleAnim」と命名する。
「On Become Relevant」は、ノードに関連性が生じたときに呼び出される。

関数のカテゴリを「AnimNodeFunctions」にする。

以下のように関数を組む。

[FullBody_IdleState] > [Sequence Player] > [Detail] > [Settings] > [Sequence] の値を「Dynamic Value」に変更する。

武器レイヤーの作成

新しいAnimationBlueprint「ABP_Combat」を作成する。
そして先ほど作成した「ABP_CharacterBase」を継承させる。

[Class Defaults] > [Details] > [Anim Set Idle] > [Idle Hip Fire] に使いたいアニメーションをセットする。

レイヤーを指定するロジックを組む(仮)

レイヤーを指定するロジックを組む。
ここでは、仮組みしてものを記載する。

そして実行すると、「ABP_Combat」で定義したアニメーションが再生される。

「Run_Start」「Run_Cycle」「Run_Stop」についても同様に作っていく。

アニメーションの遷移ルールを作する

「ABP_CharacterBase」の [FUNCTIONS] > [Override Function] > [Blueprint Thread Safe Update Animation] から関数を作成する。

UpdateRotationData関数を作成し以下のように設定する。

そして以下のようにBPを組む。
※スレッドセーフな関数では、GetActorLocationなどは使えない。[Property Access]を使う。

同様にして「Update Velocity」関数も作成する。

そして「Blueprint Thread Safe Update Animation」関数を編集する。

「Idle」⇒「Run_Start」の遷移を定義する。「HasVelocity」がTrueなら遷移するようにする。

「Run_Start」⇒「Run_Cycle」の遷移を定義する。「Run_Start」のアニメーションが終わったら自動で遷移すればいいので、[Automatic Rule Based on Sequence Player in State] にチェックを入れる。

同様に他の遷移も定義する。