Skip to content

Unreal Engine Development

Overview

This document covers various aspects of game development using Unreal Engine that I am familiar with, with a focus on C++, Multiplayer, Character Movement and Animations, Gameplay Ability System, and Online Subsystems. Each section demonstrates my proficiency with detailed descriptions and relevant project examples.


1. Blueprinting

Blueprints in Unreal Engine provide a visual scripting system that allows for the creation of game mechanics, interactions, and systems without needing to write code. My expertise in Blueprinting includes:

  • Creating complex gameplay mechanics: Designed and implemented intricate gameplay elements such as puzzles, interactive environments, and AI behaviors using Blueprints.
  • User Interface development: Developed dynamic and responsive UIs with Blueprint scripting. Every Avatar UI released at Surreal was written using an Avatar System that I wrote, and I am familiar with creating modular widgets to cover a variety of tasks.
  • Debugging and optimization: Utilized the Blueprint Debugger and optimized Blueprint scripts for performance. A common pasttime of mine is to review core codebases and "bake in" changes by converting Blueprint functions and classes into C++, gaining significant performance back. Optimization is a maintenance task that has to be done regularly to avoid the slow erosion of your projects performance.

Project Example:

  • At Surreal, a large portion of the Avatar System was written with Blueprints. The Blueprints were based on C++ classes using BlueprintNativeEvents. This meant we could prototype and override core functions of the Avatar System while creating a path to gain performance back as we slowly moved code into C++.
  • Gauntlet utilizes Blueprints for the Gameplay Abilities that are part of the combat mechanics of the game. This allows for designers to prototype and debug quickly without the need for C++ knowledge. It uses strongly commented C++ functions as pathways into deeper parts of the gameplay systems as needed.

2. C++

Unreal Engine's powerful C++ API allows for more granular control and optimization of game systems. I create custom components, characters and data structures to extend the functionality and provide a solid foundation to build gameplay mechanics. I optimize game logic periodically to clear up technical debt and maintain the codebase for a project. I really enjoy designing systems that will be used by designers and other developers, creating configurable elements that accelerates future development.

Project Example:

  • At Surreal, we utilize C++ to manage all of our core and gameplay systems that make up the application. I wrote backend communication code to allow external customization for a variety of systems in C++.
  • Gauntlet and Ember both utilize C++ classes as a base to reduce an overabundance of Blueprint references within the project.

3. Multiplayer Replication

Connecting different clients of the game together so that a games state changes are synchronized across all clients in a game is a common feature of Unreal Engine. In Unreal Engine, knowing how to work with the Replication Graph, creating RepNotify (OnRep) functions in C++ and Blueprints, and knowing differences between Server/Client/Multicast events is critical to creating usable Server/Client code. It's also good to know what happens to late joiners, or when a user disconnects. One of the final pieces of the replication puzzle, creating dedicated servers using server builds or enabling P2P client/servers and working through the game logic to connect clients to specific sessions. This feature often ties into the Online Subsystem of choice, as it's used as a place to list available sessions for users to join.

Project Example:

  • Surreal utilizes an in-house developed networking plugin along with a custom Unreal Engine build to allow rapid scalability. We use standard Unreal Engine logic like RepNotify events to maintain sync across all clients.
  • Gauntlet has a traditional networking stack using dedicated servers to handle connectivity between users. It is powered by GAS for replicated gameplay logic, but has several other replicated events and variables within the game.

4. Character Movement Component

The Character Movement Component handles movement logic for character classes in Unreal Engine. Understanding it is the key to correcting the visual errors you see when playing a multiplayer networked game. The CMC uses prediction based on the input of the autonomous proxy while it is sending the input to the server for validation, if the server sends back a different value, the local client is corrected. For other users who see your character moving, the server reports the movement values to the end user, providing smooth gameplay at varying latencies.

Project Example:

  • Surreal does not heavily modify the CMC, but the values created by the system are read and modified by the character gameplay mechanics and the animation blueprints.
  • Gauntlet has an extension of the CMC to include tie-ins to the Gameplay Ability System, allowing movement actions to be driven by gameplay but still maintained by the CMC for smooth results. It also has a climbing system added as a custom movement mode.

5. Animation Blueprints

Animation Blueprints allow for complex animation logic and blending. My skills include:

  • State machines: Set up state machines to handle different animation states and transitions.
  • Blend spaces: Used blend spaces for smooth transitions between animations based on player input.
  • Custom Poses: Poses for a variety of situions like sitting, leaning, and driving vehicles.
  • Dynamic Skeletal Changes: Tying gameplay logic into skeletal changes on the character.

Project Example:

  • Surreal uses an advanced Animation Blueprint for the Player, managing idles, seating in a variety of positions, handling systems like flying and a suite of custom emotes. Using per bone layering, the player is able to have poses like holding a drink be seamlessly blended into all other animation, and modifying the skeleton based on the items the character has equipped provides modularity for an extensive library of clothing for the player to choose from.
  • Gauntlet uses a custom set of animations combined with the AnimBP layering logic introduced with UE5 and showcased in the Lyra project. It's still early in its usage but the performance gains from using a thread safe functions whenever possible results in a performant starting point. Combined with a C++ base class for ease of access to any gameplay features, and a built-in listener that allows a designer to respond to any GameplayTags that are added onto the character.

6. Gameplay Ability System

The Gameplay Ability System (GAS) provides a framework for creating abilities with complex logic. My expertise includes:

  • Ability creation: Designed and implemented various abilities with activation conditions, costs, and cooldowns with tie-in to UI.
  • Attributes and Effects: Managed character attributes and their interactions with abilities and items, and applied gameplay effects to modify characters.

Project Example:

  • In Gauntlet, I utilized GAS to create a range of abilities, for both melee and ranged combat. Other systems within the game also tie into this system, providing pathways for items, skill progression trees, and various elements within levels to impact gameplay. AI also utilizes the system, attacking the user based on intended behavior. As a top-down game, the visual associated with abilities as you prepare to cast is a shape scaled to the appropriate size for the spell, giving users real-time feedback on where they intend to cast.

7. Online Subsystems / Backends

Online subsystems in Unreal Engine handle interactions with online services for games. The Steam OnlineSubsystem is the most commonly used OSS for broadcasting games to other users, but more developers within Unreal are moving towards EOS to integrate their game. Common APIs for managing gameplay data are: Authentication, Achievements, Leaderboards, and Player Data (SaveGame). They also often help facilitate social features between Players like Friends lists and chat.

Project Example:

  • Surreal uses a custom system for managing backend communication for saving game and player state. It covers many of the same features as a traditional OSS. As part of the interface is React based and used in the browser, we had to think in a generic way so that other systems could consume data.

  • Gauntlet is integrated with EOS, but still early in development with the OnlineServices plugin. It will use Achievements, Player Data Storage, Stats, Lobbies and Authenticate with EAS, allowing users to login with their Epic account.


Final thoughts..

This is to show my knowledge on parts of Unreal Engine that combine into a game. Covering a wide range of topics has proven essential for my game development, and I hope these topics showcase my passion for excellence in the systems I use and write.

For further details on specific implementations and code samples, please refer to my sample repository or contact me