Configuration
Last updated
Last updated
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.
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(new string[] { "OnlineSubsystem", "OnlineSubsystemUtils", "Lobby", "UMG" });
// Unreal Engine 5 users may also need to include this module.
PrivateDependencyModuleNames.Add("CoreOnline");
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:
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.
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).
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:
[/Script/Kronos.KronosPartyListener]
ListenPort=7787
[/Script/Kronos.KronosPartyClient]
BeaconConnectionInitialTimeout=60.0
BeaconConnectionTimeout=25.0
[/Script/Kronos.KronosReservationListener]
ListenPort=7788
[/Script/Kronos.KronosReservationClient]
BeaconConnectionInitialTimeout=60.0
BeaconConnectionTimeout=25.0
The default EOS Online Subsystem in Unreal currently only works with ListenPort=15000
!
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. Steam supports this, EOS does not.
Find Session By Id Supported: Whether the FindSessionById
function is supported by the Online Subsystem. EOS supports this, Steam does not.
The OnlineSession
class in Unreal Engine is a lesser known manager type class that is part of the GameInstance
. It's name is a bit misleading as its not related to sessions themselves, but rather acts as a manager for them. It's 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
. If you already have your own game instance blueprint, you can just set its parent class to KronosGameInstance
. That will work as well.
Important information when you are preparing the final builds of your game.
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
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>"
; The Online Subsystem to be used by the engine.
[OnlineSubsystem]
DefaultPlatformService=Null
; Specific configuration of the Null Online Subsystem.
[OnlineSubsystemNull]
bEnabled=True
bAutoLoginAtStartup=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.0
InitialConnectTimeout=60.0
; The Online Subsystem to be used by the engine.
[OnlineSubsystem]
DefaultPlatformService=Steam
; Specific configuration of the Steam Online Subsystem.
[OnlineSubsystemSteam]
bEnabled=True
SteamDevAppId=480
GameServerQueryPort=27015
bInitServerOnClient=False
bAllowP2PPacketRelay=True
P2PConnectionTimeout=90
bRelaunchInSteam=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.0
InitialConnectTimeout=60.0
; 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=True
ConnectionTimeout=60.0
InitialConnectTimeout=60.0
virtual TSubclassOf<UOnlineSession> GetOnlineSessionClass() override;
#include "KronosOnlineSession.h"
#include "KronosConfig.h"
TSubclassOf<UOnlineSession> UMyGameInstance::GetOnlineSessionClass()
{
return UKronosConfig::Get()->OnlineSessionClass;
}