シームレストラベルの使い方とか
ごんにぢわ。花粉で辛いです。
今回はオンラインゲームを作るならお世話になる(であろう)SeamlessTravelのお話です。
シームレストラベルって何
SeamlessTravelです。
これです。
こいつです。
詳しく言うとこれだけじゃないんですけど大体これです。
ブループリントに用意されているものではないので、
Execute Command Consoleノードに打ち込むか、CPPコードで実装してブループリントに公開するかしないとブループリント上では使えません。
SeamlessTravelはなにかというと、サーバーとクライアントが接続を保ったまま新たなワールド(レベル)に移動するというもので、サーバーからServerTravelを実行すると、サーバーが新規ワールド(レベル)に移動し、同じように接続中のクライアントもすべて移動します。
マルチプレイヤー・ゲームのワールド移動にうってつけというわけです。
どうやって使うの
ゲームモードからbUseSeamlessTravelをtrueにし、
ExecuteCommandConsoleに ServerTravel (MapName)と打ち込むか、
CPPコードでUWorld::ServerTravelを実行すれば移動することができます。簡単!
ここで気を付けたいのが
・サーバー/クライアントが移動した後に走る処理は、OnPostLoginではなくOnSwapControllers
意外と注意が必要なところで、サーバーに接続した時に走るログイン処理はOnPostLoginですが、
ServerTravelした後で呼ばれる処理はOnSwapPlayerControllerに変化しています。OnPostLoginは走りません。(多分!走ったらごめんね)
また、OnPostLoginの時と同様に
処理が走った時に「PlayerCharacterやActorが生成されているかはわからない」ので注意しましょう。OnPostLoginやOnSwapPlayerControllerでPlayerCharacterやアクターに触るときはDelayをかけてあげたほうが無難です。
突然でてきたOnSwapPlayerControllerって何だよ
SeamlessTravelを実行時に一部アクターは引き継がれるんですが、実際には前ワールドのプレイヤーコントローラーから、移動先のプレイヤーコントローラーにスワップしています。
前のプレイヤーコントローラーから引き継いで使いたい時には、ここでそのデータを渡すことができます。
SeamlessTravelはマルチプレイヤー・ゲームにおいて便利な機能ですし、公式も推奨している機能なので使いこなしていきましょう!