関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2016.10.29UE4UE/ Animation
今回は4.13で新たに追加された[Sub Animation Blueprint]についてご紹介したいと思います。
SubAnimationBlueprintの紹介前にそもそもAnimationBlueprint??という方はドキュメントを一読お願いします。
ドキュメントでも軽く触れてますが、簡単に言うとAnimationBlueprint内に他のAnimationBlueprintが持てるようになり処理単位でAnimationBlueprintを管理できるようになります。
また別アセットでの管理になるため複数人での作業をしてる場合などではメインとなるAnimationBlueprintで大きな状態分け(例えば、「シナリオパート」「バトルパート」のような)をしそれをSubAnimationBlueprint
を使用することで競合を起こすことなく作業を進められとても便利です。また1度作ればスケルトンが同じであれば別のAnimationBlueprintでも使いまわすことができます。
では早速SubAnimationBlueprintを使ってみたいと思います。
まず初めに普通にAnimationBlueprintを使用して作ってみました。名前は仮に「ABP_MainThirdPerson」としてあります。
ステイトマシーンでは[FreeMode][BattleMode][AdventureMode]という状態をそれぞれ定義し下のようなかんじでモーションが切り替えわるようになってます。
その先でそれぞれ1つステイトマシーンを作成してその下で状態を分岐してます。下の画像は[FreeMode]のステイトマシーン(FreeModeStateMachine)内部です。
つぎにSubAnimationBlueprintの機能を使用して作ってみます。今回はそれぞれ[FreeMode][BattleMode][AdventureMode]内にあるステイトマシーンをSubAnimationBlueprintに任せたいと思います。
手順
1:「ABP_MainThirdPerson」と同じスケルトンを使用して[ABP_Sub_ThirdPerson_FreeMode][ABP_SubThirdPersonAdventureMode][ABP_SubThirdPersonBattleMode]を3つ作成
2:ステイトマシーン内で[Sub…]と入力すると[Sub Anim Instance]をというノードがあるのでそれを選択するとInstanceClassというのがあるのでそれを先程作成したAnimationBlueprintを選択します
このとき、違うスケルトンの場合はここのリストに表示されません
3:これでそれぞれの状態用AnimationBlueprintを指定すればメインは遷移させる状態だけ管理すればいいのですっきりさせることができま。。。
今回触ってみてわかったことをまとめてみます。
今回であれば[ABP_MainThirdPerson]内で[ABP_Sub_ThirdPerson_FreeMode]は1つしか指定できません
状態が変わった先で同じ[ABP_Sub_ThirdPerson_FreeMode]をBlendノードなどで使用するといったこはできないようです。あくまで1種類づつしか指定はできないようです。
今回のような状態を分けた先でそれぞれ別のSubAnimationBlueprintを指定しようとしたのですがこれをするとクラッシュが起きてしまいました。。。
1つ目は大丈夫なのですが2つ目のSubAnimationBlueprintをコンパイルしようとするとクラッシュしてしまいました。
ただ同じ階層で複数のSubAnimationBlueprintは使用できるのは確認できたので今回の場合は
[BlendPoses]を使用して状態を分岐させてSubAnimationBlueprintを使用しました。
[Sub Anim Instance]ノードに指定したAnimationBlueprintには直接アクセスはできないようです。
個人的にはAnimationBlueprintが必要な情報はAnimationBlueprintが自分でBlueprintにアクセスする形にしてるのでなくてもいいのかと思ってるのでいいんですが
どうしても必要なときはインスタンスを所持してるUSkeletalMeshComponentを拡張するなどの対応が必要です。