Open the Epic Games Launcher,go to your Fab Library and search for "Kronos Matchmaking".
Press the Install To Engine button.
Select the desired engine version and install the plugin.
Enabling the Plugin
Once the plugin is installed, go to Edit -> Plugins and under the "Online" category you should be able to see "Kronos Matchmaking". Please make sure that the plugin is enabled!
If you plan on using Kronos from C++ don't forget to list it in your build dependencies. The build file is located in the "Source" folder of your project.
// Include Kronos as a dependency.PrivateDependencyModuleNames.Add("Kronos");// Additional includes you may need when extending certain Kronos classes.PrivateDependencyModuleNames.AddRange(newstring[] { "OnlineSubsystem","OnlineSubsystemUtils","Lobby","UMG" });// Unreal Engine 5 users may also need to include this module.PrivateDependencyModuleNames.Add("CoreOnline");
Project Configuration
1. Configuring the Online Subsystem
Kronos is built on the Online Subsystem (OSS) framework of Unreal Engine. Platforms such as Steam and EOS have their own Online Subsystem implementation in the engine by default. You just need to configure which OSS should be loaded by the engine. Kronos will do all matchmaking related features through the active OSS, so if you have it configured as Steam then sessions (online rooms) will be created and advertised on the Steam servers.
The Null Online Subsystem is an IP based subsystem that is meant to be used for testing purposes. It is only capable of handling sessions on the local network (LAN). In general you will only use this while testing in the editor. To configure this Online Subsystem, add the following settings to your project's DefaultEngine.ini file:
; The Online Subsystem to be used by the engine.[OnlineSubsystem]DefaultPlatformService=Null; Specific configuration of the Null Online Subsystem.[OnlineSubsystemNull]bEnabled=TruebAutoLoginAtStartup=True; The net drivers to be used by the game.; GameNetDriver: Used by regular game connections (server-client).; BeaconNetDriver: Used by the party and reservation systems of Kronos.[/Script/Engine.GameEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; The net drivers to be used by the editor.; Only ever used during PIE so just use the IpNetDriver.[/Script/UnrealEd.EditorEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; Specific configuration of the Ip Net Driver.[/Script/OnlineSubsystemUtils.IpNetDriver]NetConnectionClassName="/Script/OnlineSubsystemUtils.IpConnection"ConnectionTimeout=60.0InitialConnectTimeout=60.0
The Steam Online Subsystem interfaces with the Steam platform. To configure this Online Subsystem, add the following settings to your project's DefaultEngine.ini file:
; The Online Subsystem to be used by the engine.[OnlineSubsystem]DefaultPlatformService=Steam; Specific configuration of the Steam Online Subsystem.[OnlineSubsystemSteam]bEnabled=TrueSteamDevAppId=480GameServerQueryPort=27015bInitServerOnClient=FalsebAllowP2PPacketRelay=TrueP2PConnectionTimeout=90bRelaunchInSteam=False; The net drivers to be used by the game.; GameNetDriver: Used by regular game connections (server-client).; BeaconNetDriver: Used by the party and reservation systems of Kronos.[/Script/Engine.GameEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; The net drivers to be used by the editor.; Only ever used during PIE so just use the IpNetDriver.[/Script/UnrealEd.EditorEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; Specific configuration of the Steam Net Driver.[/Script/OnlineSubsystemSteam.SteamNetDriver]NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"ConnectionTimeout=60.0InitialConnectTimeout=60.0
The EOS Online Subsystem interfaces with the EOS platform. To get things working with EOS you'll first have to register and configure a product in the EOS Developer Portal and then configure the Online Subsystem to use your product. For the exact steps required please refer to the Setup section of the following documentation page: Online Subsystem EOS
WARNING: The official documentation by Epic Games for EOS was using incorrect net driver configuration! Make sure to use NetDriverEOS everywhere.
; The Online Subsystem to be used by the engine.[OnlineSubsystem]DefaultPlatformService=EOS; Specific configuration of the EOS Online Subsystem.[OnlineSubsystemEOS]bEnabled=True; Further configuration of the EOS Online Subsystem.; Your Artifact settings go here (see EOS documentation).; This can be edited from within the editor! Do not modify directly.[/Script/OnlineSubsystemEOS.EOSSettings]; The net drivers to be used by the game.; GameNetDriver: Used by regular game connections (server-client).; BeaconNetDriver: Used by the party and reservation systems of Kronos.[/Script/Engine.GameEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemEOS.NetDriverEOS",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemEOS.NetDriverEOS",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; The net drivers to be used by the editor.; Only ever used during PIE so just use the IpNetDriver.[/Script/UnrealEd.EditorEngine]!NetDriverDefinitions=ClearArray+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
; Specific configuration of the EOS Net Driver.[/Script/OnlineSubsystemEOS.NetDriverEOS]bIsUsingP2PSockets=TrueConnectionTimeout=60.0InitialConnectTimeout=60.0
After configuring your Online Subsystem of choice, please go to Edit -> Plugins and make sure that the plugin for your Online Subsystem is enabled as well.
IMPORTANT: While developing and testing the game inside the editor, you should always revert back to using the Null Online Subsystem! Please refer to the Testing & Debugging page for more information.
Note that you can configure multiple Online Subsystems and switch between them via the DefaultPlatformService config param. This makes development iteration faster. However, do not configure net drivers twice! In most cases the engine will automatically use the fallback net driver when the primary net driver fails to initialize (e.g. due to using a net driver that is for a different Online Subsystem).
2. Configuring Online Beacons
Kronos uses Online Beacons to manage parties and game reservations. OnlineBeacons are special actors in Unreal Engine that provide a "lightweight" way to contact a server without committing to a normal game connection. To configure the beacons used by the plugin, add the following settings to your project's DefaultEngine.ini file:
Kronos has its own configuration page in Edit -> Project Settings -> Kronos Matchmaking where you can customize most features of the plugin. You can override a lot of things here, but for now please configure the following params based on your Online Subsystem of choice:
Find Friend Session Supported: Whether the FindFriendSession function is supported by the online subsystem of choice. Steam supports this, EOS does not.
Find Session By Id Supported: Whether the FindSessionById function is supported by the online subsystem of choice. EOS supports this, Steam does not.
Overriding the Online Session
The OnlineSession class in Unreal Engine is a lesser known manager type class that is part of the GameInstance and responsible for implementing and handling online service related events and functions. This class is the core of the Kronos Matchmaking plugin.
At this time the OnlineSession class in Unreal Engine can only be overridden from C++ which means Blueprint projects must use the KronosGameInstance class. This is basically a "dummy" class, as its only purpose is to override the online session for the project. Please go to Project Settings -> Maps & Modes and set the GameInstance class to KronosGameInstance. Of course if you already have your own game instance blueprint, you can just set its parent class to KronosGameInstance. That will work as well.
C++ projects can either use the KronosGameInstance class, or use their existing GameInstance classes to override the online session for the project (see code below). Please go to Project Settings -> Maps & Modes and set the GameInstance class to either KronosGameInstance or override the online session class manually.
To have your custom GameInstance class compatible with Kronos, simply override the GetOnlineSessionClass() function:
Important information when you are preparing the final builds of your game.
NOTE: Information here are only relevant when packaging the project in Shipping build configuration.
Using Steam In Shipping Builds
While using the Development or DebugGame configurations, the Steam Online Subsystem automatically creates a "steam_appid.txt" somewhere inside the game's folder. This ensures that Steam can initialize correctly. However, this is not the case in Shipping configuration! If you are not launching the game through Steam (using your unique Steam App Id) the Steam API will fail to initialize. To fix this:
If you have your own unique App Id on Steam:
Change the bRelaunchInSteam config param to True in your DefaultEngine.ini. This will ensure that even if you start the game's exe file directly, it will be closed and relaunched through Steam instead.
If you do NOT have your own unique App Id on Steam:
After packaging, create a "steam_appid.txt"file in "<ProjectName>/Binaries/Win64/" folder of the game. The txt file should contain nothing but the App Id you wish to use, in this case the numbers: 480
Configuration Files Are Cached
When packaging your project in Shipping configuration, the engine will save the configuration files to an external location outside of the game's folder. This means that if you made any changes to a config file before packaging, you may have to manually update the config files in the external location as well!
On Windows, configuration files are saved to: "C:\Users\<UserName>\AppData\Local\<ProjectName>"