기술 자료

지원

Multiplay Hosting for the Unreal Engine

Multiplay Hosting overview

Multiplay Hosting for the Unreal Engine

C++를 사용하여 연동

Integrate Multiplay Hosting into your Unreal Engine game server using C++.
읽는 시간 3분최근 업데이트: 10일 전

다음 섹션에서는 Unreal Engine 시스템의 보조 시스템을 사용하여 Multiplay Game Server SDK와 연동하는 방법을 설명합니다. Multiplay Game Server SDK에서 세 가지 인터페이스를 사용할 수 있습니다. 프로그래밍 시스템의 보조 시스템(Unreal Engine)을 참고하십시오.

종속 관계로 Multiplay Game Server SDK 추가

계속하기 전에 모듈의 공용 종속 관계로
MultiplayGameServerSDK
를 추가한 다음, include 문으로 클래스에 플러그인 헤더 파일을 가져옵니다.
Unreal 프로젝트 빌드 파일에서 모듈의 종속 관계로
MultiplayGameServerSDK
를 추가합니다.
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "MultiplayGameServerSDK" });
include 문으로 클래스에서 액세스하려는 플러그인 헤더 파일을 가져옵니다.
#include "MultiplayServerConfigSubsystem.h"#include "MultiplayGameServerSubsystem.h"#include "MultiplayServerQueryHandlerSubsystem.h"

Multiplay 서버 구성 시스템의 보조 시스템

이 보조 시스템은 현재 세션의 서버 구성을 가져옵니다. 이 보조 시스템은
server.json
파일을 읽고 MultiplayServerConfig 구조체를 통해 읽은 값을 노출합니다.
MultiplayServerConfig에는 다음 값이 포함됩니다.
  • 서버 ID
  • 할당 ID
  • 서버 쿼리 프로토콜 포트
  • 세션의 연결 포트
  • 로그를 저장하는 디렉토리
보조 시스템 초기화 시 MultiplayServerConfigSubsystem이 자동으로
server.json
파일을 읽습니다.

UMultiplayServerConfigSubsystem 액세스 방법

먼저 보조 시스템에 대한 레퍼런스를 가져와야 합니다. MultiplayServerConfigSubsystemGameInstanceSubsystem입니다. GameInstance에서 가져올 수 있습니다.
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayServerConfigSubsystem* ServerConfigSubsystem = GameInstance->GetSubsystem<UMultiplayServerConfigSubsystem>();

GetServerConfig

보조 시스템에 대한 레퍼런스를 가져온 후 MultiplayServerConfigSubsystem::GetServerConfig()를 사용하여 MultiplayServerConfig를 검색합니다. 예제는 아래와 같습니다.
const FMultiplayServerConfig& ServerConfig = ServerConfigSubsystem->GetServerConfig();UE_LOG(YourLogCategory, Log, TEXT("Server ID: %lld Allocation ID: %s Server Query Port: %u Port: %u Server Log Directory: %s"), ServerConfig.ServerId, *ServerConfig.AllocationId, ServerConfig.QueryPort, ServerConfig.Port, *ServerConfig.ServerLogDirectory)

Multiplay 게임 서버 시스템의 보조 시스템

Multiplay 게임 서버 시스템의 보조 시스템을 통해 게임 서버가 할당되거나 게임 서버가 플레이어를 받을 준비가 완료되는 등의 게임 서버 이벤트를 구독하고 해당 이벤트에 응답할 수 있습니다. 게임 서버 라이프사이클서버 준비를 참고하십시오. MultiplayGameServerSubsystem 보조 시스템에 대한 레퍼런스를 확보하면 Multiplay 게임 서버 시스템의 보조 시스템에 액세스할 수 있습니다. MultiplayGameServerSubsystemGameInstance에서 검색할 수 있는 GameInstanceSubsystem입니다.
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayGameServerSubsystem* GameServerSubsystem =GameInstance->GetSubsystem<UMultiplayGameServerSubsystem>();

SubscribeToServerEvents

