全てのアニメーションをアニメーションBP内で能動的に決められるのならそれに越したことはないんだろうけど、そうもいかない。どうしても外から特定のアニメーションを再生させたいってなる。で、再生させられるんだが、全てのクライアントでは実行されなかったりする。サーバーで実行できていればレプリケーション定義してあげれば勝手に全てのクライアントで実行できるはずだと思っていたんだが、甘かった。いろんなやり方をして、各種プロパティ値も調べてみたんだが、どう足掻いてもアニメーションBP内の変数をレプリケートさせようとしている限りはダメだった。
結局はキャラクタークラスのブループリントの変数をレプリケーションして、それをアニメーションBPからポーリングで取得する方法にしたら上手くいった。これもアニメーションBP内にパブリックイベントを定義して、キャラクターBPからイベントを飛ばす方法では正しく動かなかった。もしかしたらどこかミスっていたかもしれないが。しかし、ポーリングにするべきだという話があったことは覚えていた。

スレッド セーフであることを確保するために、プロジェクト内のブループリントとコンポーネントから派生したデータ (変数など) へのすべての参照は、アニメーション ブループリントにプッシュするのではなく、アニメーション ブループリントによって呼び出される必要があります。
まさにこれだと思う。イベントで投げる方法にした時は、ちゃんとアニメーションする時と上手くアニメーションできない時があった。ポーリング方式だと確実。でもその代わりにEvent Blueprint Update Animetionで毎回、変数を読み込むことになる。この毎回読むってのが、自前の変数に限らないわけだ。アニメーションさせるアクタのアニメーションに関わるもの全てを読み込んでいる。だけど、こうしないと、ちゃんと同期がとれないのかもね。一部はポーリングで取得、一部はイベントから取得とかだと、一方は早めに取得できて、一方は遅れたりしかねない。そうしたらアニメーションが崩壊しちゃうのかもしれない。
アニメーションBP内の変数がレプリケーションできないようになっているのも同じ理由なのかもしれない。でもそれならアニメーションBP内の変数はレプリケーション設定できないようにしてくれていた方が良かったかもw まあでも勉強になった。エンジン作っている人たちは大変だろうな。
コメント
[…] 【UE5】アニメーションBPの変数はレプリケーションできないのかな? […]