Integrasikan Amazon GameLift ke dalam proyek Unreal Engine - Amazon GameLift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Integrasikan Amazon GameLift ke dalam proyek Unreal Engine

Topik ini menjelaskan cara menyiapkan plugin SDK server Amazon GameLift C ++ untuk Unreal Engine dan mengintegrasikannya ke dalam proyek game Anda.

Sumber daya tambahan:

Prasyarat

Sebelum Anda memproses, pastikan Anda telah meninjau prasyarat berikut:

Prasyarat
  • Komputer yang mampu menjalankan Unreal Engine. Untuk informasi selengkapnya tentang persyaratan Unreal Engine, lihat dokumentasi Spesifikasi Perangkat Keras dan Perangkat Lunak Unreal Engine.

  • Microsoft Visual Studio 2019 atau versi yang lebih baru.

  • CMake versi 3.1 atau yang lebih baru.

  • Python versi 3.6 atau lebih baru.

  • Klien Git tersedia di PATH.

  • Akun game Epic. Mendaftar untuk mendapatkan akun di situs web resmi Unreal Engine.

  • GitHub Akun yang terkait dengan akun Unreal Engine Anda. Untuk informasi lebih lanjut, lihat Mengakses kode sumber Unreal Engine GitHub di situs web Unreal Engine.

catatan

Amazon GameLift saat ini mendukung versi Unreal Engine berikut:

  • 4.22

  • 4.23

  • 4.24

  • 4.25

  • 4.26

  • 4.27

  • 5.1.0

  • 5.1.1

  • 5.2

  • 5.3

Bangun Unreal Engine dari sumber

Versi standar editor Unreal Engine, diunduh melalui peluncur Epic, hanya mengizinkan pembuatan aplikasi klien Unreal. Untuk membangun aplikasi server Unreal, Anda perlu mengunduh dan membangun Unreal Engine dari sumber, menggunakan repo Unreal Engine Github. Untuk informasi lebih lanjut, lihat tutorial Building Unreal Engine from Source di situs web dokumentasi Unreal Engine.

catatan

Jika Anda belum melakukannya, ikuti petunjuk di Mengakses kode sumber Unreal Engine untuk menautkan GitHub akun Anda GitHub ke akun Epic Games Anda.

Untuk mengkloning sumber Unreal Engine ke lingkungan pengembangan Anda
  1. Kloning sumber Unreal Engine ke lingkungan pengembangan Anda di cabang pilihan Anda.

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. Lihat tag versi yang Anda gunakan untuk mengembangkan game Anda. Misalnya, contoh berikut memeriksa Unreal Engine versi 5.1.1:

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. Arahkan ke folder root repositori lokal. Saat Anda berada di folder root, jalankan file berikut:Setup.bat.

  4. Saat berada di folder root, jalankan juga file:GenerateProjectFiles.bat.

  5. Setelah menjalankan file dari langkah sebelumnya, file solusi Unreal EngineUE5.sln, dibuat. Buka Visual Studio, dan di editor Visual Studio buka UE5.sln file.

  6. Di Visual Studio, buka menu View dan pilih opsi Solution Explorer. Ini membuka menu konteks dari node proyek Unreal. Di jendela Solution Explorer, klik kanan UE5.sln file (dapat dicantumkan sebagai hanyaUE5), lalu pilih Build untuk membangun proyek Unreal dengan target Development Editor Win64.

    catatan

    Pembangunannya bisa memakan waktu lebih dari satu jam untuk menyelesaikannya.

Setelah build selesai, Anda siap untuk membuka Unreal Development Editor dan membuat atau mengimpor proyek.

Konfigurasikan proyek Unreal Anda untuk plugin

Ikuti langkah-langkah ini untuk menyiapkan plugin SDK GameLift server Amazon untuk Unreal Engine untuk proyek server game Anda.

