今回は4.13で新たに追加された[Sub Animation Blueprint]についてご紹介したいと思います。
SubAnimationBlueprintの紹介前にそもそもAnimationBlueprint??という方はドキュメントを一読お願いします。
・SubAnimationBlueprintの機能
ドキュメントでも軽く触れてますが、簡単に言うとAnimationBlueprint内に他のAnimationBlueprintが持てるようになり処理単位でAnimationBlueprintを管理できるようになります。
また別アセットでの管理になるため複数人での作業をしてる場合などではメインとなるAnimationBlueprintで大きな状態分け(例えば、「シナリオパート」「バトルパート」のような)をしそれをSubAnimationBlueprint
を使用することで競合を起こすことなく作業を進められとても便利です。また1度作ればスケルトンが同じであれば別のAnimationBlueprintでも使いまわすことができます。
では早速SubAnimationBlueprintを使ってみたいと思います。
まず初めに普通にAnimationBlueprintを使用して作ってみました。名前は仮に「ABP_MainThirdPerson」としてあります。
![%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a31](https://historia.co.jp/wp/wp-content/uploads/2016/10/eb22bf7a906b7f73af3d68cd620dade7-300x123.png)
ステイトマシーンでは[FreeMode][BattleMode][AdventureMode]という状態をそれぞれ定義し下のようなかんじでモーションが切り替えわるようになってます。
![statetest-iloveimg-compressed-iloveimg-resized](https://historia.co.jp/wp/wp-content/uploads/2016/10/statetest-iloveimg-compressed-iloveimg-resized.gif)
その先でそれぞれ1つステイトマシーンを作成してその下で状態を分岐してます。下の画像は[FreeMode]のステイトマシーン(FreeModeStateMachine)内部です。
![%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a32](https://historia.co.jp/wp/wp-content/uploads/2016/10/44d29d2792be3bad9a9ed98c7bbb20d6-300x143.png)
![%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a33](https://historia.co.jp/wp/wp-content/uploads/2016/10/0e4aae38a1f5494592124a884058f7cb-300x145.png)
つぎにSubAnimationBlueprintの機能を使用して作ってみます。今回はそれぞれ[FreeMode][BattleMode][AdventureMode]内にあるステイトマシーンをSubAnimationBlueprintに任せたいと思います。
手順
1:「ABP_MainThirdPerson」と同じスケルトンを使用して[ABP_Sub_ThirdPerson_FreeMode][ABP_SubThirdPersonAdventureMode][ABP_SubThirdPersonBattleMode]を3つ作成
2:ステイトマシーン内で[Sub…]と入力すると[Sub Anim Instance]をというノードがあるのでそれを選択するとInstanceClassというのがあるのでそれを先程作成したAnimationBlueprintを選択します
このとき、違うスケルトンの場合はここのリストに表示されません
![%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a311](https://historia.co.jp/wp/wp-content/uploads/2016/10/f9f2f8267651893dc20507a60167128c-300x161.png)
3:これでそれぞれの状態用AnimationBlueprintを指定すればメインは遷移させる状態だけ管理すればいいのですっきりさせることができま。。。
せんでしたっ!・・・
今回触ってみてわかったことをまとめてみます。
- SubAnimationBlueprintは同じものを何個も指定できない
今回であれば[ABP_MainThirdPerson]内で[ABP_Sub_ThirdPerson_FreeMode]は1つしか指定できません
状態が変わった先で同じ[ABP_Sub_ThirdPerson_FreeMode]をBlendノードなどで使用するといったこはできないようです。あくまで1種類づつしか指定はできないようです。
- 複数の状態の先でSubAnimationBlueprintを使用するとクラッシュする
今回のような状態を分けた先でそれぞれ別のSubAnimationBlueprintを指定しようとしたのですがこれをするとクラッシュが起きてしまいました。。。
1つ目は大丈夫なのですが2つ目のSubAnimationBlueprintをコンパイルしようとするとクラッシュしてしまいました。
ただ同じ階層で複数のSubAnimationBlueprintは使用できるのは確認できたので今回の場合は
[BlendPoses]を使用して状態を分岐させてSubAnimationBlueprintを使用しました。
![test-iloveimg-resized-1](https://historia.co.jp/wp/wp-content/uploads/2016/10/test-iloveimg-resized-1-300x106.gif)
- BlueprintからSubAnimationBlueprintにアクセスする方法がない
[Sub Anim Instance]ノードに指定したAnimationBlueprintには直接アクセスはできないようです。
個人的にはAnimationBlueprintが必要な情報はAnimationBlueprintが自分でBlueprintにアクセスする形にしてるのでなくてもいいのかと思ってるのでいいんですが
どうしても必要なときはインスタンスを所持してるUSkeletalMeshComponentを拡張するなどの対応が必要です。