Use Extend Codegen CLI to generate Unreal SDK Plugin for Extend Service Extension
Overview
This article provides a step-by-step guide on how to generate a custom service plugin for the AccelByte Unreal SDK using the Extend Codegen CLI template pack.
A custom service module allows developers to leverage the AccelByte Unreal SDK to interact with custom service APIs. This includes services created with the Extend Service Extension, as well as any other custom service that provides an OpenAPI 2.0 specification.
The Extend Codegen CLI template pack consists of a Makefile and some Jinja template files. To generate the necessary code, simply invoke a single make command. This command triggers the Extend Codegen CLI to process the Jinja template files alongside an OpenAPI 2.0 JSON file, which outlines the custom service APIs, to generate the corresponding code.
Prerequisites
-
Windows 11 WSL2 or Linux Ubuntu 22.04 with the following tools installed.
a. Bash
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
...b. Make
- To install from Ubuntu repository, run:
sudo apt update && sudo apt install make.
make --version
GNU Make 4.3
...c. Docker (Docker Engine v23.0+)
- To install from Ubuntu repository, run:
sudo apt update && sudo apt install docker.io docker-buildx docker-compose-v2. - Add your user to
dockergroup:sudo usermod -aG docker $USER. - Log out and log back in so that the changes take effect.
docker version
...
Server: Docker Desktop
Engine:
Version: 24.0.5
... - To install from Ubuntu repository, run:
-
Extend Codegen CLI template pack zip for AccelByte Unreal SDK.
-
A valid OpenAPI 2.0 JSON file for your custom service.
infoIf your custom service uses the Extend Service Extension, an OpenAPI 2.0 JSON file is automatically generated when the app is deployed in AccelByte Gaming Services (AGS). To access it, open the AGS
Admin Portal, navigate to your app'sApp Detailspage, clickOpen API Documentation, and find the JSON file link at the top of the Swagger UI page.Alternatively, if you need to get the OpenAPI 2.0 JSON file before deploying your app in AGS, see here.
Generate Unreal SDK Plugin for Extend Service Extension
-
Place the OpenAPI 2.0 JSON file for your custom service in the
my-unreal-project/specfolder. In this example, the file is namedguild.json. Next, copy theguild.jsonfile into the following three folders:Client,GameServer, andModels./path/to/my-unreal-project/
|__ ...
|__ MyAwesomeGame.uproject
|__ Config
|__ Content
|__ Plugins
|__ Source
|__ spec/
|__ Client/
| |__ guild.json <
|__ GameServer/
| |__ guild.json <
|__ Models/
| |__ guild.json <
|__ guild.jsonimportantThe Extend Codegen CLI template pack uses the OpenAPI 2.0 JSON file name as an identifier for your service: You can rename the file according to your preferences, but we recommend using all lowercase alphabets (a-z) to avoid issues generating code.
cautionWhen working with multiple OpenAPI 2.0 JSON files, identical
basePathvalues across files may cause issues in the generated code: We recommend ensuring that each OpenAPI 2.0 JSON file has a uniquebasePathvalue that matches the actual base path when the service is deployed. -
Unzip the downloaded Extend Codegen CLI template pack, navigate to the extracted folder, and run the
makecommand to generate the code.unzip accelbyte-unreal-sdk-template-pack.zipcd accelbyte-unreal-sdk-template-pack/make all \
CODEGEN_IMAGE_VERSION=x.x.x-alpha \
PROJECT_PATH=/path/to/my-unreal-project \
SPEC_PATH=/path/to/my-unreal-project/spec \
PACKAGE_TYPE=plugin \
ADMIN_API_PATH=/admin/info- The
CODEGEN_IMAGE_VERSIONcan be found here. For new projects, it is recommended to use the latest available version. - The
PROJECT_PATHandSPEC_PATHcome from step 1. - The
PACKAGE_TYPEhas two options:- module: Generates as a module within the
AccelByteUe4Sdkplugin. - plugin: Generates as a standalone plugin named
AccelByteUe4SdkCustomization.
- module: Generates as a module within the
- If
ADMIN_API_PATHis specified, the ServerAPI will include any endpoints with the specified path, while the ClientAPI will include all other endpoints. IfADMIN_API_PATHis not specified, both ServerAPI and ClientAPI will include all available endpoints. - If the
Pluginsfolder does not exist in your Unreal project, you will need to create it manually.
- The
-
Add
AccelByteUe4SdkCustomizationintoPublicDependencyModuleNamesof your project.Build.csfile.PublicDependencyModuleNames.AddRange(new string[] { ..., "AccelByteUe4SdkCustomization" }); -
[OPTIONAL] If
PACKAGE_TYPEis set to module, you need to add theAccelByteUe4SdkCustomizationmodule in theAccelByteUe4Sdk.upluginfile.{
"Name": "AccelByteUe4SdkCustomization",
"Type": "Runtime",
"LoadingPhase": "PreDefault"
}
Integrate Extend Service Extension API into your Unreal project
-
Include the API from the
AccelByteUe4SdkCustomizationplugin.// #include "Api/AccelByte<ApiName>Api.h"
#include "Api/AccelByteGuildApi.h" -
Call the API function.
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
// ApiClient->GetApiPtr<AccelByte::Api::<ApiName>>()->SomeFunction(...);tipIf you need to override the
ServerUrlof your custom service and/or thebasePath, refer to the guide for Enabling environment switching for Unreal.