Intégrer Amazon GameLift dans un projet Unreal Engine - Amazon GameLift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Intégrer Amazon GameLift dans un projet Unreal Engine

Cette rubrique explique comment configurer le plug-in SDK du serveur Amazon GameLift C++ pour Unreal Engine et l'intégrer dans vos projets de jeu.

Ressources supplémentaires :

Prérequis

Avant de continuer, assurez-vous d'avoir passé en revue les conditions préalables suivantes :

Prérequis
  • Un ordinateur capable d'exécuter Unreal Engine. Pour plus d'informations sur les exigences d'Unreal Engine, consultez la documentation relative aux spécifications matérielles et logicielles d'Unreal Engine.

  • Microsoft Visual Studio 2019 ou version plus récente.

  • CMake version 3.1 ou ultérieure.

  • Python version 3.6 ou ultérieure.

  • Un client Git disponible sur le PATH.

  • Un compte Epic Games. Ouvrez un compte sur le site officiel d'Unreal Engine.

  • Un GitHub compte associé à votre compte Unreal Engine. Pour plus d'informations, consultez la section Accès au code source d'Unreal Engine GitHub sur le site Web d'Unreal Engine.

Note

Amazon prend GameLift actuellement en charge les versions suivantes d'Unreal Engine :

  • 4,22

  • 4,23

  • 4,24

  • 4,25

  • 4,26

  • 4,27

  • 5.1.0

  • 5.1.1

  • 5.2

  • 5.3

Créez Unreal Engine à partir des sources

Les versions standard de l'éditeur Unreal Engine, téléchargées via le lanceur Epic, autorisent uniquement les builds d'applications clientes Unreal. Pour créer une application serveur Unreal, vous devez télécharger et créer Unreal Engine à partir des sources, en utilisant le référentiel Unreal Engine Github. Pour plus d'informations, consultez le didacticiel de création d'Unreal Engine à partir des sources sur le site Web de documentation d'Unreal Engine.

Note

Si ce n'est pas déjà fait, suivez les instructions de la section Accès au code source d'Unreal Engine GitHub pour associer votre GitHub compte à votre compte Epic Games.

Pour cloner le code source Unreal Engine dans votre environnement de développement
  1. Clonez le code source Unreal Engine dans votre environnement de développement dans une branche de votre choix.

    git clone https://github.com/EpicGames/UnrealEngine.git
  2. Consultez le tag de la version que vous utilisez pour développer votre jeu. Par exemple, l'exemple suivant utilise la version 5.1.1 d'Unreal Engine :

    git checkout tags/5.1.1-release -b 5.1.1-release
  3. Accédez au dossier racine du référentiel local. Lorsque vous êtes dans le dossier racine, exécutez le fichier suivant :Setup.bat.

  4. Dans le dossier racine, exécutez également le fichier :GenerateProjectFiles.bat.

  5. Après avoir exécuté les fichiers des étapes précédentes, un fichier de solution Unreal Engine est créé. UE5.sln Ouvrez Visual Studio, puis ouvrez le UE5.sln fichier dans l'éditeur Visual Studio.

  6. Dans Visual Studio, ouvrez le menu Affichage et choisissez l'option Explorateur de solutions. Cela ouvre le menu contextuel du nœud du projet Unreal. Dans la fenêtre de l'Explorateur de solutions, cliquez avec le bouton droit sur le UE5.sln fichier (il peut être simplement répertoriéUE5), puis choisissez Build pour créer le projet Unreal avec la cible Win64 de l'éditeur de développement.

    Note

    La construction peut prendre plus d'une heure.

Une fois la compilation terminée, vous êtes prêt à ouvrir l'éditeur de développement Unreal et à créer ou importer un projet.

Configurez votre projet Unreal pour le plugin

Suivez ces étapes pour préparer le plug-in SDK Amazon GameLift Server pour Unreal Engine à vos projets de serveur de jeu.

