
Welcome to the course!
Tap into your most valuable resource in this course!
In order to package a dedicated server build, we need Unreal Engine from source.
Important things to keep in mind!
To build a dedicated server, we must compile Unreal Engine from source.
A First-Person Shooter template project is provided for this course. The project is compatible with Unreal Engine version 5.4 and above. Download, then right-click on the .uproject and switch Unreal Engine versions if you are on a newer version!!!
We discuss the prerequisites for integrating the GameLift Server SDK with our Unreal Engine project.
To package for a dedicated server, we must create a server Build Target. We learn about build targets and create one for server builds.
We lay out the game plan for integrating GameLift with our Unreal Engine project, and look at the prerequisites for compiling it. If you wish to skip these steps and download the necessary .dlls and GameLift plugin, download the OpenSSL binaries and Gamelift plugin .zip files in the resources.
We download Strawberry Perl, a prerequisite for OpenSSL. Don't worry, we won't be doing any Perl programming in this course!
We get NASM (Netwide Assembler), an assembler/disassembler for doing low-level operations - a prerequisite for OpenSSL
We build OpenSSL and get the coveted binaries we need to the GameLift SDK to implement its security measures.
We download the Amazon GameLift Server SDK
We compile the GameLift Server SDK and add its binaries to the GameLift plugin
We convert our project to use Rider as the IDE - it's now FREE for non-commercial use!
We create our AWS Account and take a look at the AWS Console Home
We learn how to manage our billing, and set up a billing alarm to send us notification if billing ever goes above a specified threshold. Everything we do in this course will be covered under the AWS Free Tier!
We learn the difference between an IAM User and Identity Center Users. We will be following best practices recommended by AWS and creating an Identity Center, Organization, and Identity Center User for daily use, so we don't use the Root User for daily tasks.
We set up Identity Center and make our Identity Center User.
We create a permission set and grant it to our Identity Center user to give it access to AWS.
We create a Game Mode and prepare it for code to connect to GameLift
We begin to add code to our Game Mode for harvesting data from command line arguments for the GameLift connection.
We implement the callback which GameLift will call on our Game Mode in response to the creation of a GameLift Game Session
We implement the callback which GameLift will call on our Game Mode in response to the termination of a GameLift process
We implement the callback for reporting health checks from the server to GameLift
We implement code to harvest the selected port from command line arguments or select the game process default if it isn't supplied
We call ProcessReady to initialize GameLift
We package the game, both for clients and the dedicated server
We add the OpenSSL binaries to our packaged build directory
We download the latest version of the AWS CLI (command-line interface)
We configure the CLI to retrieve our SSO credentials automatically
We learn how to create a gamelift location for our Anywhere Fleets
We create an Anywhere Fleet for hosting a dedicated server on our own compute resource (our PC)
We run the register-compute command to register our own compute resource with our Anywhere Fleet
We run get-compute-auth-token to get an authentication token for creating GameLift Game Sessions
We learn how we can test our dedicated server by connecting to it with a client build
We create a game session using the auth token we retrieved using get-compute-auth-token
We create a Player Session for our Game Session
We discuss what virtual machines are, why they are useful, and the benefits of hosting game servers on them rather than self-hosted hardware
We create an install batch file for virtual machines to execute upon startup, in order to install all required prerequisites to run our Unreal Engine dedicated server.
We upload our dedicated server build to GameLift so it can be run on a virtual machine
We create a GameLift-hosted fleet that can run EC2 instances with our dedicated server build
We launch our client build and connect to the cloud-hosted dedicated server, running on a virtual machine in an EC2 instance in our GameLift-hosted fleet.
We delete our fleet, ensuring that it will not use up our free EC2 hours while not in use.
We discuss how Lambdas are "serverless" and what it means for a function to be serverless
We create our first Lambda function
We discuss the anatomy of a Lambda function and all of its parts
We create a test event for our first Lambda function
We learn how to log information to the console and retrieve that information in Cloudwatch
We create a ListFleets Lambda function for listing all fleets
We discuss the try/catch block and how we can use it to control what happens in the event that our Lambda throws an error
We discuss our plan for setting up API Gateway to create API endpoints to trigger our lambdas via HTTP requests
We create a REST API in API Gateway
We create a module in our Unreal Engine project to encapsulate all of our dedicated server code
We create the Game Mode class for our dedicated servers module
We create a Test HUD for displaying widgets for sending and receiving HTTP requests
We create a List Fleets widget for our ListFleets API endpoint
We create an HTTP Request Manager class to handle sending HTTP requests, receiving HTTP responses, and parsing the data
We create a Data Asset to store the API endpoints for our APIs
We create an HTTP Request in our HTTP Request Manager class
We parse the HTTP Response to get its data
We parse the Metadata in our HTTP Response into a struct
We parse the payload for the ListFleets response
We parse errors and handle them when they occur
We create a ListFleets callback function for when we parse the response so we can display listed fleets to our HUD
We add Fleet Id widgets to our ListFleetsBox in the HUD
We set up the classes for our game Portal
We create callbacks for joining games
We create the code for describing fleet attributes
We loop over the fleets we found when describing fleet attributes
We call describe game sessions to find all game sessions running on our fleets
We create a game session if it does not already exist
We create an endpoint in our REST API for finding or creating a game session
We make the HTTP request for finding or creating a game session
We create the struct for holding information for the game session
We parse the HTTP response to store the data in our game session struct
We create a Lambda function for creating a player session
We create an endpoint to trigger our Create Player Session lambda
We handle the game session status to determine whether or not we can create a player session yet
We learn how to serialize content for our HTTP requests to pass data into the lambda's event object
We create the player session struct to hold player session data
We parse the HTTP response into a player session struct
We add code for travelling to the game server
We test travelling to our game server hosted on a GameLift fleet
This course uses the AWS Free Tier!
Have you ever wondered how you can let your players launch your game, and connect directly with a server, playing in multiplayer with other players right away?
Or perhaps how you can allow your players to create user accounts for your game, with username, password and email? How do games allow you to sign up for a new user account, receiving a 6 digit verification code in their email, allowing them verify their account for your game?
Have you ever wondered how to save player data in databases, so they can see their achievements in the game, showing their progress, skill level, items, or stats from previous matches? Or how leaderboards are made, showing the top scoring players who play the game across the planet?
How can you run dedicated servers that players can connect to? How can you set up servers in different regions around the globe, providing access to your game to players in different countries, allowing them to enjoy gameplay with the lowest possible ping times? And how to make competitive multiplayer games fair to all players, with an authoritative server optimized to manage server operations, reduce lag and provide a consistent and performant experience for everyone?
This course is a masterclass for dedicated servers and cloud backend for unreal engine games.
By the end of this course, you will be able to:
Compile Unreal Engine from source, create client and server build targets, and package dedicated server and client builds of your game
Integrate the GameLift Server SDK into your game to connect with GameLift
Learn how to make API calls with the AWS (command-line interface)
Host dedicated servers, both on your own machine and on cloud-hosted virtual machines (and you’ll know what those are)
Learn how to create serverless functions (in AWS Lambda) to access cloud resources and use AWS SDKs
Create secure user pools, where your game's players can create their own login/password, with email verification with Amazon Cognito
Implement security, requiring temporary access tokens granted via user pool login in order to perform game actions
Create your own REST API with endpoints that can be accessed via HTTP request, and secure them to require authentication tokens using Amazon API Gateway
Learn about HTTP requests and how to send them from Unreal Engine C++ code, triggering serverless functions and accessing cloud resources
Learn about formatting JSON data for HTTP requests, and Unreal's JSON utilities for conversion from JSON to USTRUCTs for ease of use of data retrieved from the cloud
Create NoSQL databases, storing persistent game data for players, including game stats, career, and leaderboard info using the DynamoDB, a high-speed, highly optimized system for storing data to databases
Implement game lobbies, managed by dedicated servers, displaying player names and efficiently replicating lobby data with Fast Array Serializers
Create a sign up/login menu with email verification for new users, and a game Access Portal where we can view Career and Leaderboard data, as well as launch the game lobby
Learn AWS best practices when it comes to security, Identity and Access Management, Identity Center, Roles, Policies, and Permissions
Learn how to access the AWS documentation for all AWS APIs and how to easily use them to create code to create, access, and manipulate data on the cloud
Create and manage Game Sessions and Player Sessions in Amazon GameLift
Create Server and Client packaged builds of your game, and connect to the server from client builds without any external tools (just launch the game, sign-in in the game, connect in the game)
Connect to cloud services without even being connected to a game server (single-player games)
Closely monitor your aws billing and management console and setup billing alarms
And so much more!
You’ll be creating an AWS account and learning how to manage it using recommended best practices for the cloud. All of the core features of this course use the free tier, aside from two optional lectures using advanced security features in AWS for custom access token scopes – which cost me less than .69 cents to implement for this course. But you can skip those two lectures if you wish to stay in the free tier.
I’ve created and provided you with an FPS template project as a starting point, with shooter mechanics so we can have some stats to save to the cloud, but it’s not required – you can use your own game project, or a completely empty game project if you want! This course is about creating and hosting servers and setting up the cloud backend for your games.
We’ll be downloading and compiling Unreal Engine from source – which means you will need at least 230 GB of storage for this course. You must know the basics of Unreal Engine C++. You must use an Unreal source build of at least UE5.4 or above. (You can use the latest version of the engine, everything works).
You do NOT need any experience or knowledge of cloud architecture.
It’s time to take your games to the next level, and learn how shipped games manage their users, data, and their game servers.
Are you ready to upgrade your game development skills? I’ll see you in the course!