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 추가
계속하기 전에 모듈의 공용 종속 관계로MultiplayGameServerSDKMultiplayGameServerSDKinclude 문으로 클래스에서 액세스하려는 플러그인 헤더 파일을 가져옵니다.PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "MultiplayGameServerSDK" });
#include "MultiplayServerConfigSubsystem.h"#include "MultiplayGameServerSubsystem.h"#include "MultiplayServerQueryHandlerSubsystem.h"
Multiplay 서버 구성 시스템의 보조 시스템
이 보조 시스템은 현재 세션의 서버 구성을 가져옵니다. 이 보조 시스템은server.json- 서버 ID
- 할당 ID
- 서버 쿼리 프로토콜 포트
- 세션의 연결 포트
- 로그를 저장하는 디렉토리
server.jsonUMultiplayServerConfigSubsystem 액세스 방법
먼저 보조 시스템에 대한 레퍼런스를 가져와야 합니다. MultiplayServerConfigSubsystem은 GameInstanceSubsystem입니다. 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 게임 서버 시스템의 보조 시스템에 액세스할 수 있습니다. MultiplayGameServerSubsystem은 GameInstance에서 검색할 수 있는 GameInstanceSubsystem입니다.UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayGameServerSubsystem* GameServerSubsystem =GameInstance->GetSubsystem<UMultiplayGameServerSubsystem>();
SubscribeToServerEvents
SubscribeToServerEvents() 메서드를 사용하여 게임 서버 인스턴스와 SDK 데몬 간의 연결을 구축합니다. SDK 데몬은 OnAllocate와 OnDeallocate를 비롯한 이벤트를 게임 서버에 전송합니다. 이러한 이벤트를 구독하면 매치메이커 또는 다른 할당 서비스가 Multiplay를 게임 세션에 할당하거나 할당 해제할 때 게임 서버가 이를 알 수 있습니다.GameServerSubsystem->SubscribeToServerEvents();
OnAllocate
OnAllocateGameServerSubsystem->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 서버 쿼리 핸들러 시스템의 보조 시스템을 사용해야 합니다.
보조 시스템을 가져온 후 게임 서버에 연결하거나 연결 해제할 수 있고, 게임 서버 쿼리 값을 설정하거나 가져올 수 있습니다. Set 메서드를 사용하여 모든 게임 서버 쿼리 값을 구성합니다. 액세서 메서드를 사용하여 게임 서버 쿼리 값에 액세스합니다.UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayServerQueryHandlerSubsystem * ServerQueryHandlerSubsystem = GameInstance->GetSubsystem<UMultiplayServerQueryHandlerSubsystem >();
IncrementCurrentPlayers
IncrementCurrentPlayers()는 플레이어가 매치에 참여할 때마다 현재 플레이어 수를 하나씩 늘리는 수단을 제공합니다.ServerQueryHandlerSubsystem->IncrementCurrentPlayers();
DecrementCurrentPlayers
DecrementCurrentPlayers()는 플레이어가 매치에서 떠날 때마다 현재 플레이어 수를 하나씩 줄이는 수단을 제공합니다.ServerQueryHandlerSubsystem->DecrementCurrentPlayers();
SetCurrentPlayers
SetCurrentPlayers() 메서드를 사용하여 게임 서버에 연결된 플레이어 수를 설정합니다. 다음 예시는 현재 플레이어 수를32ServerQueryHandlerSubsystem->SetCurrentPlayers(32);
SetMaxPlayers
SetMaxPlayers() 메서드를 사용하여 게임 서버에 연결할 수 있는 최대 플레이어 수를 설정합니다. 다음 예시는 최대 플레이어 수를64ServerQueryHandlerSubsystem->SetMaxPlayers(64);
SetServerName
SetServerName() 메서드를 사용하여 게임 서버 이름을 설정합니다. 다음 예시는 게임 서버 이름을AwesomeServerServerQueryHandlerSubsystem->SetServerName(TEXT("AwesomeServer"));
SetGameType
SetGameType() 메서드를 사용하여 게임 서버가 실행 중인 게임 유형을 설정합니다. 다음 예시는 게임 유형을SearchAndDestroyServerQueryHandlerSubsystem->SetGameType(TEXT("SearchAndDestroy"));
SetBuildId
SetBuildId() 메서드를 사용하여 게임 서버 빌드 ID를 설정합니다. 다음 예시는 빌드 ID를NewBuildId.123.0.1ServerQueryHandlerSubsystem->SetBuildId(TEXT("NewBuildId.123.0.1"));
SetMap
SetMap() 메서드를 사용하여 게임 서버 맵 이름을 설정합니다. 다음 예시는 게임 맵을MAP_TD_DusthillServerQueryHandlerSubsystem->SetMap(TEXT("MAP_TD_Dusthill"));
SetPort
SetPort() 메서드를 사용하여 게임 서버 포트 번호를 설정합니다. 다음 예시는 게임 서버 포트를8080ServerQueryHandlerSubsystem->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();