Untuk mengkonfigurasi proyek Anda untuk plugin
  1. Dengan Visual Studio terbuka, navigasikan ke panel Solution Explorer dan pilih UE5 file untuk membuka menu konteks untuk proyek Unreal. Dalam menu konteks, pilih opsi Set as Startup Project.

  2. Di bagian atas jendela Visual Studio Anda, pilih Mulai Debugging (panah hijau).

    Tindakan ini memulai instance Unreal Editor buatan sumber baru Anda. Untuk informasi selengkapnya tentang penggunaan Unreal Editor, lihat Unreal Editor Interface di situs web dokumentasi Unreal Engine.

  3. Tutup jendela Visual Studio yang Anda buka, karena Unreal Editor membuka jendela Visual Studio lain yang berisi proyek Unreal dan proyek game Anda.

  4. Di editor Unreal, lakukan salah satu hal berikut:

    • Pilih proyek Unreal yang ada yang ingin Anda integrasikan dengan Amazon GameLift.

    • Buat proyek baru. Untuk bereksperimen dengan GameLift plugin Amazon untuk Unreal, coba gunakan template Orang Ketiga Unreal engine. Untuk informasi selengkapnya tentang template ini, lihat template Orang Ketiga di situs web dokumentasi Unreal Engine.

      Atau, konfigurasikan proyek baru dengan pengaturan berikut:

      • C++

      • Dengan konten starter

      • Desktop

      • Sebuah nama proyek. Dalam contoh dalam topik ini, kami menamai proyek kamiGameLiftUnrealApp.

  5. Di Solution Explorer Visual Studio, navigasikan ke lokasi proyek Unreal Anda. Di Source folder Unreal, temukan file bernamaYour-application-name.Target.cs.

    Misalnya: GameLiftUnrealApp.Target.cs.

  6. Buat salinan file ini dan beri nama salinannya:Your-application-nameServer.Target.cs.

  7. Buka file baru dan buat perubahan berikut:

    • Ubah class dan constructor untuk mencocokkan nama file.

    • Ubah Type dari TargetType.Game keTargetType.Server.

    • File akhir akan terlihat seperti contoh berikut:

      public class GameLiftUnrealAppServerTarget : TargetRules { public GameLiftUnrealAppServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; ExtraModuleNames.Add("GameLiftUnrealApp"); } }

Proyek Anda sekarang dikonfigurasi untuk menerima plugin SDK GameLift server Amazon.

Tugas selanjutnya adalah membangun pustaka SDK server C ++ untuk Unreal sehingga Anda dapat mengimpornya ke proyek Anda.

Untuk membangun pustaka SDK server C ++ untuk Unreal
  1. Unduh plugin SDK server Amazon GameLift C ++ untuk Unreal.

    catatan

    Menempatkan SDK di direktori unduhan default dapat mengakibatkan kegagalan build karena jalur melebihi batas 260 karakter. Misalnya: C:\Users\Administrator\Downloads\GameLift-SDK-Release-06_15_2023\GameLift-Cpp-ServerSDK-5.0.4

    Kami menyarankan Anda memindahkan SDK ke direktori lain, misalnyaC:\GameLift-Cpp-ServerSDK-5.0.4.

  2. Unduh dan instal OpenSSL. Untuk informasi lebih lanjut tentang mengunduh OpenSSL, baca dokumentasi build dan install Github OpenSSL.

    Untuk informasi selengkapnya, baca dokumentasi OpenSSL Notes untuk platform Windows.

    catatan

    Versi OpenSSL yang Anda gunakan untuk membangun SDK server GameLift Amazon harus sesuai dengan versi OpenSSL yang digunakan oleh Unreal untuk mengemas server game Anda. Anda dapat menemukan informasi versi di direktori ...Engine\Source\ThirdParty\OpenSSL instalasi Unreal.

  3. Dengan pustaka yang diunduh, buat pustaka SDK server C ++ untuk Unreal Engine.

    Di GameLift-Cpp-ServerSDK-<version> direktori di SDK yang diunduh, kompilasi dengan -DBUILD_FOR_UNREAL=1 parameter dan buat SDK server. Contoh berikut menunjukkan cara mengkompilasi menggunakancmake.

    Jalankan perintah berikut di terminal Anda:

    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

    Build Windows membuat file biner berikut di out\gamelift-server-sdk\Release folder:

    • cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.dll

    • cmake-build\prefix\bin\aws-cpp-sdk-gamelift-server.lib

    Salin dua file pustaka ke ThirdParty\GameLiftServerSDK\Win64 folder dalam paket plugin Amazon GameLift Unreal Engine.

