お世話になっております。
現在、下記のような手順でシーケンサーの作業を行っております。
1. ASkeletalMeshActorを継承したBlueprintクラスのアクターをレベルに配置する
2. 手順1のアクターのSkeletalMeshComponentのSkeletalMeshに任意のメッシュを設定し、AnimationModeを「Use Animation Blueprint」に設定,AnimClassにAnimationBlueprintクラスを設定する
3. シーケンサーで作業を行う(手順1のアクターのアニメーション制御も含む)
しかし、たまに、上記手順1のアクターのSkeltalMeshComponentのAnimationModeが勝手に「Use Custom Mode」に切り替わってしまう事があります。
(シーケンサー側ではSkeletalMeshComponentのAnimationModeのトラックは追加しておりません)
どのタイミングで現象が起きているのか分からず再現環境が用意できないため、漠然とした質問で申し訳ありませんが、SkeltalMeshComponentのAnimationModeが勝手に「Use Custom Mode」に切り替わってしまう原因としてどのようなものが考えられるでしょうか?
よろしくお願い致します。
お世話になっております。
まずエンジンコードを確認した所、「Use Custom Mode」(= EAnimationMode::AnimationCustomMode
)に切り替える処理は UAnimCustomInstance
の BindToSkeletalMeshComponent
関数内 でのみ行われていました。 そして、この処理は シーケンサーのカーソルが Animation TrackのSectionに入った際に呼ばれる FComponentAnimationActuator
の Actuate
関数から呼ばれています。ただし、 UAnimCustomInstance::ShouldUseSequenceInstancePlayer
における以下の判定を通らないと「Use Custom Mode」には切り替わらないはずです。
(AnimInstance == nullptr || SkeletalMeshComponent->GetAnimationMode() != EAnimationMode::AnimationBlueprint || AnimInstance->GetClass() != SkeletalMeshComponent->AnimClass || !SkeletalMesh->Skeleton->IsCompatible(AnimInstance->CurrentSkeleton));
まず考えられるのは、シーケンサを開いている状態でSkeletal Mesh Componentの詳細パネルからAnimation Modeを「Use Animation Blueprint」以外に切り替えることです。この操作後にAnimation TrackのSectionにシーケンサのカーソルを移動すると、 SkeletalMeshComponent->GetAnimationMode() != EAnimationMode::AnimationBlueprint
の判定が通ってしまうため、「Use Custom Mode」に切り替わってしまいます。
まずは上記の操作を行った可能性があるかをご確認いただけますと幸いです。また、ご報告頂いた現象が頻発する場合は、上記の処理部分にBreak Pointを貼って頂いて、どの操作が原因でUse Custom Modeが切り替わっているのかをご確認頂いた方がよいかもしれません。
また、少し話は変わるのですが、シーケンサのEdit Optionsを切り替えていただくことで、プロパティの変更操作がシーケンサに影響するか否かを制御することが可能です。もしかすると、こちらの設定を切り替えていただくことで問題が解決するかもしれません。ご参考になれば幸いです。
[UE4.17 リリースノート][2] の「シーケンサー編集とレベル編集」より
よろしくお願いいたします。
ご回答ありがとうございます。
いただいた情報を元に、どこが原因でUse Custom Modeへの切り替えが起きてしまっているのかを確認してみます。
また、Edit Optionsの情報もありがとうございます。こちらも参考にさせていただきます。
ありがとうございました。