どこかでレプリケーションの設定が間違っているのか何か設定があるのかわかりません。助けてください。
サーバー側からクライアントのキャラクタが見えてる場合のみ同期してるようです。
画像右上のようにサーバー視界外だと向きが更新されず、右下のように視界に入って打つと正しく同期します。
すみません。射撃をサーバー側での動作にしてたためでした。処理をどっちに任せるか考え直してきます。
やはり、射撃自体の処理はサーバーに任したいですが、その処理の中にクライアント側で取得した情報を扱いたいですが、何をどうしたらいいのかわかりません。
画像の"GetBarrelLocation"と"GetMuzzleLocation"の値を操作しているキャラクタのMeshのソケットのLocationにするにはどうしたらいいですか?
クライアント側にしかない情報を扱う場合には必ず一度サーバー上へと送信させてから、それを他のクライアントへレプリケーションさせる必要があります。
ブループリントの場合にはカスタムイベントにてRun on Serverでサーバー上へと必要な情報を送信してください。その後にサーバー上でReplicatedを設定した変数に格納しておくと全てのサーバーとクライアントで情報が同期されます。
以下のドキュメントに一通りの方法は記載されています。
ご回答ありがとうございます。助言の事を頭に入れて再度自分のやりたい処理を整理したところApplyDamegeがサーバーでの処理Onlyのようなので、ダメージ処理部分だけをキャラクタのほうに移しカスタムイベントでサーバー処理にするようにしました。
たぶんですが、自分の方法だと攻撃のヒット判定などはクライアントに置いたままなのでチートなどが簡単にできてしまう状態?だと思います。とりあえず動くゲームを作りたいため今のところはこのまま作ろうと考えています。
解決済みですが一応思い通りの処理に書き換えたので報告です。
位置情報などはそのままクライアントでの処理にし、アウトプットしダメージやスポーンなどの処理をカスタムイベントのサーバーのみ設定にアウトプットした値を入れることでダメージ判定などがサーバーのみで行われるようになりました。ありがとうございました。