読者です 読者をやめる 読者になる 読者になる

I From Japan Staff Blog

I From Japan の開発者ブログです

UE4 BP Level Streaming

プログラミング Unreal Engine 4
 
こんばんは。
ヨシノブです。

本日はガッツリLevel Streaming のオンライン対応の実装について説明しようと思っていたのですが
 
 
このやり方にはバグがあります。
 
 
今のところサーバーでまとめて処理をするとバグは出ないのですが
 
 
それ以外の方法でバグを取る方法がまだ思いついていません...
 
一応UE4 Answer hub には上げといたのですが,,,
 
 
ちなみにオフラインではちゃんと動きます。
というよりそれはただのLevel Streamingなので。
 
 
 

Level を Streamingする方法もたくさんあるのですが、今回はオンライン用ということでBlue Printから呼び出す方法を採用しました。
 
 
 

機会があれば他の方法も紹介したいと思います。といってもググれば出てくるので僕が説明する必要はなさそうですが...
 
 

それではBlue Printの画像から
 
 
 

f:id:ifromjapan:20160930234252p:plain

 
 
 
 

単純に設置してあるアクターのコリジョンで判定しているだけなので
Get Player Characterで大丈夫です。
 
 
そして、そのキャラクターをコントロールしているのがネットワークを介してでは無いことを確認して
そのキャラクターをコントロールしている人のレベルだけ読み込みます。

つまり、プレイヤーがABいた場合

Aだけが先に進んで次のステージに入ったとしても

Aだけがレベルをロードして、Bは次のステージにたどり着くまではそのレベルをロードしないという事ができます。
 
 
 

オープンワールド系のオンラインゲームにはぴったりですね。

動画で見るとこんな感じになります。
 
 
 
 
 
 
 
 
 
 
 


しかし!!!!!バグがアリます。

 

そのバグとは、クライアントがサーバーの方でロードされていないレベルを読み込むと、そのレベルに足を踏み入れた時に床をすり抜けて落ちていきます。

おそらく、サーバーでも同時に読み込まないとレベルの情報がうまく読み込め無いのでしょうか? 未だ解決策が思い浮かびません。
 
 

クライアントがロードした時にサーバーもロードをすれば問題なく動くのですが、それではどんどんサーバーに負荷がかかります。別でサーバーを立てていれば無問題ですけれども。
 
 
 
とりあえず今回は、どちらかのプレイヤーがサーバーになる方式を取りたいので、しばらく頑張ってみます。
 
 
 
今回はまだ、完成していないという事なのであっさりにしておきたいと思います。

それでは!
 

 

 

blog.i-fromjapan.com