Animation Layer Interfaceについて少し触りました


あまり大したものを書けなさそうですが、とりあえず触ってみたレベルですが記事にしてみます('ω')

使用Verは4.26です

こちらは公式ドキュメントになります。使用方法はだいたいこちらで分かると思います。
https://docs.unrealengine.com/ja/AnimatingObjects/SkeletalMeshAnimation/AnimHowTo/LinkedAnimBP/index.html


こちら手を挙げて横断歩道を渡るも変態っぽくなってるグレイマンさんの図
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/8737d0d5-2fd7-bd6e-3cc2-330eb23edfea.gif)



一応画像左から作成手順も説明します。
![useasset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/0368cba8-21e3-b822-1437-b1a7f47c8cbe.png)

## 1．AnimationLayerInterfaceを作成
（ここではABP_GrayManInterfaceと名付けました）
![makeAnimLayer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/85e6ff6c-45af-b467-3270-75f0481340d6.png)

作成したInterfaceを開いたら
AddNewして
InputPoseもなにもない”RightHandup”
InputPoseが一つあり、FloatをInputする”LeftHandup”を追加しました。

2種類作ったのはテストで試してみるためで、特に意味はありません。

![addlayer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/2a0f81df-9daf-eeef-e411-5c860a14981e.png)
***
## 2.ABP_Handup
とりあえず普通にグレイマンのスケルトンでABPを作成してください。


ClassSettingで作成したInterfaceを追加します。
![handupsetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/ba673b2d-0347-8e21-6aaf-bdd1bd1b6dc8.png)

そうすると作成したものがMyBlueprintに出てくるのでそれらをWクリックで開いて、
![myblueprint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/6296bab1-c356-d695-0e2f-fcfc50e30e1e.png)

LeftHandup内：Layerd blend per bone は手を挙げるアニメーションの動く部分骨の根本を設定してBlendDepthを1に設定してます。
![left.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/70507a5e-fa21-9043-2f42-1aff76e7313b.png)

RightHandup内:アニメーションの再生を繋げるだけです。
![right.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/b2678df4-2e38-6fcc-4f17-3a9b89ac177a.png)

ABP_Handupは以上になります。

***
## 3.AN_LeftHandup / AN_Righthandup(※おまけ)

スケルトンのアセットかアニメーションアセットで画像のようにすればボーンを変更したポーズ時のアニメーションが作成できます。
![createanim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/7a4ffdfd-440f-a01e-2189-49366e860e90.png)


***
## 4．ThirdPerson_AnimBP

アニムグラフはこんな感じで試してます。
![animgrapgh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/09a0c5e9-e9e7-326e-bba8-623bfae1ccf3.png)

LinkedAnimLayerを作成してSettingのLayerをLeftHandupを選択すればInputピンが出ると思います。
ThirdPersonにもともとあるDefaultステートマシーンに繋いでfloat変数は初期値0を入れています。
![linkanimlayer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/389421da-93ad-bb00-55e0-690ff4e435bc.png)


※DefaultのPose と　Use cached pose 'Default'は（New Save Cached Pose / Use ”作成名”で作成できます）

LayerBlendPerBoneに先ほどと同じようにLinkedAnimLayerを作成してRightHandupを繋げました。

WクリックするとLayerのグラフになるのですが
ここは後で追加する”LinkAnimClassLayers”__ノードを使用してない__時に呼ばれます。（リンクする/しないとここでは省略）
例えば、以下の画像でリンクしていない状態だとInputPoseをOutputしています。そのままですね。
ちなみに画像下にあるJumpLoopアニメーションを入れるとリンクしてない時は__JumpLoopが再生されます。__
リンクした時はリンク先のアニメーションが再生されます。

画像はRightHandupの中身ですが、LeftHandupの方はIdleアニメーションでも入れておけばいいと思います。
何も繋げなくても動きはしますが、PlayするとTポーズになるかもしれません。
![animlayerin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/5c36bdaa-4730-af93-352d-f18e96543377.png)

Initerfaceに追加した2種類ですが、floatを渡せるようにしておけばABP_Handup側でBoneの処理をさせることができてコンパクトになりましたね。

***

## 5.ThirdPersonCharacter

ABP_Handupをリンクさせます。

実装は必ずここというわけではなくプロジェクトによります。楽なのでここにしました。

端的に言えば画像のノードをMeshから呼び出し、InClassには作成したABP_Handupを指定するだけでリンク/アンリンクされます。
![LinkClassLayer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/b080774b-eb16-dbd8-f443-4a06170b0bcb.png)![unlink.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/fa437e09-36cd-c705-37a4-379f9b007692.png)

作成したアニメーションがポーズで寂しいので最初のGIFみたいにする場合はこんな感じで適当にBlend値を渡してます。
画像は左クリックで左手ですが、右クリックVerで右手あげるようにしてます。
※画像では最後にUnlinkしてますが両手ともにABP_HandUpのため
アンリンクすると両手ともに通常状態に戻りますので注意。
![graymanbp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530052/a5c2321c-367b-b5bd-62b8-8d495d8ec5c8.png)

***

ひとまず以上です。
公式のある通りABPごとに分けれたり、必要のないアセットは読み込まないようにできるのでアニメーションが複雑になりそうならこれからは使用していきたいですね。🐈
昼休み休憩にちまちまやってたら全然大したこと書けなかった...(いつものことなんですけど＞＜)
みなさん神記事ありがとうございます。