Pour configurer votre projet pour le plugin
  1. Visual Studio étant ouvert, accédez au volet Explorateur de solutions et choisissez le UE5 fichier pour ouvrir le menu contextuel du projet Unreal. Dans le menu contextuel, choisissez l'option Définir comme projet de démarrage.

  2. En haut de votre fenêtre Visual Studio, choisissez Démarrer le débogage (flèche verte).

    Cette action démarre votre nouvelle instance créée en source d'Unreal Editor. Pour plus d'informations sur l'utilisation de l'éditeur Unreal, consultez l'interface Unreal Editor sur le site Web de documentation d'Unreal Engine.

  3. Fermez la fenêtre Visual Studio que vous avez ouverte, car l'éditeur Unreal ouvre une autre fenêtre Visual Studio contenant le projet Unreal et votre projet de jeu.

  4. Dans l'éditeur Unreal, effectuez l'une des opérations suivantes :

    • Choisissez un projet Unreal existant que vous souhaitez intégrer à Amazon GameLift.

    • Crée un projet. Pour tester le GameLift plugin Amazon pour Unreal, essayez d'utiliser le modèle Third Person du moteur Unreal. Pour plus d'informations sur ce modèle, consultez la section Modèle à la troisième personne sur le site Web de documentation d'Unreal Engine.

      Vous pouvez également configurer un nouveau projet avec les paramètres suivants :

      • C++

      • Avec du contenu de démarrage

      • Desktop

      • Un nom de projet. Dans les exemples présentés dans cette rubrique, nous avons nommé notre projetGameLiftUnrealApp.

  5. Dans l'explorateur de solutions de Visual Studio, accédez à l'emplacement de votre projet Unreal. Dans le Source dossier Unreal, recherchez un fichier nomméYour-application-name.Target.cs.

    Par exemple : GameLiftUnrealApp.Target.cs.

  6. Faites une copie de ce fichier et nommez-la :Your-application-nameServer.Target.cs.

  7. Ouvrez le nouveau fichier et apportez les modifications suivantes :

    • Modifiez le class et constructor pour qu'il corresponde au nom du fichier.

    • Changez la Type forme de TargetType.Game àTargetType.Server.

    • Le fichier final ressemblera à l'exemple suivant :

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

Votre projet est désormais configuré pour accepter le plug-in SDK GameLift du serveur Amazon.

La tâche suivante consiste à créer les bibliothèques du SDK du serveur C++ pour Unreal afin de pouvoir les importer dans votre projet.

Pour créer les bibliothèques du SDK du serveur C++ pour Unreal
  1. Téléchargez le plugin SDK du serveur Amazon GameLift C++ pour Unreal.

    Note

    Le fait de placer le SDK dans le répertoire de téléchargement par défaut peut entraîner un échec de compilation car le chemin dépasse la limite de 260 caractères. Par exemple : C:\Users\Administrator\Downloads\GameLift-SDK-Release-06_15_2023\GameLift-Cpp-ServerSDK-5.0.4

    Nous vous recommandons de déplacer le SDK vers un autre répertoire, par exempleC:\GameLift-Cpp-ServerSDK-5.0.4.

  2. Téléchargez et installez OpenSSL. Pour plus d'informations sur le téléchargement d'OpenSSL, consultez la documentation de compilation et d'installation d'OpenSSL sur Github.

    Pour plus d'informations, consultez la documentation OpenSSL Notes pour les plateformes Windows.

    Note

    La version d'OpenSSL que vous utilisez pour créer le SDK du serveur GameLift Amazon doit correspondre à la version d'OpenSSL utilisée par Unreal pour empaqueter votre serveur de jeu. Vous trouverez les informations de version dans le répertoire ...Engine\Source\ThirdParty\OpenSSL d'installation d'Unreal.

  3. Une fois les bibliothèques téléchargées, créez les bibliothèques du SDK du serveur C++ pour Unreal Engine.

    Dans le GameLift-Cpp-ServerSDK-<version> répertoire du SDK téléchargé, compilez avec le -DBUILD_FOR_UNREAL=1 paramètre et créez le SDK du serveur. Les exemples suivants montrent comment compiler à l'aide decmake.

    Exécutez les commandes suivantes dans votre terminal :

    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

    La version Windows crée les fichiers binaires suivants dans le out\gamelift-server-sdk\Release dossier :

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

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

    Copiez les deux fichiers de bibliothèque dans le ThirdParty\GameLiftServerSDK\Win64 dossier du package du plugin Amazon GameLift Unreal Engine.

Utilisez la procédure suivante pour importer le GameLift plugin Amazon dans votre exemple de projet.

