お世話になっております。
現在、MMOのようなゲームを作ろうとしています。
そこで、選んだキャラのデータをサーバー側に渡し、そのキャラをサーバー上にスポーンさせ、操作させたいのですが、やり方のイメージが全くわきません。
PlayerStateを使ってサーバーへデータを受け渡すと拝見しましたが、具体的にどのように受け渡したら良いでしょうか?
また、ネットワーク初心者でも読み解けるような、なにか参考になるような資料はありますでしょうか?
よろしくおねがいします。
資料についてですが
既に目を通されたと思いますが先ずは公式ドキュメントですね。
ネットワークの構築とマルチプレイヤー
次にこちらのスライドがUE4のネットワーク周りに関して最も分かりやすかったです。
Online MultiPlay Game Design
ご回答ありがとうございます!
参考にさせていただきます!
また、Client / ServerのどちらでどのActorが管理されるかについてはこちらが分かりやすいです。
Unreal Engine 4 Network Compendium
重ね重ね、ありがとうございます!
本題の方についてはなにかご存知でしょうか?
やるとしたらこんな感じでしょうか。
RunOnServerのカスタムイベントをClientから呼び出し。
その際に既存のPawnの削除とPlayerControllerからの登録を解除。
続いて新規にPawnを作成し、PlayerControllerに登録。
このBlueprintはPlayerState内に記述しています。
引き続き、ご回答ありがとうございます!
BPも載せて頂いてありがとうございます!
手元で確認したところ、Destroy Actorに入っている値が読めないエラーが出てしまいました。
確認方法としては、
1、キャラクター選択時にキャラクターのIDをPlayerStateの変数に保存する。
2、OpenLevelでレベル遷移時にListenサーバーで立てる。
といった方法で確認したのですが、なぜDestroy Actorに入るPawnが見つからないのでしょうか?
組み立てたBPは画像のようなものです。
なお、PlayerState画像の左側は頂いたBPと同じになっています。
元々Pawnを設定していない場合はDestroyもUnpossessも必要なかったですね。
IsValidでnullチェックしてから次のキャラクター生成を行われると良いと思います。
OpenLevelで開かれた先のGameModeでDefaultPawnを設定しなかったりLevelに配置したPawnやCharacterからAuto Possess Playerを設定していなければPawnが存在しないのは正しい挙動です。
ご回答ありがとうございます!
なるほど、言われてみれば確かにDefaulPawnをNoneにしていました!
ご指摘頂き、ありがとうございます。
修正して試したところ、アウトライナで確認する限りでは、やはりスポーンがされていないようです・・・。
ご回答ありがとうございます!
IsValidですが、DefaultPawnがnoneであることが決まっていたため、手元では入れていませんでした。
現状では、カスタムイベントからSpawnActorが直接つながっている状態です。
ご回答ありがとうございます!
そちらでは正常に動作しているのですね…。
環境的な側面が強そうなので、一旦保留とさせていただきます。
長々とありがとうございました!
あ、Is Not Validの際にPossessではなくSpawnに繋がないといけませんね。
そこを修正するだけで動作すると思います。
呼び出すCustomEventですが、ClientからRunOnServerのCustomEvent呼び出しを行うことで正常に動作することをこちらで確認できました。
これは質問者だけでなく、回答者の方にもお願いしたいのですが、コメントとしてやりとりするのではなく、スレッドでそのスレッドを解決済みにするためにも必ず回答(Answer)として投稿してもらいたいです。
コメントではスレッドを解決済みにできません。またこのスレッドが解決済みであれば、質問者さんにはこの回答を解決済みにしていただきたいです。 解決済みかはご自身でご判断ください。
やり方↓
ご指摘ありがとうございます!
現状、納得のいく動作がまだ得られていなかったため、「保留」とさせていただきましたが、分かりづらい表現となってしまい申し訳ありません。
コメントだと解決済みにできず、困っていたので、助かりました。
ありがとうございます。