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 SDKplugin 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.
-
CMakeversi 3.1 atau yang lebih baru
Python versi 3.6 atau lebih baru.
-
Klien Git tersedia di filePATH.
-
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
catatan
Jika Anda belum melakukannya, ikuti petunjuk di Mengakses kode sumber Unreal Engine
Untuk mengkloning sumber Unreal Engine ke lingkungan pengembangan Anda
-
Kloning sumber Unreal Engine ke lingkungan pengembangan Anda di cabang pilihan Anda.
git clone https://github.com/EpicGames/UnrealEngine.git
-
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
-
Arahkan ke folder root dari repositori lokal. Saat Anda berada di folder root, jalankan file berikut:
Setup.bat
. -
Saat berada di folder root, jalankan juga file:
GenerateProjectFiles.bat
. -
Setelah menjalankan file dari langkah sebelumnya, file solusi Unreal Engine
UE5.sln
, dibuat. Buka Visual Studio, dan di editor Visual Studio bukaUE5.sln
file. -
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 SDK plugin GameLift server Amazon untuk Unreal Engine untuk proyek server game Anda.
Untuk mengkonfigurasi proyek Anda untuk plugin
-
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. -
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. -
Tutup jendela Visual Studio yang Anda buka, karena Unreal Editor membuka jendela Visual Studio lain yang berisi proyek Unreal dan proyek game Anda.
-
Di editor Unreal, lakukan salah satu hal berikut:
Pilih proyek Unreal yang sudah 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 kami
GameLiftUnrealApp
.
Di Solution Explorer Visual Studio, arahkan ke lokasi proyek Unreal Anda. Di
Source
folder Unreal, temukan file bernama
.Your-application-name
.Target.csSebagai contoh:
GameLiftUnrealApp.Target.cs
.Buat salinan file ini dan beri nama salinannya:
.Your-application-name
Server.Target.csBuka file baru dan buat perubahan berikut:
Ubah
class
danconstructor
untuk mencocokkan nama file.Ubah
Type
dariTargetType.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 SDK plugin GameLift server Amazon.
Tugas selanjutnya adalah membangun SDK pustaka server C ++ untuk Unreal sehingga Anda dapat mengimpornya ke proyek Anda.
Untuk membangun SDK pustaka server C ++ untuk Unreal
-
Unduh SDKplugin server Amazon GameLift C ++ untuk Unreal
. catatan
Menempatkan SDK 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, misalnya
C:\GameLift-Cpp-ServerSDK-5.0.4
. Unduh dan instal BukaSSL. Untuk informasi selengkapnya tentang mengunduh OpenSSL, baca dokumentasi SSLbuild dan install Github Open
. Untuk informasi selengkapnya, baca dokumentasi Open SSL Notes for Windows platform
. catatan
Versi Open SSL yang Anda gunakan untuk membangun GameLift server Amazon SDK harus cocok dengan versi Open yang SSL digunakan oleh Unreal untuk mengemas server game Anda. Anda dapat menemukan informasi versi di direktori
...Engine\Source\ThirdParty\OpenSSL
instalasi Unreal.-
Dengan pustaka yang diunduh, buat SDK pustaka server C ++ untuk Unreal Engine.
Di
GameLift-Cpp-ServerSDK-
direktori yang diunduhSDK, kompilasi dengan<version>
-DBUILD_FOR_UNREAL=1
parameter dan bangun serverSDK. 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
Temukan
GameLiftServerSDK
folder yang Anda ekstrak dari plugin di prosedur sebelumnya.Temukan folder
Plugins
root proyek game Anda. (Jika folder tidak ada, maka buatlah di sana.)Salin
GameLiftServerSDK
folder ke dalamPlugins
.Ini akan memungkinkan proyek Unreal untuk melihat plugin.
-
Tambahkan SDK plugin GameLift server Amazon ke
.uproject
file game.Dalam contoh, aplikasi dipanggil
GameLiftUnrealApp
, jadi file akanGameLiftUnrealApp.uproject
. -
Edit
.uproject
file untuk menambahkan plugin ke proyek game Anda."Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
Pastikan game ModuleRules mengambil ketergantungan pada plugin. Buka
.Build.cs
file dan tambahkan GameLiftServer SDK ketergantungan Amazon. File ini ditemukan di bawah
.Your-application-name
/Source//Your-application-name/
Misalnya, filepath tutorial adalah.
../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs
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 SDK tindakan dan tipe data yang digunakan dalam kode ini, lihat. Amazon GameLift server SDK 5.x untuk Unreal Engine: Tindakan
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 SDK binari GameLift server Amazon.
Ini memastikan bahwa hanya build Unreal Server yang memanggil backend GameLift Amazon. API 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
-
Di Visual Studio, buka
.sln
file untuk aplikasi Anda. Sebagai contoh kita, fileGameLiftUnrealApp.sln
tersebut ditemukan di folder root. -
Dengan solusi terbuka, cari
file aplikasi Anda. Contoh:Your-application-name
GameMode.hGameLiftUnrealAppGameMode.h
. -
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(); };
-
Buka file
file sumber terkait. Dalam Contoh kami:Your-application-name
GameMode.cppGameLiftUnrealAppGameMode.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 GameLift API klien Amazon.
-
Menerapkan fungsi callback untuk menanggapi permintaan dari GameLift layanan Amazon, termasuk
OnStartGameSession
,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); }
-
-
Bangun proyek game untuk kedua jenis target berikut: Editor Pengembangan dan Server Pengembangan.
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 UE5 proyek, yang mungkin memakan waktu hingga satu jam. -
Setelah kedua build selesai, tutup Visual Studio dan buka
.uproject
file proyek Anda untuk membukanya di Unreal Editor. -
Di Unreal Editor, paketkan server build game Anda. Untuk memilih target, buka Platform, Windows dan pilih
Your-application-nameServer
. -
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 adalah
GameLiftUnrealAppServer.exe
. -
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 menggunakanC:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe
sebagai jalur peluncuran konfigurasi runtime. -
Pastikan untuk membuka UDP port yang diperlukan pada GameLift armada Amazon, sehingga server game dapat berkomunikasi dengan klien game. Secara default, Unreal Engine menggunakan port
7777
. Untuk informasi selengkapnya, lihat UpdateFleetPortSettingsdi panduan API referensi GameLift layanan Amazon. -
Buat
file untuk build game Anda. Skrip penginstalan ini berjalan setiap kali game build dikerahkan ke GameLift armada Amazon. Berikut adalah contohinstall.bat
install.bat
file:VC_redist.x64.exe /q UE5PrereqSetup_x64.exe /q
Untuk beberapa versi Unreal Engine,
install.bat
seharusnyaVC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
catatan
Jalur file ke
<>PrereqSetup_x64.exe
file tersebut adalahEngine\Extras\Redist\en-us
. -
Sekarang Anda dapat mengemas dan mengunggah build game Anda ke Amazon GameLift.
Versi paket Open SSL you dengan build game Anda harus sesuai dengan versi yang digunakan mesin game saat membangun server game. Pastikan Anda mengemas SSL versi Open yang benar dengan build server game Anda. Untuk OS Windows, SSL format Terbuka adalah
.dll
.catatan
Package the Open SSL DLLs di build server game Anda. Pastikan untuk mengemas versi Open yang sama dengan SSL 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 Siapkan pengujian lokal dengan Amazon GameLift Anywhere.