Importer le GameLift plugin Amazon
  1. Localisez le GameLiftServerSDK dossier que vous avez extrait du plugin dans la procédure précédente.

  2. Repérez-le Plugins dans le dossier racine de votre projet de jeu. (Si le dossier n'existe pas, créez-le ici.)

  3. Copiez le GameLiftServerSDK dossier dans lePlugins.

    Cela permettra au projet Unreal de voir le plugin.

  4. Ajoutez le plug-in SDK GameLift du serveur Amazon au .uproject fichier du jeu.

    Dans l'exemple, l'application est appeléeGameLiftUnrealApp, le fichier sera donc appeléGameLiftUnrealApp.uproject.

  5. Modifiez le .uproject fichier pour ajouter le plugin à votre projet de jeu.

    "Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true } ]
  6. Assurez-vous que le ModuleRules jeu dépend du plugin. Ouvrez le .Build.cs fichier et ajoutez la dépendance du GameLiftServer SDK Amazon. Ce fichier se trouve sousYour-application-name/Source//Your-application-name/.

    Par exemple, le chemin du fichier du didacticiel est. ../GameLiftUnrealApp/Source/GameLiftUnrealApp/GameLiftUnrealApp.Build.cs

  7. Ajouter "GameLiftServerSDK" à la fin de la liste desPublicDependencyModuleNames.

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

Le plugin devrait maintenant fonctionner pour votre application. Passez à la section suivante pour intégrer les GameLift fonctionnalités Amazon à votre jeu.

Ajoutez le code GameLift du serveur Amazon à votre projet Unreal

Vous avez configuré et configuré votre environnement Unreal Engine, et vous pouvez désormais intégrer un serveur de jeu à Amazon GameLift. Le code présenté dans cette rubrique permet d'effectuer les appels requis vers le GameLift service Amazon. Il implémente également un ensemble de fonctions de rappel qui répondent aux demandes du GameLift service Amazon. Pour plus d'informations sur chaque fonction et sur le rôle du code, voir Initialiser le processus du serveur. Pour plus d'informations sur les actions du SDK et les types de données utilisés dans ce code, consultez. Référence GameLift du SDK Amazon Server pour Unreal Engine

Pour initialiser un serveur de jeu avec Amazon GameLift, suivez la procédure ci-dessous.

Note

Le code GameLift spécifique à Amazon fourni dans la section suivante dépend de l'utilisation d'un indicateur de WITH_GAMELIFT préprocesseur. Cet indicateur n'est vrai que lorsque les deux conditions suivantes sont remplies :

  • Target.Type == TargetRules.TargetType.Server

  • Les plugins ont détecté les fichiers binaires GameLift du SDK du serveur Amazon.

Cela garantit que seules les versions d'Unreal Server invoquent GameLift l'API principale d'Amazon. Il vous permet également d'écrire du code qui s'exécutera correctement pour toutes les cibles Unreal que votre jeu pourrait produire.

Intégrer un serveur de jeu à Amazon GameLift
  1. Dans Visual Studio, ouvrez le .sln fichier correspondant à votre application. Dans notre exemple, le fichier se GameLiftUnrealApp.sln trouve dans le dossier racine.

  2. La solution étant ouverte, localisez le Your-application-nameGameMode.h fichier de votre application. Exemple: GameLiftUnrealAppGameMode.h.

  3. Modifiez le fichier d'en-tête pour l'aligner sur l'exemple de code suivant. Assurez-vous de remplacer « GameLiftUnrealApp » par le nom de votre propre application.

    #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. Ouvrez le Your-application-nameGameMode.cpp fichier source correspondant. Dans notre exemple :GameLiftUnrealAppGameMode.cpp. et modifiez le code pour l'aligner sur l'exemple de code suivant. Assurez-vous de remplacer « GameLiftUnrealApp » par le nom de votre propre application.

    Cet exemple montre comment ajouter tous les éléments nécessaires à l'intégration avec Amazon GameLift, comme décrit dans Ajouter Amazon GameLift à votre serveur de jeu. Cela consiste notamment à :

    • Initialisation d'un client d' GameLift API Amazon.

    • Implémentation de fonctions de rappel pour répondre aux demandes du GameLift service Amazon, notamment OnStartGameSessionOnProcessTerminate, etonHealthCheck.

    • Appelez ProcessReady () avec un port désigné pour avertir Amazon GameLiftservice lorsqu'il est prêt à héberger des sessions de jeu.

    #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. Créez un projet de jeu pour les deux types de cibles suivants : éditeur de développement et serveur de développement.

    Note

    Il n'est pas nécessaire de reconstruire la solution. Créez plutôt uniquement le projet dans le Games dossier correspondant au nom de votre application. Sinon, Visual Studio reconstruit l'intégralité du projet UE5, ce qui peut prendre jusqu'à une heure.

  6. Une fois les deux versions terminées, fermez Visual Studio et ouvrez le .uproject fichier de votre projet pour l'ouvrir dans l'éditeur Unreal.

  7. Dans Unreal Editor, empaquetez la version du serveur de votre jeu. Pour choisir une cible, allez dans Plateformes, Windows et sélectionnez Y our-application-name Server.

  8. Pour démarrer le processus de création de l'application serveur, accédez à Platforms, Windows et sélectionnez Package Project. Lorsque le build est terminé, vous devriez avoir un exécutable. Dans le cas de notre exemple, le nom du fichier estGameLiftUnrealAppServer.exe.

  9. La création d'une application serveur dans Unreal Editor produit deux exécutables. L'un d'eux se trouve à la racine du dossier de compilation du jeu et sert de wrapper à l'exécutable du serveur lui-même.

    Lorsque vous créez une GameLift flotte Amazon avec la version de votre serveur, nous vous recommandons de transmettre le fichier exécutable du serveur lui-même comme chemin de lancement de la configuration d'exécution. Par exemple, dans le dossier de compilation de votre jeu, vous pouvez avoir un GameLiftFPS.exe fichier à la racine et un autre à\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe. Lorsque vous créez une flotte, nous vous recommandons de l'utiliser C:\GameLiftFPS\Binaries\Win64\GameLiftFPSServer.exe comme chemin de lancement de la configuration d'exécution.

  10. Assurez-vous d'ouvrir les ports UDP nécessaires sur la GameLift flotte Amazon, afin que le serveur de jeu puisse communiquer avec les clients du jeu. Par défaut, Unreal Engine utilise le port7777. Pour plus d'informations, consultez UpdateFleetPortSettingsle guide de référence GameLift de l'API de service Amazon.

  11. Créez un install.bat fichier pour le build de votre jeu. Ce script d'installation s'exécute chaque fois que la version du jeu est déployée sur une GameLift flotte Amazon. Voici un exemple de install.bat fichier :

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

    Pour certaines versions d'Unreal Engine, le install.bat devrait plutôt être

    VC_redist.x64.exe /q UEPrereqSetup_x64.exe /q
    Note

    Le chemin d'accès au <>PrereqSetup_x64.exe fichier estEngine\Extras\Redist\en-us.

  12. Vous pouvez désormais empaqueter et télécharger votre build de jeu sur Amazon GameLift.

    La version d'OpenSSL que vous empaqueter avec votre build de jeu doit correspondre à la version utilisée par le moteur de jeu lors de la création du serveur de jeu. Assurez-vous d'intégrer la bonne version d'OpenSSL à la version de votre serveur de jeu. Pour le système d'exploitation Windows, le format OpenSSL est. .dll

    Note

    Package les DLL OpenSSL dans la version de votre serveur de jeu. Veillez à empaqueter la même version d'OpenSSL que celle que vous avez utilisée lors de la création du serveur de jeu.

    • libssl-1_1-x64.dll

      libcrypto-1_1-x64.dll

    Package vos dépendances ainsi que le fichier exécutable de votre serveur de jeu à la racine d'un fichier zip. Par exemple, openssl-lib les dll doivent se trouver dans le même répertoire que le .exe fichier.

Étapes suivantes

Vous avez configuré et configuré votre environnement Unreal Engine, et vous pouvez maintenant commencer à GameLift intégrer Amazon dans votre jeu.

Pour plus d'informations sur l'ajout GameLift d'Amazon à votre jeu, consultez ce qui suit :

Pour obtenir des instructions sur le test de votre jeu, consultez Testez votre intégration à l'aide des GameLift Anywhere flottes Amazon.