Did you miss our first Livestream? Don’t worry - the recording is now available on our YouTube channel and embedded below.
As you’ll see, our crack engineering team walked through the latest release of SpatialOS for Unreal - 2019.1. Paul Thomas and Claire Thomas demonstrated how it enhances your multiplayer, allowing for faster iteration, more flexible design and an easier launch.
Included in the new update are all the best bits of the SpatialOS package - our industry-standard hosting, an array of online services, a set of tools for developing and managing your multiplayer game, and a unique network stack, which lets you go far beyond the norm of online games.
First off, we’ve added dynamic components. You can now add and remove components dynamically at runtime. This brings us up to parity with the feature set of the native Unreal Engine, meaning it’s now possible to directly port an Unreal game across to SpatialOS.
Now we have those dynamic components, we’ve also added support for Unreal’s Gameplay Abilities System (GAS). This was introduced in Unreal 4.20 and gives you a really nice framework for making gameplay abilities in MOBAs, FPSes or RPGs, handling all the animations, cooldowns and so on. It’s used in Fortnite, so you know it’s robust and works at scale.
We’ve also added Ordered RPCs. This is a simple-sounding feature, which ensures that players’ clients experience your game in the order you want them to - so that death animations play before loot drops, for example. Most online networking architecture supports it.
We’ve been looking at ways to make local iteration with SpatialOS for Unreal as fast or faster than native Unreal throughout our workflow. Our first step was to have a faster local deployment start-up time - taking it down from 30-40 seconds to 3-4 seconds - so developers can work completely within our networking whilst developing.
We’ve also introduced automatic worker restart. (Workers are processes that SpatialOS manages for you - like Unreal servers or C++ or C# processes). When you change your server code, we now restart everything automatically in the background, so you don’t have to do it yourself, which should improve your workflows and iteration times.
We’ve also moved several of the workflows that were on our Command Line Interface and turned them into in-editor workflows. For example, you can create a cloud instance from an in-editor button, without leaving Unreal.
Another huge step forward is simulated player testing. First, you define an AI NPC in Unreal, C++ or C#, then upload that NPC into SpatialOS and tell it that you want to include simulated players in your game instance. SpatialOS will spin up those simulated players across a range of servers and then they’ll enter your instance in exactly the same way it a real-world player would. Once in, they’ll move and shoot just like a real player in-game.
There are two huge benefits from this. First, you can load-test your game. For example, every day you could load 64 players in and test the frame rate for your game as you change the design, or vary the player count to see if there are performance bottlenecks. You could also scenario-test your game - for example, testing the scenario where a player runs across your map, picks up a gun and shoots it to check your game loop. With our logs and metrics stacks, you can check for errors or review data.
We’ve also expanded the range of systems simulated players can access, to check your online systems end-to-end. For example, a simulated player could go through your authentication systems, be passed with a login token to your matchmaking system, be put into a game with other players, and access an inventory server. You could test this with just ten players, to check the flows are working correctly, or spin up 100,000 players, to make sure your systems scale up and down for launch day.
Traditionally, when you build the architecture for your online game, you have a single server doing all the computation - AI behaviour, player movement, network connections, everything. This is fine for 64 players with a handful of AI, or just 100 players. Go past that, and the server gets overloaded, FPS drops and you have a bad experience for your players.
SpatialOS puts a networking layer (‘the SpatialOS Runtime) between servers and clients, meaning that you can now have multiple servers working together seamlessly across a single game world. With offloading, we’re doing this with just two servers - one computes the core loop of your game, while the other might be doing AI or weather effects, taking the load off the first server. Our partner studio, Midwinter Entertainment, is doing this with their game Scavengers.
Using one of our example projects, if you’re running around 300 AI NPCs with around 16 players, Unreal will go to around 15 FPS, which isn’t acceptable for a twitch-based shooter. With this early version of SpatialOS and Unreal, that model runs fine up to around 64 players with 400 NPCs - and performance gains in our later releases are going to improve this massively.
Normally, when you’re building an online game, there’s a lot of tech that surrounds the core game loop. There’s a player matchmaker, server management, unified player authentication across many platforms, and cross-session data like inventory, score tables, ranking or XP. We’re filling those gaps with our online services.
With that in mind, we’ve released our own matchmaker. It’s written in C# and completely open-source, so you don’t need to use SpatialOS with it. It’s self-managed, so you’ll deploy it yourself on GCP or AWS, and has Kubernetes support for ease of scaling. You’ll also need to define your own logic for matchmaking, whether you filter by latency, ranking or something else.
We’ve also added seamless database integration, using a specialised database sync worker. This means you can move data to a third party SQL database and back without the need for custom code.
Our next Livestream will demonstrate how SpatialOS for Unreal empowers more flexible game architecture. This live stream is ideal for current SpatialOS developers who are interested in trying offloading.
We'll show how SpatialOS for Unreal enables you to offload computation for game systems like AI, leading to an increase in in-game scale and complexity beyond a single dedicated Unreal server.
Get started: flexible design and offloading. August 28, 2019, 6PM BST / 10AM PST.