Gunakan prosedur berikut untuk mengimpor GameLift plugin Amazon ke proyek contoh Anda.

Impor GameLift plugin Amazon
  1. Temukan GameLiftServerSDK folder yang Anda ekstrak dari plugin di prosedur sebelumnya.

  2. Temukan folder Plugins root proyek game Anda. (Jika folder tidak ada, maka buatlah di sana.)

  3. Salin GameLiftServerSDK folder kePlugins.

    Ini akan memungkinkan proyek Unreal untuk melihat plugin.

  4. Tambahkan plugin SDK GameLift server Amazon ke .uproject file game.

    Dalam contoh, aplikasi dipanggilGameLiftUnrealApp, jadi file akanGameLiftUnrealApp.uproject.

  5. Edit .uproject file untuk menambahkan plugin ke proyek game Anda.

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  6. Pastikan game ModuleRules mengambil ketergantungan pada plugin. Buka .Build.cs file dan tambahkan dependensi Amazon GameLiftServer SDK. File ini ditemukan di bawahYour-application-name/Source//Your-application-name/.

    Misalnya, filepath tutorial adalah. ../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs

  7. Tambahkan "GameLiftServerSDK" ke akhir daftarPublicDependencyModuleNames.

    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; } }

Plugin sekarang harus berfungsi untuk aplikasi Anda. Lanjutkan dengan bagian selanjutnya untuk mengintegrasikan GameLift fungsionalitas Amazon ke dalam game Anda.

Tambahkan kode GameLift server Amazon ke proyek Unreal Anda

Anda telah mengonfigurasi dan menyiapkan lingkungan Unreal Engine Anda, dan sekarang Anda dapat mengintegrasikan server game dengan Amazon GameLift. Kode yang disajikan dalam topik ini membuat panggilan yang diperlukan ke GameLift layanan Amazon. Ini juga mengimplementasikan satu set fungsi callback yang merespons permintaan dari layanan Amazon GameLift . Untuk informasi selengkapnya tentang setiap fungsi dan apa yang dilakukan kode, lihat Menginisialisasi proses server. Untuk informasi selengkapnya tentang tindakan SDK dan tipe data yang digunakan dalam kode ini, baca. Referensi SDK GameLift server Amazon untuk Unreal Engine

Untuk menginisialisasi server game dengan Amazon GameLift, gunakan prosedur berikut.

catatan

Kode GameLift khusus Amazon yang disediakan di bagian berikut bergantung pada penggunaan flag WITH_GAMELIFT preprocessor. Bendera ini benar hanya jika kedua kondisi ini terpenuhi:

  • Target.Type == TargetRules.TargetType.Server

  • Plugin menemukan binari SDK GameLift server Amazon.

Ini memastikan bahwa hanya build Unreal Server yang menjalankan API backend GameLift Amazon. Ini juga memungkinkan Anda untuk menulis kode yang akan dijalankan dengan benar untuk semua target Unreal yang berbeda yang mungkin dihasilkan game Anda.

