お世話になっております。
現在、クライアントでキャラクターを選択し、そのキャラクターでログインするMMOを作成しています。
ホストとなるクライアントがサーバーも兼ねるListen形式での実装を試みているのですが、選択したキャラクターの情報を渡す方法がわかりません。
ローカルであればインスタンスにキャラを保存し、それを読むことで行うと思いますが、マルチプレイの場合はどのようにキャラの情報をサーバーに伝えれば良いでしょうか?
どのような方法でもOKです
SpawnとPossessをサーバ側で行うことさえ守れば動作すると思います
クライアント側から RunOnServer
設定のイベントを呼び出すのが簡単な方法でしょう
ご回答ありがとうございます。
すみません、私の知識不足で、もう少し噛み砕いてご説明いただけますでしょうか…?
どのような方法でも、というのは、普通にローカルで作るようにインターフェース経由やインスタンス経由でデータのやり取りが行える、ということでしょうか?
元の回答の表現が少々おかしいと感じましたので、補足しつつ詳細を説明します
GameInstanceは各クライアントに生成され、Replicateによる共有はされないので、ローカル用です
InterfaceはEventより関数に近い扱いですので、RunOnServer等のReplication設定は出来ません
ですが、CustomEventについては、Replicatesの設定により、クライアントで呼び出したイベントをサーバで実行する、またはサーバで呼び出したイベントをクライアントで実行する、という操作が可能です
ですので、この機能を用いてサーバにキャラの情報を送信する、というのが一つのやり方になります
または、サーバとクライアント双方に存在するクラスの変数を用いる方法もあります
PlayerController、PlayerStateあたりが常に双方に存在するクラスです
PlayerController等の変数にキャラクターの情報を格納し、サーバ側でその値を読み取って処理を実施する、というやり方が考えられます
Pawn等も、一旦サーバで生成してしまえばクライアントにコピーすることもできるので、それを通して処理を行うことも可能です
ただし、GameModeはサーバにしか存在しませんので、クライアント側からGameModeを通した情報の受け渡しは出来ません
なので、キャラの初期化、という視点では様々な方法を取ることが出来ます
(PlayerControllerのログイン時に直接情報を送る(または読み取る)やり方、あるいは一旦Pawnを生成した後でそれを書き換えるやり方など)
プロジェクトに応じて適したものを選択してください
ご回答ありがとうございます。
大変わかりやすい説明で、助かりました!
頂いた回答を元に、色々と試してみたいと思います。