いとりのあんりある日記

アンリアルエンジンで自分がつまづいたところとかをかきます。不定期更新。

シームレストラベルの使い方とか

ごんにぢわ。花粉で辛いです。

今回はオンラインゲームを作るならお世話になる(であろう)SeamlessTravelのお話です。

シームレストラベルって何

SeamlessTravelです。

f:id:Fire_rain:20190418165728p:plain

これです。

f:id:Fire_rain:20190418170114p:plain

こいつです。

詳しく言うとこれだけじゃないんですけど大体これです。

ブループリントに用意されているものではないので、

Execute Command Consoleノードに打ち込むか、CPPコードで実装してブループリントに公開するかしないとブループリント上では使えません。

 

SeamlessTravelはなにかというと、サーバーとクライアントが接続を保ったまま新たなワールド(レベル)に移動するというもので、サーバーからServerTravelを実行すると、サーバーが新規ワールド(レベル)に移動し、同じように接続中のクライアントもすべて移動します。

マルチプレイヤー・ゲームのワールド移動にうってつけというわけです。

 

どうやって使うの

ゲームモードからbUseSeamlessTravelをtrueにし、

f:id:Fire_rain:20190418172547p:plain

 

ExecuteCommandConsoleに ServerTravel (MapName)と打ち込むか、

CPPコードでUWorld::ServerTravelを実行すれば移動することができます。簡単!

 

 

ここで気を付けたいのが

・サーバー/クライアントが移動した後に走る処理は、OnPostLoginではなくOnSwapControllers

意外と注意が必要なところで、サーバーに接続した時に走るログイン処理はOnPostLoginですが、

f:id:Fire_rain:20190418173744p:plain

OnPostLoginくん

ServerTravelした後で呼ばれる処理はOnSwapPlayerControllerに変化しています。OnPostLoginは走りません。(多分!走ったらごめんね)

f:id:Fire_rain:20190418173925p:plain

OnSwapPlayerContorollersくん

また、OnPostLoginの時と同様に

処理が走った時に「PlayerCharacterやActorが生成されているかはわからない」ので注意しましょう。OnPostLoginやOnSwapPlayerControllerでPlayerCharacterやアクターに触るときはDelayをかけてあげたほうが無難です。

 

突然でてきたOnSwapPlayerControllerって何だよ

SeamlessTravelを実行時に一部アクターは引き継がれるんですが、実際には前ワールドのプレイヤーコントローラーから、移動先のプレイヤーコントローラーにスワップしています。

前のプレイヤーコントローラーから引き継いで使いたい時には、ここでそのデータを渡すことができます。

f:id:Fire_rain:20190418182029p:plain

こんなかんじで

 

SeamlessTravelはマルチプレイヤー・ゲームにおいて便利な機能ですし、公式も推奨している機能なので使いこなしていきましょう!