0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】マルチプレイにおいてプレイヤーが接続を切断したときの挙動

Last updated at Posted at 2025-04-28

概要

マルチプレイにおいてプレイヤーが接続を切断したときの挙動を検証したものをまとめました。

検証のために利用したプロジェクトをGitHubにアップロードしました。

何かしら気になる方は、ダウンロードして手元で試していただければと思います。

■確認した環境

  • UnrealEngine:5.5.4
  • エディタビルド構成:DebugGame Editor
  • パッケージビルド構成:Development

■ゲームプレイ設定
〇エディタ

  • Run Under One Process:true
  • NetMode: PlayAsListenServer
  • Play Number Of Clients(Number of Players):2

〇パッケージ(コマンドライン引数)

  • ListenServer環境:TestMap?listen?bIsLanMatch=1 -windowed -ResX=960 -ResY=540
  • Client環境:[IPアドレス] -windowed -ResX=960 -ResY=540

検証

検証用プロジェクトについて

検証用プロジェクトでは画面左上にその環境のNetModeと各プレイヤーごとの下記項目の情報を表示するようになっております。

  • PlayerId
  • PlayerState
  • Controller
  • Pawn

MultiDisconnectedの表示について.png

APawn::IsLocallControlled()の値は下記となっております。

PlayerId256 PlayerId257
ListenServer環境 true false
Client環境 false true

接続の切断は下記手順で行っております

  • エディタ:コンソールコマンドから open TestMap を実行しTestMapに遷移してStandaloneモードになる
  • パッケージ:ウィンドウをxボタン(Alt+F4)を押してプロセスを終了させる

Clientのプレイヤーが接続を切断したとき

下記項目がListenServerの環境から即座にDestroyされます。IsValid()での判定がfalseになります。

  • PlayerState
  • Controller
  • Pawn
スクショ(ListenServer環境) 備考
切断前 ListenServer環境で切断前.png
切断後 ListenServer環境で切断後.png

ListenServerのプレイヤーが接続を切断したとき

Client環境は即座にGameDefaultMapに遷移します。

スクショ(Client環境) 備考
切断前 image.png
切断後 image.png

■補足:GameDefaultMapについて
ゲームが起動したときに開かれるデフォルトのレベルです。
GameDefautMapは Edit > Project Settings > Map & Modes > GameDefaultMap から設定します。
GameDefaultMap.png

UGameMapsSettings::SetGameDefaultMap() 関数を使うことにより、ゲーム起動後にGameDefaultMapを変更することが可能です。

#include "GameMapsSettings.h"

UGameMapsSettings::SetGameDefaultMap(TEXT("/Game/Maps/TestMap"));

UGameMapsSettings::SetGameDefaultMap()を使うためには *.Build.cs に EngineSettings モジュールへの依存を追加することが必要です。

MultiDisconnected\Source\MultiDisconnected\MultiDisconnected.Build.cs

using UnrealBuildTool;

public class MultiDisconnected : ModuleRules
{
	public MultiDisconnected(ReadOnlyTargetRules Target) : base(Target)
	{
		// 略
	
		PublicDependencyModuleNames.AddRange(
			new string[] {
				// 略
				"EngineSettings", // UGameMapsSettings::SetGameDefaultMap() を利用するために必要
			});

		// 略
	}
}

参考文献

【UE4】GameMode、GameState、PlayerState、PlayerControllerの関連を確認してみる - main() blog

UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD | ドクセル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?