SubscribeToServerEvents() 메서드를 사용하여 게임 서버 인스턴스와 SDK 데몬 간의 연결을 구축합니다. SDK 데몬은 OnAllocateOnDeallocate를 비롯한 이벤트를 게임 서버에 전송합니다. 이러한 이벤트를 구독하면 매치메이커 또는 다른 할당 서비스가 Multiplay를 게임 세션에 할당하거나 할당 해제할 때 게임 서버가 이를 알 수 있습니다.
GameServerSubsystem->SubscribeToServerEvents();

OnAllocate

OnAllocate
멀티캐스트 델리게이트는 게임 서버가 할당되었을 때 게임 서버에게 이를 알립니다. 게임 서버 인스턴스는 OnAllocate 콜백을 구독해야만 인스턴스가 할당된 시점을 알 수 있습니다.
OnAllocate 콜백을 사용하여 게임 서버가 할당되었을 때 필요한 설정 로직을 실행하십시오.
GameServerSubsystem->OnAllocate.AddDynamic(this, &UMyClass::OnAllocate);

ReadyServerForPlayers

ReadyServerForPlayers() 메서드를 사용하여 게임 서버가 플레이어를 받을 준비가 되었다고 Multiplay에 알릴 수 있습니다.
void UMyClass::OnAllocate(){ // Perform setup logic. FReadyServerSuccessDelegate OnSuccess; FReadyServerFailureDelegate OnFailure; OnSuccess.BindDynamic(this, &UMyClass::OnReadyServerSuccess); OnFailure.BindDynamic(this, &UMyClass::OnReadyServerFailure); GameServerSubsystem->ReadyServerForPlayers(OnSuccess, OnFailure);}

UnreadyServer

UnreadyServer() 메서드를 사용하여 게임 서버가 더 이상 플레이어를 받을 수 없다고 Multiplay에 알릴 수 있습니다. 다음과 같은 시나리오에서 UnreadyServer()를 사용할 수 있습니다.
  • 게임 매치가 거의 끝난 경우
  • 게임 매치가 끝난 경우
  • 게임 서버가 가득 찬 경우
    FUnreadyServerSuccessDelegate OnSuccess;FUnreadyServerFailureDelegate OnFailure;OnSuccess.BindDynamic(this, &UMyClass::OnUnreadyServerSuccess);OnFailure.BindDynamic(this, &UMyClass::OnUnreadyServerFailure);GameServerSubsystem->UnreadyServer(OnSuccess, OnFailure);

OnDeallocate

OnDeallocate 콜백을 사용하여 할당 해제 이벤트를 구독합니다. 할당 해제 이벤트에 대한 대응으로 마지막 정리 또는 저장 작업을 수행해야 할 수 있습니다.
GameServerSubsystem->OnDeallocate.AddDynamic(this, &UMyClass::OnDeallocate);

Multiplay 서버 쿼리 핸들러 시스템의 보조 시스템

Multiplay 서버 쿼리 핸들러 시스템의 보조 시스템을 통해 게임 서버 쿼리 프로토콜이 모니터링하는 게임 서버 변수를 설정할 수 있습니다. Multiplay 서버 쿼리 핸들러 시스템의 보조 시스템을 사용하여 관련 정보를 게임 서버의 SQP 프로토콜에 전송합니다. 먼저 다음 코드 스니핏에 표시된 대로 보조 시스템을 검색한 후 Multiplay 서버 쿼리 핸들러 시스템의 보조 시스템을 사용해야 합니다.
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayServerQueryHandlerSubsystem * ServerQueryHandlerSubsystem = GameInstance->GetSubsystem<UMultiplayServerQueryHandlerSubsystem >();
보조 시스템을 가져온 후 게임 서버에 연결하거나 연결 해제할 수 있고, 게임 서버 쿼리 값을 설정하거나 가져올 수 있습니다. Set 메서드를 사용하여 모든 게임 서버 쿼리 값을 구성합니다. 액세서 메서드를 사용하여 게임 서버 쿼리 값에 액세스합니다.

IncrementCurrentPlayers

IncrementCurrentPlayers()는 플레이어가 매치에 참여할 때마다 현재 플레이어 수를 하나씩 늘리는 수단을 제공합니다.
ServerQueryHandlerSubsystem->IncrementCurrentPlayers();

DecrementCurrentPlayers

DecrementCurrentPlayers()는 플레이어가 매치에서 떠날 때마다 현재 플레이어 수를 하나씩 줄이는 수단을 제공합니다.
ServerQueryHandlerSubsystem->DecrementCurrentPlayers();

SetCurrentPlayers

SetCurrentPlayers() 메서드를 사용하여 게임 서버에 연결된 플레이어 수를 설정합니다. 다음 예시는 현재 플레이어 수를
32
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetCurrentPlayers(32);

SetMaxPlayers

SetMaxPlayers() 메서드를 사용하여 게임 서버에 연결할 수 있는 최대 플레이어 수를 설정합니다. 다음 예시는 최대 플레이어 수를
64
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetMaxPlayers(64);

SetServerName

SetServerName() 메서드를 사용하여 게임 서버 이름을 설정합니다. 다음 예시는 게임 서버 이름을
AwesomeServer
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetServerName(TEXT("AwesomeServer"));

SetGameType

SetGameType() 메서드를 사용하여 게임 서버가 실행 중인 게임 유형을 설정합니다. 다음 예시는 게임 유형을
SearchAndDestroy
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetGameType(TEXT("SearchAndDestroy"));

SetBuildId

SetBuildId() 메서드를 사용하여 게임 서버 빌드 ID를 설정합니다. 다음 예시는 빌드 ID를
NewBuildId.123.0.1
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetBuildId(TEXT("NewBuildId.123.0.1"));

SetMap

SetMap() 메서드를 사용하여 게임 서버 맵 이름을 설정합니다. 다음 예시는 게임 맵을
MAP_TD_Dusthill
로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetMap(TEXT("MAP_TD_Dusthill"));

SetPort

SetPort() 메서드를 사용하여 게임 서버 포트 번호를 설정합니다. 다음 예시는 게임 서버 포트를
8080
으로 설정하는 방법을 보여 줍니다.
ServerQueryHandlerSubsystem->SetPort(8080);
게임이 진행되는 동안 이 값을 지속적으로 업데이트하는 것이 좋습니다. 가능한 한 계속 최신 값으로 업데이트해야 서버가 실행 중인 동안 Multiplay가 데이터를 수집하고 표시할 수 있습니다. 모든 값을 설정하고 나면 Connect()를 호출할 수 있습니다.

Connect

Connect() 메서드를 사용하여 게임 서버에 연결합니다.
ServerQueryHandlerSubsystem->Connect();

GetCurrentPlayers

GetCurrentPlayers() 메서드를 사용하여 게임 서버에 연결된 플레이어 수를 가져옵니다.
int32 CurrentPlayers = ServerQueryHandlerSubsystem->GetCurrentPlayers();

GetMaxPlayers

GetMaxPlayers() 메서드를 사용하여 게임 서버에 허용되는 최대 플레이어 수를 가져옵니다.
int32 MaxPlayers = ServerQueryHandlerSubsystem->GetMaxPlayers();

GetServerName

GetServerName() 메서드를 사용하여 게임 서버 이름을 가져옵니다.
FString ServerName = ServerQueryHandlerSubsystem->GetServerName();

GetGameType

GetGameType() 메서드를 사용하여 게임 서버 유형을 가져옵니다.
FString GameType = ServerQueryHandlerSubsystem->GetGameType();

GetBuildId

GetBuildId() 메서드를 사용하여 게임 서버가 실행 중인 빌드의 ID를 가져옵니다.
FString BuildId = ServerQueryHandlerSubsystem->GetBuildId();

GetMap

GetMap() 메서드를 사용하여 게임 서버의 활성 맵을 가져옵니다.
FString Map = ServerQueryHandlerSubsystem->GetMap();

GetPort

GetPort() 메서드를 사용하여 게임 서버의 포트 번호를 가져옵니다.
int32 Port = ServerQueryHandlerSubsystem->GetPort();

연결 해제

Disconnect() 메서드를 사용하여 게임 서버 업데이트로부터 연결을 해제합니다. 서버로부터 연결을 해제하면 더 이상 할당이나 할당 해제 이벤트와 같은 게임 서버의 업데이트를 수신하지 않습니다.
ServerQueryHandlerSubsystem->Disconnect();