お世話になっております。
現在、UE4.7.3を利用しています。
【listenServerとして起動している端末A】と【Clientで起動している端末B】で、
それぞれ別のSubLevelをロードする方法はありますでしょうか?
SubLevelはChangeStreamingMethodにてBluePrintと設定し(BluePrintから呼び出す為)、
SubLevelのロード処理にはLoadStreamLevelを使用しています。
現在、端末AでLoadStreamLevelを呼び出すと、端末Bでも同じSubLevelがロードされてしまいます。
それぞれ別のSubLevelをロードする方法はありますでしょうか?
よろしくお願いします。
alwei
2
ネットワーク周りにはあまり詳しくないのですが、ブループリントノードにも『Is Server』や『Is Dedicated Server』というものがあります。
これを使って判断を行なえばサーバー側とクライアント側で別々のサブレベルを呼び出す事自体は可能だと思います。ネットワークに関しては以下のドキュメントも一通り参考にしてもらればいいと思います。この他にも色々ありますので、調べてみてください。
https://docs.unrealengine.com/latest/JPN/Gameplay/Networking/index.html
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/Networking/TestMultiplayer/index.html
alwei さん
ご回答ありがとうございます。
しかし、サーバ側とクライアント側で別の処理に分岐する方法は把握しています。
そうではなく、サーバ側でSubLevelをロードする為の関数『LoadStreamLevel』を呼びだした際に、"自動的にクライアント側でも同じ関数が呼ばれて、クライアントでもロードされてしまう現象"を解決する方法をお教え頂ければ幸いです。
【現状】
クライアント側でLoadStreamLevelした場合 → クライアントのみSubLevelをロード
サーバ側でLoadStreamLevelした場合 → サーバとクライアント両方でSubLevelをロード(同じSubLevelがロードされる)
【理想】
クライアント側でLoadStreamLevelした場合 → クライアントのみSubLevelをロード
サーバ側でLoadStreamLevelした場合 → サーバのみSubLevelをロード
サーバ側で呼び出した場合のみRPC(Multicast)でクライアントでも呼び出されている様な予想をしているのですが。。。これらを解決し、理想の処理を実現する方法をお教え頂ければ幸いです。
よろしくお願いいたします。
alwei
4
ご指摘の通り、確かにレベルとサブレベルの読み込みはクライアント側とサーバー側で共通になるようになっているです。
こちらでも調べてみましたが、現状でこの別レベルをクライアントで読み分ける手段はなさそうです。以下のドキュメントを読む限りではサーバーが現行マップの情報を全てのクライアントに送信後にログイン処理が行なわれるとありますので、これはメインレベル、サブレベルにおいても同様だと思われます。
現状ではサーバーが主導して各クライアントを同じレベル内で制御するというモデルになっているようです。もしかするとそうではない方法があるのかもしれませんが、こちらで調べてみる限りでは見つけられませんでした。
これ以上の情報はエピックさんから直接情報を頂くなどしないとわからない気がします。