こないだこれの中でLocal Predictedに言及した。

たぶん↓この動画のような違いになるんだと思う。

この人はよくマルチプレイを取り上げてるし、ラグについても詳しく説明してくれてる。ちゃんとしたマルチプレイヤーゲームを作った経験がある人なんだろう。
俺なんてラグのことなんて二の次、三の次になっちゃってて、とにかく動かす、動けばいい状態になってたりする。ついこないだまでゲームプレイアビリティのことだって知らなかったし。
で、アニメーションモンタージュを再生させてみたんだが、見事に動かない。アニメーションBPにスロットの定義をしたりして、オフラインマップならちゃんと動くんだけど、マルチプレイだと自分は動くが他人から見ると動かない。今はここで苦しんでる。上の動画とはAbility System ComponentをPlayerStateに実装してるって違いはあるんだけど、ちゃんとcharacterクラスにコピーしてるから問題ないはずなんだが。うーん。専用サーバーとlistenサーバーの違いもあるのか。最近はlistenサーバーで動かせなくなってるけど以前はよく使ってた。結構違うんだ。listenサーバーの方がちゃんと動くことが多かった。
それと、こないだ書いた↓これ。
Server Respects Remote Ability Cancellation
サーバーがリモート機能のキャンセルを尊重するらしい。多くの場合、問題を引き起こすから通常は無効にしておけとあった。その割にはデフォルトは有効だった気がするんだが。
これを無効にしてオンラインマップで実行すると、一度目のモンタージュは再生されるけど、二度目からは実行されなくなる。On Interruptedで戻ってきてその後ちゃんと動かない。
追記)
ちょっと分かったかもしれない。モンタージュ再生だけなら問題ない。余計な真似をしようとするとダメだ。
ゲームプレイアビリティBP内から自キャラのCharacterクラスの変数を弄ることはできる。でも他キャラから見た自キャラはその通りにならない。キャラクタークラスの変数はマルチキャストされてないから当然なんだろうけど。ここをどうにかするしかない。
試しにモンタージュ内の通知ブループリント関数、ReceiveNotifyの引数Mesh CompからGet Ownerを使ってキャラクタークラスをキャストしてみたら、4~5回に1回くらいは成功するようになった。ネットの遅延と関係あるのかも。というか、自分でマルチキャストをしてた時は他キャラから見た自キャラもこの通知からちゃんと音が出てたけど、今はやっぱり4~5回に1回しか音が出ない。ゲームプレイアビリティBPからのモンタージュ再生の場合、Gameplay Cueでサウンド再生させなきゃいけないんだろか?
更に追記)
ちゃんとキャラクタークラスにキャストして、キャラクタークラス内でマルチキャストすれば、他キャラから見た自キャラが更新される。これはアニメーション通知のBPでもゲームプレイアビリティBPでも同じ。
サウンドは自蔵の自キャラは必ず再生されるが、他蔵の自キャラは再生される時とされない時がある。圧倒的に再生されない場合が多い。アニメーションシーケンス内の通知は全部消して、アニメーションモンタージュで通知を定義してある。
コメント