特定の条件下で、レベルシーケンスでスポーンしたアクターの最初のフレームにアニメーションが流れなくて困っています。
検証から予想した条件は、
・アニメーションバジェットアロケータが有効
・アニメーションブループリントがついている
です。
この条件のアクターをLSでスポーンしてアニメーションを流そうとすると、スポーン直後の1フレームだけアニメーショントラックから流したアニメーションが流れない気がします。
<br/>
=== 添付プロジェクトでの確認方法 ===
確認できるプロジェクトを添付しました。
プロジェクト実行後、PIEを開始して、テンキーの「0」を押していただければ、問題が起こるレベルシーケンスが再生されます。
レベルシーケンスの内容は、キャラクターをスポーナブルでトラックにして、アニメーショントラックでアニメーションを流しているだけです。
スポーンされたアクターには、最初からアニメーションが流れるはずですが、スポーン直後はアイドリングっぽいポーズです。
肉眼で分からない場合は、再生開始(テンキーの「0」)した直後にポーズを押せばアイドリングっぽいポーズで止まります。それか録画してコマ送りしてください。
<br/>
=== 添付プロジェクトの説明 ===
サードパーソンテンプレートをベースにしています。
アニメーションバジェットアロケータを有効化してあります。
サードパーソンテンプレートについてくるキャラクターのメッシュを「USkeletalMeshComponentBudgeted」に変更してあります。
再生開始はレベルブループリント内でやっています。
再生しているレベルシーケンスは「LS_BudgetON」です。
また、LS内のメッシュの「バジェットアロケータに自動登録」のチェックを外したり、ABPを外したりすると問題は起きなくなると思います。
<br/>
<br/>
=== 質問 ===
以上のような問題が出ているのですが、メッシュの「バジェットアロケータに自動登録」のチェックを外すだけでこの問題は起こらなくなるようでした。
質問は、この「スポーナブルで使うキャラだけ「バジェットアロケータに自動登録」のチェックを外す」という運用で問題ないか?また、バジェットアロケータを使うこと自体に問題は無いか?ということになります。
<br/>
それと、この問題に対して、修正の予定があれば教えていただきたいです。
<br/>
よろしくお願いします。
お世話になっております。
調査が難航しており長らくお待たせしております。
引き続き調べておりますが、一旦現時点で可能な範囲で回答させていただきます。
>この「スポーナブルで使うキャラだけ「バジェットアロケータに自動登録」のチェックを外す」という運用で問題ないか?また、バジェットアロケータを使うこと自体に問題は無いか?
バジェットアロケータは負荷軽減のための機能ですので、不要である部分についてはオフにする運用で問題ないと思います。
また、バジェットアロケータは Production-Ready ステータスとなっていますのでこれ自体の使用にも問題はないという認識です。
プロジェクトを添付して頂きありがとうございます。
これを用いて確かにご指摘の通りの挙動となる点を確認しております。
手元で試した限りにおいては StandaloneGame/Package では問題が発生しないように見受けられますが、この点についてはいかがでしょうか。
よろしくお願いいたします。
長らくお待たせしております。
ご指摘の問題については新規不具合としてデータベースに登録される見込みです。
修正について現時点ではご案内できませんが、直接的な原因としては AnimationBudgetAllocator に登録されている SkeletalMeshComponent について初回の TickPose 時にアニメーションの更新がスキップされているように見受けられます。
添付して頂いたプロジェクトにおいては以下のようにして症状を抑制できるようでしたのでワークアラウンドとしてご利用頂けるかもしれません。
`void ABudgetAllocatorTestCharacter::BeginPlay()
{
// Call the base class
Super::BeginPlay();
// 以下追記
if (GetMesh()->IsUsingExternalTickRateControl())
{
GetMesh()->EnableExternalUpdate(true);
}
}`合わせて、先の投稿で触れましたが EnableAnimationBudget のタイミングにご注意下さい。
よろしくお願いいたします。
>手元で試した限りにおいては StandaloneGame/Package では問題が発生しないように見受けられますが
この件についてですが、処理タイミングの関係から BP_GameInstance::Init における EnableAnimationBudget では BudgetAllocator の有効化に失敗していたようです。
仮に LevelBP の BeginPlay から行うように変更することで PIE の場合と同様の状態(1フレーム目にアニメーションが適用されていない)になります。
この件について以下の番号でデータベースに登録されました。
2~3日営業日程度で公開され状況を閲覧できるようになる予定です。
https://issues.unrealengine.com/issue/UE-295494
よろしくお願いいたします。