Integrasikan server game dengan Amazon GameLift
  1. Di Visual Studio, buka .sln file untuk aplikasi Anda. Sebagai contoh kita, file GameLiftUnrealApp.sln tersebut ditemukan di folder root.

  2. Dengan solusi terbuka, cari Your-application-nameGameMode.h file aplikasi Anda. Contoh:GameLiftUnrealAppGameMode.h.

  3. Ubah file header agar sejajar dengan kode contoh berikut. Pastikan untuk mengganti "GameLiftUnrealApp" dengan nama aplikasi Anda sendiri.

    #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(); };
  4. Buka file Your-application-nameGameMode.cpp file sumber terkait. Dalam Contoh kami:GameLiftUnrealAppGameMode.cpp. dan ubah kode untuk menyelaraskan dengan kode contoh berikut. Pastikan untuk mengganti "GameLiftUnrealApp" dengan nama aplikasi Anda sendiri.

    Contoh ini menunjukkan cara menambahkan semua elemen yang diperlukan untuk integrasi dengan Amazon GameLift, seperti yang dijelaskan dalam Tambahkan Amazon GameLift ke server game Anda. Hal ini mencakup:

    • Menginisialisasi klien GameLift API Amazon.

    • Menerapkan fungsi callback untuk menanggapi permintaan dari GameLift layanan Amazon, termasukOnStartGameSession,OnProcessTerminate, danonHealthCheck.

    • Memanggil ProcessReady () dengan port yang ditunjuk untuk memberi tahu Amazon GameLiftservice saat siap menyelenggarakan sesi game.

    #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); }
  5. Membangun proyek game untuk kedua jenis target berikut: Development Editor dan Development Server.

    catatan

    Anda tidak perlu membangun kembali solusinya. Sebagai gantinya, buat hanya proyek di bawah Games folder yang cocok dengan nama aplikasi Anda. Jika tidak, Visual Studio membangun kembali seluruh proyek UE5, yang mungkin memakan waktu hingga satu jam.

  6. Setelah kedua build selesai, tutup Visual Studio dan buka .uproject file proyek Anda untuk membukanya di Unreal Editor.

  7. Di Unreal Editor, paketkan server build game Anda. Untuk memilih target, buka Platform, Windows dan pilih Y our-application-name Server.

  8. Untuk memulai proses membangun aplikasi server, buka Platform, Windows dan pilih Package Project. Saat build selesai, Anda harus memiliki executable. Dalam kasus contoh kita, nama file adalahGameLiftUnrealAppServer.exe.

  9. Membangun aplikasi server di Unreal Editor menghasilkan dua executable. Satu terletak di root folder build game dan bertindak sebagai pembungkus untuk server yang sebenarnya dapat dieksekusi.

    Saat membuat GameLift armada Amazon dengan build server Anda, sebaiknya Anda meneruskan server yang dapat dieksekusi sebagai jalur peluncuran konfigurasi runtime. Misalnya, di folder build game Anda, Anda mungkin memiliki GameLiftFPS.exe file di root dan file lainnya di\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe. Saat membuat armada, kami sarankan Anda menggunakan C:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe sebagai jalur peluncuran konfigurasi runtime.

  10. Pastikan untuk membuka port UDP yang diperlukan pada GameLift armada Amazon, sehingga server game dapat berkomunikasi dengan klien game. Secara default, Unreal Engine menggunakan port7777. Untuk informasi selengkapnya, lihat UpdateFleetPortSettingsdi panduan referensi API GameLift layanan Amazon.

  11. Buat install.bat file untuk build game Anda. Skrip penginstalan ini berjalan setiap kali game build dikerahkan ke GameLift armada Amazon. Berikut adalah contoh install.bat file:

    VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q

    Untuk beberapa versi Unreal Engine, install.bat seharusnya

    VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
    catatan

    Jalur file ke <>PrereqSetup_x64.exe file tersebut adalahEngine\Extras\Redist\en-us.

  12. Sekarang Anda dapat mengemas dan mengunggah build game Anda ke Amazon GameLift.

    Versi OpenSSL yang Anda paketkan dengan build game Anda harus sesuai dengan versi yang digunakan mesin game saat membangun server game. Pastikan Anda mengemas versi OpenSSL yang benar dengan build server game Anda. Untuk OS Windows, format OpenSSL adalah. .dll

    catatan

    Package DLL OpenSSL di build server game Anda. Pastikan untuk mengemas versi OpenSSL yang sama dengan yang Anda gunakan saat membangun server game.

    • libssl-1_1-x64.dll

      libcrypto-1_1-x64.dll

    Package dependensi Anda bersama dengan server game Anda yang dapat dieksekusi di root file zip. Misalnya, openssl-lib dll harus berada di direktori yang sama dengan file. .exe

Langkah selanjutnya

Anda telah mengonfigurasi dan menyiapkan lingkungan Unreal Engine Anda, dan sekarang Anda dapat mulai mengintegrasikan Amazon GameLift ke dalam game Anda.

Untuk informasi selengkapnya tentang menambahkan Amazon GameLift ke game Anda, lihat berikut ini:

Untuk petunjuk tentang menguji game Anda, lihat Uji integrasi Anda menggunakan GameLift Anywhere armada Amazon.