ネットワークを介して、クライアント側からプレイヤーを動かせない

ネットワークを使った四人対戦のRTSのようなゲームを作っています。ユーザが持つプレイヤーは複数に分裂でき、それらの情報はGameStateで管理しています。

四人それぞれが自分の分裂出来るプレイヤーを操作出来るようにはしたのですが、Listenモードのホストが動かしたプレイヤーは全ユーザに同期されるのですが、クライアントから動かしたプレイヤーの同期が働きません。
仕様上おかしなことをしているのか、そもそも動くように作れていないのか、経験が浅く困惑してしまっています。以下に試した方法を記します。

Character型のプレイヤー四人分をレベルに配置。Replicateのチェックは全て入れ、Replicate Movement等の設定も確認した

GameStateにて移動を制御している

以前はSimpleMoveToLocationで移動させていたが、ネットワーク越しではうまく動作しないと判明し、AddMovementInputが良いというような記述を見かけたのでそちらを試す

AddMovementInputでクライアント側からは動かせたが、ホスト側に同期はされなかった

RunOnServerで処理させようとしたが、カスタムイベント自体がうまく動作しなかった

イベントの飛ばし方や設定が悪いのか、分かるところは試したつもりですが、これ以上分からないといった状況です。プレイヤー情報の同期にはどういった方法があるのでしょうか…

こちらは全て読まれましたか?

また私自身が過去に発表したスライドも役に立つかと思います。

基本的Client to Serverの場合にはカスタムイベントのRun On Serverを用いて、変数の内容を同期させる必要があります。また使用しているデフォルトクラスによってネットワーク対応度も違い、Pawnクラスはネットワーク同期に対応せず、Characterクラスであればネットワーク同期に標準で対応済みです。

ChatacterクラスであればAI Move Toなどのノードも上手く動作できるはずです。

一番気になっているのがGameStateから移動を制御しようとしていることです。アクターには権限があり、権限をもっていないものをカスタムイベントでRPCの呼び出しを行っても上手くいかないはずです。

まずGameStateで移動を制御しようというところが一番気になっています。

やはりGameStateで移動制御はまずいですよね・・。
現在はGameStateで、入力を判別して各プレイヤーに動作を振り分けているのですが、この部分をCharactorに飛ばして、そこからRunOnServerで同期させる、という方法にした方がよいのでしょうか。

はい。おそらくGameStateではなく、Characterに一度情報を投げてからRPCでの同期行う必要があります。GameState自体はクライアント上にも存在しているので、ローカル情報を扱うことができると思いますが、RPCの送信にも対応していたかは何とも言えないところです。

GameStateから選択しているCharacterに投げ、その中でRunOnServerに飛ばすイベントを動かしてみたところ、RunOnServerの直前までは問題なく走るのですが、RunOnServerにしたイベントが動きませんでした。この構造ではまずかったでしょうか・・・それともまた別の問題なのでしょうか・・

ゲームの仕様をみて思ったのですが、分裂というのは誰がそのアクターの権限をもっているのでしょうか?

基本的にSpawnを行ったそのサーバーもしくはクライアント自身がアクターの権限を持ちますが、サーバー以外の場合には自動的に同期されず、RPCによる同期が必要です。またPlayerController、もしくはPlayerStateによるオーナーシップがなければRun On Server自体が発動しません。以下はドキュキメントからです。

オーナーシップ

レプリケートしたイベントを含むマルチプレイヤー ゲームを作業時の重要な概念は、指定アクタまたはコンポーネントのオーナーとみなされる 接続はどれかという点です。目的を果たすために、“Run on server” イベントはクライアントが所有するアクタ (またはアクタのコンポーネント) からだけ呼び出せることに留意してください。通常は以下のアクタまたはアクタの 1 つのコンポーネントからのみ “Run on server” イベントを送信できることを意味します。

クライアントの PlayerController 自身

クライアントの PlayerController が所有するポーン、または

クライアントの PlayerState

再確認したところ、アクターの権限の点について、統一されていなかったり、不適切な箇所が確かにいくつかありました。資料を参考にしながら 構造を考えなおしてみます。
解決の糸口が見えてきました。ありがとうございます!