기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon GameLift 을 Unreal Engine 프로젝트에 통합
이 주제에서는 Unreal Engine용 Amazon GameLift C++ 서버 SDK 플러그인을 설정하고 게임 프로젝트에 통합하는 방법을 설명합니다.
추가 리소스:
사전 조건
진행하기 전에 다음과 같은 사전 조건을 검토해야 합니다.
사전 조건
-
Unreal Engine을 실행할 수 있는 컴퓨터 Unreal Engine 요구 사항에 대한 자세한 내용은 Unreal Engine의 하드웨어 및 소프트웨어 사양
문서를 참조하세요. -
Microsoft Visual Studio 2019 이상 최신 버전
-
CMake 버전 3.1 이상.
Python, 버전 3.6 이상.
-
에서 사용할 수 있는 Git 클라이언트입니다PATH.
-
Epic Games 계정 공식 Unreal Engine
웹사이트에서 계정을 등록합니다. -
Unreal Engine GitHub 계정과 연결된 계정입니다. 자세한 내용은 Unreal Engine 웹 사이트의 에서 Unreal Engine 소스 코드에 액세스를 GitHub
참조하세요.
참고
Amazon은 GameLift 현재 다음 버전의 Unreal Engine을 지원합니다.
-
4.22
-
4.23
-
4.24
-
4.25
-
4.26
-
4.27
-
5.1.0
-
5.1.1
-
5.2
-
5.3
소스에서 Unreal Engine 빌드
Epic 시작 관리자를 통해 다운로드한 표준 버전의 Unreal Engine Editor에서는 Unreal 클라이언트 애플리케이션 빌드만 허용합니다. Unreal 서버 애플리케이션을 빌드하려면 Unreal Engine Github 리포지토리를 사용하여 소스에서 Unreal Engine을 다운로드하고 빌드해야 합니다. 자세한 내용은 Unreal Engine 설명서 웹 사이트의 소스에서 Unreal Engine 빌드
참고
아직 그렇게 하지 않은 경우 의 Unreal Engine 소스 코드에 액세스 GitHub
Unreal Engine 소스를 개발 환경에 복제하려면
-
Unreal Engine 소스를 선택한 브랜치의 개발 환경에 복제합니다.
git clone https://github.com/EpicGames/UnrealEngine.git
-
게임 개발에 사용 중인 버전의 태그를 확인합니다. 예를 들어, 다음 예제는 Unreal Engine 버전 5.1.1을 확인합니다.
git checkout tags/5.1.1-release -b 5.1.1-release
-
로컬 리포지토리의 루트 폴더로 이동합니다. 루트 폴더에 있는 경우 다음
Setup.bat
파일을 실행합니다. -
루트 폴더에 있는 동안에도
GenerateProjectFiles.bat
파일을 실행합니다. -
이전 단계의 파일을 실행한 후,
UE5.sln
Unreal Engine 솔루션 파일이 생성됩니다. Visual Studio를 열고 Visual Studio 편집기에서UE5.sln
파일을 엽니다. -
Visual Studio에서 보기 메뉴를 열고 Solution Explorer 옵션을 선택합니다. 그러면 Unreal 프로젝트 노드의 컨텍스트 메뉴가 열립니다. Solution Explorer 창에서
UE5.sln
파일(UE5
으로 나열 가능)을 마우스 오른쪽 버튼으로 클릭한 다음 빌드를 선택하여 Development Editor Win64 대상으로 Unreal 프로젝트를 빌드합니다.참고
빌드를 완료하는 데 1시간이 넘게 걸릴 수 있습니다.
빌드가 완료되면 Unreal Development Editor를 열고 프로젝트를 만들거나 가져올 준비가 된 것입니다.
플러그인에 대한 Unreal 프로젝트 구성
게임 GameLift 서버 프로젝트에 맞게 Unreal Engine용 Amazon 서버 SDK 플러그인을 준비하려면 다음 단계를 따르세요.
플러그인에 대한 프로젝트를 구성하려면
-
Visual Studio를 연 상태에서 Solution Explorer 창으로 이동한 다음
UE5
파일을 선택하여 Unreal 프로젝트의 컨텍스트 메뉴를 엽니다. 컨텍스트 메뉴에서 시작 프로젝트로 설정 옵션을 선택합니다. -
Visual Studio 창 상단에서 디버깅 시작(녹색 화살표)을 선택합니다.
이 작업을 수행하면 소스로 빌드된 새 Unreal Editor 인스턴스가 시작됩니다. Unreal Editor 사용에 대한 자세한 내용은 Unreal Engine 설명서 웹 사이트의 Unreal Editor 인터페이스
를 참조하세요. -
Unreal Editor에는 Unreal 프로젝트와 게임 프로젝트가 포함된 다른 Visual Studio 창이 열리므로, 열린 Visual Studio 창을 닫습니다.
-
Unreal Editor에서 다음 중 하나를 수행합니다.
Amazon 와 통합하려는 기존 Unreal 프로젝트를 선택합니다 GameLift.
-
새 프로젝트를 생성합니다. Amazon GameLift 플러그인 for Unreal을 실험하려면 Unreal 엔진의 3인 템플릿을 사용하세요. 이 템플릿에 대한 자세한 내용은 Unreal Engine 설명서 웹 사이트의 3인칭 템플릿
을 참조하세요. 또는 다음 설정으로 새 프로젝트를 구성합니다.
C++
스타터 콘텐츠 포함
데스크톱
프로젝트 이름 이 주제의 예제에서는 프로젝트 이름을
GameLiftUnrealApp
이라고 지정했습니다.
Visual Studio의 Solution Explorer에서 Unreal 프로젝트가 있는 위치로 이동합니다. Unreal
Source
폴더에서
로 이름이 지정된 파일을 찾습니다.Your-application-name
.Target.cs예:
GameLiftUnrealApp.Target.cs
.이 파일을 복사하여 사본 이름을
로 지정합니다.Your-application-name
Server.Target.cs새 파일을 열고 다음과 같이 변경합니다.
class
및constructor
를 변경하여 파일 이름과 일치시킵니다.Type
을TargetType.Game
에서TargetType.Server
로 변경합니다.최종 파일은 다음 예제와 같습니다.
public class GameLiftUnrealAppServerTarget : TargetRules { public GameLiftUnrealAppServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; ExtraModuleNames.Add("GameLiftUnrealApp"); } }
이제 Amazon GameLift 서버 SDK 플러그인을 수락하도록 프로젝트가 구성되었습니다.
다음 작업은 Unreal용 C++ 서버 SDK 라이브러리를 빌드하여 프로젝트로 가져올 수 있도록 하는 것입니다.
Unreal용 C++ 서버 SDK 라이브러리를 빌드하려면
-
Unreal용 Amazon GameLift C++ 서버 SDK 플러그인을
다운로드합니다. 참고
기본 다운로드 디렉터리SDK에 를 배치하면 경로가 260자 제한을 초과하여 빌드에 실패할 수 있습니다. 예:
C:\Users\Administrator\Downloads\GameLift-SDK-Release-06_15_2023\GameLift-Cpp-ServerSDK-5.0.4
를 와 같은 다른 디렉터리SDK로 이동하는 것이 좋습니다
C:\GameLift-Cpp-ServerSDK-5.0.4
. Open 를 다운로드하고 설치합니다SSL. Open 다운로드에 대한 자세한 내용은 Github OpenSSL 빌드 및 설치
설명서를 SSL참조하세요. 자세한 내용은 Windows 플랫폼용 OpenSSL Notes 설명서를 참조하세요. https://github.com/openssl/openssl/blob/master/NOTES-WINDOWS.md
참고
Amazon GameLift 서버를 구축하는 데 사용하는 OpenSSL 버전은 게임 서버를 패키징하는 데 Unreal에서 사용하는 OpenSSL 버전과 일치해야 SDK 합니다. Unreal 설치 디렉터리 에서 버전 정보를 찾을 수 있습니다
...Engine\Source\ThirdParty\OpenSSL
.-
라이브러리를 다운로드한 상태에서 Unreal Engine용 C++ 서버 SDK 라이브러리를 빌드합니다.
다운로드한 의
GameLift-Cpp-ServerSDK-
디렉터리에서<version>
-DBUILD_FOR_UNREAL=1
파라미터로 SDK컴파일하고 서버 를 빌드합니다SDK. 다음 예제에서는cmake
를 사용하여 컴파일하는 방법을 보여줍니다.터미널에서 다음 명령을 실행합니다.
mkdir cmake-build cmake.exe -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -S . -B ./cmake-build -DBUILD_FOR_UNREAL=1 -A x64 cmake.exe --build ./cmake-build --target ALL_BUILD --config Release
Windows 빌드는
out\gamelift-server-sdk\Release
폴더에 다음과 같은 바이너리 파일을 생성합니다.-
cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.dll
-
cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.lib
두 라이브러리 파일을 Amazon GameLift Unreal Engine 플러그인 패키지의
ThirdParty\GameLiftServerSDK\Win64
폴더에 복사합니다. -
다음 절차에 따라 Amazon GameLift 플러그인을 예제 프로젝트로 가져옵니다.
Amazon GameLift 플러그인 가져오기
이전 절차에서 플러그인에서 추출한
GameLiftServerSDK
폴더를 찾습니다.게임 프로젝트 루트 폴더
Plugins
에서 를 찾습니다. (폴더가 없는 경우 해당 폴더에서 생성합니다.)GameLiftServerSDK
폴더를 에 복사합니다Plugins
.이렇게 하면 Unreal 프로젝트가 플러그인을 볼 수 있습니다.
-
게임
.uproject
파일에 Amazon GameLift 서버 SDK 플러그인을 추가합니다.이 예제에서는 앱은
GameLiftUnrealApp
이라고 하므로 파일은GameLiftUnrealApp.uproject
입니다. -
.uproject
파일을 편집하여 게임 프로젝트에 플러그인을 추가합니다."Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
게임이 플러그인에 ModuleRules 종속되어 있는지 확인합니다.
.Build.cs
파일을 열고 Amazon GameLiftServerSDK 종속성을 추가합니다. 이 파일은
에 있습니다.Your-application-name
/Source//Your-application-name/
예를 들어 자습서 파일 경로는
../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs
입니다.PublicDependencyModuleNames
의 목록 끝에"GameLiftServerSDK"
를 추가합니다.using UnrealBuildTool; using System.Collections.Generic; public class GameLiftUnrealApp : ModuleRules { public GameLiftUnrealApp(TargetInfo Target) { PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }); bEnableExceptions = true; } }
이제 플러그인이 애플리케이션에서 작동할 것입니다. 다음 섹션을 계속 진행하여 Amazon GameLift 기능을 게임에 통합합니다.
Unreal 프로젝트에 Amazon GameLift 서버 코드 추가
Unreal Engine 환경을 구성하고 설정했으므로 이제 게임 서버를 Amazon 와 통합할 수 있습니다 GameLift. 이 주제에 표시된 코드는 Amazon GameLift 서비스에 필요한 호출을 합니다. 또한 Amazon GameLift 서비스의 요청에 응답하는 일련의 콜백 함수도 구현합니다. 각 함수와 코드가 수행하는 작업에 대한 자세한 내용은 서버 프로세스 초기화를 참조하세요. 이 코드에서 사용되는 SDK 작업 및 데이터 유형에 대한 자세한 내용은 섹션을 참조하세요Unreal Engine용 Amazon GameLift Server SDK 5.x: 작업.
Amazon 을 사용하여 게임 서버를 초기화하려면 다음 절차를 GameLift사용합니다.
참고
다음 섹션에 제공된 Amazon GameLift별 코드는 WITH_GAMELIFT
프리프로세서 플래그 사용에 따라 달라집니다. 이 플래그는 다음 두 조건이 모두 충족되는 경우에만 유효합니다.
-
Target.Type == TargetRules.TargetType.Server
-
플러그인에서 Amazon GameLift 서버 바이너리를 SDK 찾았습니다.
이렇게 하면 Unreal Server 빌드만 Amazon GameLift의 백엔드 를 호출할 수 있습니다API. 또한 게임에서 생성할 수 있는 모든 다양한 Unreal 대상에 대해 제대로 실행되는 코드를 작성할 수 있습니다.
게임 서버를 Amazon과 통합 GameLift
-
Visual Studio에서 애플리케이션용
.sln
파일을 엽니다. 이 예제의 경우GameLiftUnrealApp.sln
파일은 루트 폴더에서 찾을 수 있습니다. -
솔루션이 열린 상태에서 애플리케이션의
파일을 찾습니다. 예:Your-application-name
GameMode.hGameLiftUnrealAppGameMode.h
. -
헤더 파일을 다음 예제 코드에 맞게 변경합니다. “GameLiftUnrealApp”를 고유한 애플리케이션 이름으로 바꾸어야 합니다.
#pragma once #include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "GameLiftServerSDK.h" #include "GameLiftUnrealAppGameMode.generated.h" DECLARE_LOG_CATEGORY_EXTERN(GameServerLog, Log, All); UCLASS(minimalapi) class AGameLiftUnrealAppGameMode : public AGameModeBase { GENERATED_BODY() public: AGameLiftUnrealAppGameMode(); protected: virtual void BeginPlay() override; private: // Process Parameters needs to remain in scope for the lifetime of the app FProcessParameters m_params; void InitGameLift(); };
-
관련 소스 파일인
파일을 엽니다. 예제:Your-application-name
GameMode.cppGameLiftUnrealAppGameMode.cpp
. 다음 예제 코드에 맞게 코드를 변경합니다. “GameLiftUnrealApp”를 고유한 애플리케이션 이름으로 바꾸어야 합니다.이 샘플은 게임 서버에 Amazon 추가 에 설명된 GameLift대로 Amazon 와의 통합에 필요한 모든 요소를 추가하는 방법을 보여줍니다. GameLift 여기에는 다음이 포함됩니다.
-
Amazon GameLift API 클라이언트를 초기화하는 중입니다.
-
, 및 를 포함하여 Amazon GameLift 서비스의 요청에 응답하기 위한 콜백 함수 구현
OnStartGameSession
OnProcessTerminate
onHealthCheck
. -
게임 세션을 호스팅할 준비가 GameLiftservice 되면 Amazon에 알리기 위해 지정된 포트로 ProcessReady()를 호출합니다.
#include "GameLiftUnrealAppGameMode.h" #include "GameLiftUnrealAppCharacter.h" #include "UObject/ConstructorHelpers.h" DEFINE_LOG_CATEGORY(GameServerLog); AGameLiftUnrealAppGameMode::AGameLiftUnrealAppGameMode() { // set default pawn class to our Blueprinted character static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter")); if (PlayerPawnBPClass.Class != NULL) { DefaultPawnClass = PlayerPawnBPClass.Class; } } void AGameLiftUnrealAppGameMode::BeginPlay() { #if WITH_GAMELIFT InitGameLift(); #endif } void AGameLiftUnrealAppGameMode::InitGameLift() { UE_LOG(GameServerLog, Log, TEXT("Initializing the GameLift Server")); //Getting the module first. FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK")); //Define the server parameters for a GameLift Anywhere fleet. These are not needed for a GameLift managed EC2 fleet. FServerParameters serverParameters; //AuthToken returned from the "aws gamelift get-compute-auth-token" API. Note this will expire and require a new call to the API after 15 minutes. if (FParse::Value(FCommandLine::Get(), TEXT("-authtoken="), serverParameters.m_authToken)) { UE_LOG(GameServerLog, Log, TEXT("AUTH_TOKEN: %s"), *serverParameters.m_authToken) } //The Host/compute-name of the GameLift Anywhere instance. if (FParse::Value(FCommandLine::Get(), TEXT("-hostid="), serverParameters.m_hostId)) { UE_LOG(GameServerLog, Log, TEXT("HOST_ID: %s"), *serverParameters.m_hostId) } //The Anywhere Fleet ID. if (FParse::Value(FCommandLine::Get(), TEXT("-fleetid="), serverParameters.m_fleetId)) { UE_LOG(GameServerLog, Log, TEXT("FLEET_ID: %s"), *serverParameters.m_fleetId) } //The WebSocket URL (GameLiftServiceSdkEndpoint). if (FParse::Value(FCommandLine::Get(), TEXT("-websocketurl="), serverParameters.m_webSocketUrl)) { UE_LOG(GameServerLog, Log, TEXT("WEBSOCKET_URL: %s"), *serverParameters.m_webSocketUrl) } //The PID of the running process serverParameters.m_processId = FString::Printf(TEXT("%d"), GetCurrentProcessId()); UE_LOG(GameServerLog, Log, TEXT("PID: %s"), *serverParameters.m_processId); //InitSDK establishes a local connection with GameLift's agent to enable further communication. //Use InitSDK(serverParameters) for a GameLift Anywhere fleet. //Use InitSDK() for a GameLift managed EC2 fleet. gameLiftSdkModule->InitSDK(serverParameters); //Implement callback function onStartGameSession //GameLift sends a game session activation request to the game server //and passes a game session object with game properties and other settings. //Here is where a game server takes action based on the game session object. //When the game server is ready to receive incoming player connections, //it invokes the server SDK call ActivateGameSession(). auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession) { FString gameSessionId = FString(gameSession.GetGameSessionId()); UE_LOG(GameServerLog, Log, TEXT("GameSession Initializing: %s"), *gameSessionId); gameLiftSdkModule->ActivateGameSession(); }; m_params.OnStartGameSession.BindLambda(onGameSession); //Implement callback function OnProcessTerminate //GameLift invokes this callback before shutting down the instance hosting this game server. //It gives the game server a chance to save its state, communicate with services, etc., //and initiate shut down. When the game server is ready to shut down, it invokes the //server SDK call ProcessEnding() to tell GameLift it is shutting down. auto onProcessTerminate = [=]() { UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating")); gameLiftSdkModule->ProcessEnding(); }; m_params.OnTerminate.BindLambda(onProcessTerminate); //Implement callback function OnHealthCheck //GameLift invokes this callback approximately every 60 seconds. //A game server might want to check the health of dependencies, etc. //Then it returns health status true if healthy, false otherwise. //The game server must respond within 60 seconds, or GameLift records 'false'. //In this example, the game server always reports healthy. auto onHealthCheck = []() { UE_LOG(GameServerLog, Log, TEXT("Performing Health Check")); return true; }; m_params.OnHealthCheck.BindLambda(onHealthCheck); //The game server gets ready to report that it is ready to host game sessions //and that it will listen on port 7777 for incoming player connections. m_params.port = 7777; //Here, the game server tells GameLift where to find game session log files. //At the end of a game session, GameLift uploads everything in the specified //location and stores it in the cloud for access later. TArray<FString> logfiles; logfiles.Add(TEXT("GameLift426Test/Saved/Logs/GameLift426Test.log")); m_params.logParameters = logfiles; //The game server calls ProcessReady() to tell GameLift it's ready to host game sessions. UE_LOG(GameServerLog, Log, TEXT("Calling Process Ready")); gameLiftSdkModule->ProcessReady(m_params); }
-
-
Development Editor 및 개발 서버 대상 유형 모두를 위한 게임 프로젝트를 빌드합니다.
참고
솔루션을 다시 빌드할 필요는 없습니다. 대신 앱 이름과 일치하는
Games
폴더 아래에 프로젝트만 빌드합니다. 그렇지 않으면 Visual Studio가 전체 UE5 프로젝트를 재구축하며, 이 작업은 최대 1시간이 걸릴 수 있습니다. -
두 빌드가 모두 완료되면 Visual Studio를 닫고 프로젝트
.uproject
파일을 열어 Unreal Editor에서 빌드를 엽니다. -
Unreal Editor에서 게임의 서버 빌드를 패키징합니다. 대상을 선택하려면 플랫폼 , Windows로 이동하여
Your-application-nameServer
. -
서버 애플리케이션 빌드 프로세스를 시작하려면 플랫폼, Windows로 이동하고 패키지 프로젝트를 선택합니다. 빌드가 완료되면 실행 파일이 있어야 합니다. 이 예제의 경우 파일 이름은
GameLiftUnrealAppServer.exe
입니다. -
Unreal Editor에서 서버 애플리케이션을 빌드하면 두 개의 실행 파일이 생성됩니다. 하나는 게임 빌드 폴더의 루트에 있으며 실제 서버 실행 파일의 래퍼 역할을 합니다.
서버 빌드로 Amazon GameLift 플릿을 생성할 때는 실제 서버 실행 파일을 런타임 구성 시작 경로로 전달하는 것이 좋습니다. 예를 들어 게임 빌드 폴더의 루트에는
GameLiftFPS.exe
파일이 있고 다른 파일은\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
위치에 있을 수 있습니다. 플릿을 생성할 때는 런타임 구성의 시작 경로로C:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
를 사용하는 것이 좋습니다. -
게임 서버가 게임 클라이언트와 통신할 수 있도록 Amazon GameLift 플릿에서 필요한 UDP포트를 열어야 합니다. 기본적으로 Unreal Engine은 포트
7777
을 사용합니다. 자세한 내용은 Amazon GameLift 서비스 API 참조 가이드UpdateFleetPortSettings의 섹션을 참조하세요. -
게임 빌드용
파일을 생성합니다. 이 설치 스크립트는 게임 빌드가 Amazon GameLift 플릿에 배포될 때마다 실행됩니다. 다음은 예제 파일install.bat
install.bat
입니다.VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q
일부 버전의 Unreal Engine의 경우 대신
install.bat
가VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
참고
<>PrereqSetup_x64.exe
파일로의 파일 경로는Engine\Extras\Redist\en-us
입니다. -
이제 게임 빌드를 패키징하여 Amazon 에 업로드할 수 있습니다 GameLift.
게임 빌드가 포함된 OpenSSL you 패키지 버전은 게임 엔진을 빌드할 때 게임 엔진이 사용한 버전과 일치해야 합니다. 게임 서버 빌드와 함께 올바른 OpenSSL 버전을 패키징해야 합니다. Windows OS의 경우 열기SSL 형식은 입니다
.dll
.참고
게임 서버 빌드DLLs에서 OpenSSL을 패키징합니다. 게임 서버를 구축할 때 사용한 것과 동일한 버전의 OpenSSL을 패키징해야 합니다.
-
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
zip 파일의 루트에 게임 서버 실행 파일과 함께 종속성을 패키징합니다. 예를 들어
openssl-lib
dll은.exe
파일과 같은 디렉터리에 있어야 합니다. -
다음 단계
Unreal Engine 환경을 구성하고 설정했으므로 이제 Amazon을 게임 GameLift 에 통합할 수 있습니다.
게임에 Amazon GameLift 을 추가하는 방법에 대한 자세한 내용은 다음을 참조하세요.
게임 테스트에 대한 지침은 Amazon을 사용하여 로컬 테스트 설정 GameLift Anywhere, 섹션을 참조하세요.