Matchmaking is a critical component in every multiplayer game. At Elympics, we have developed a service that is not only straightforward to configure but also sophisticated enough to cater to all your needs.
Almost all multiplayer games need some kind of matchmaking service to group players into matches. With Elympics, you don't need to worry about it, because we've got you covered. Whenever a player wants to join your game, they must go through one of your matchmaking queues. After you create a queue via our CLI or Panel, it's ready to use with the
ElympicsLobbyClient.Instance.PlayOnlineInRegion method. Simply pass its name to the
queueName parameter, and that's it - matchmaking is already implemented in your game.
How to change or create queues?
You can use the Elympics CLI Tool to manage queues by following this chapter.
Using Web Panel
Navigate to Game Settings on your game page and create or update queues in the Matchmaking Queues section.
Every change in elympics configuration needs a few minutes to propagate within our system.
The parameters you can configure for each queue are:
Name(string): A human-friendly name for the queue, used inside Unity to decide which configuration should be applied.
MatchType: Specifies the matchmaking type such as SOLO, PAIR, GROUP, or TEAM.
NumberOfTeams(integer): Indicates the number of teams required. One player is considered a team.
PlayersInTeams(integer): Specifies the number of players in one team.
MaxWaitTime(integer): Sets the maximum waiting time for a player before matching with bots. This parameter also scales player tolerance for imbalance match-ups (see MatchmakingMode).
MatchWithBots(bool): If enabled, players waiting too long are matched with bots after MaxWaitTime seconds.
MinPlayersToMatch(integer): After MaxWaitTime, the matchmaker seeks matches that aren't full. Combined with MatchWithBots, it fills in missing players with bots.
MatchmakingMode(ACCEPT_ALL | FASTEST_MATCHING | FAST_MATCHING | BALANCED | FAIR_MATCHING | MOST_FAIR_MATCHING): Defines matchmaking behavior in terms of balancing wait times and fairness. It also affects how quickly players' tolerance for imbalance changes. ACCEPT_ALL is similar to a greedy approach, meaning that matches will be created whenever there are enough players in the queue.
Debug Mode, Debug Mode with Bots
Debug mode and
Debug mode with bots options transform any queue you join into a debug mode, applying a 'greedy' matchmaking strategy. This means a match is found as soon as there are enough players. The Debug mode with bots additionally includes bots if not included originally. These modes are useful for testing new builds without the need to switch queues.
You can set those options using our CLI:
elympics games versions update -g <your-game-id> -v <your-game-version-id> --debug-mode true --debug-mode-with-bots true
Rankings are calculated per game using both the ELO method and a more advanced approach that converges quickly to the player's actual skill level. Rankings are used for all match types and are shared across all your queues and match types. To calculate it properly, you need to valid send MatchmakerData on the end of your game.
Matchmaking Across Versions and Region
Queue that is configured in your game can be spawned multiple times with different context. Each game version will have its own copy to not mix players that joins with different game versions. The same situation will happen if you have more then one region. If this is is the true. Matchmaker will not mix players that want to play in different regions.
Machine learning based matchmaking in duel matches
For 1vs1 games (MatchType PAIR) we use Machine Learning for matchmaking, using randomized control groups to evaluate match effectiveness. The ML model uses the player's
MatchmakerData (ranking) during matchmaking to balance your game based on player skills.
This functionality requires a certain number of matches before fully leveraging machine learning.
This is an early version and this behaviour could be changed in a future release. Feel free to submit your ideas on how to improve this.
Social Matchmaker Queues offer the ability to assign players to subqueues of already defined queue.
Sample flow of matching friends:
- Player 1 chooses queue
Defaultwith a randomized suffix (i.e.:
3c2t35bMyPwDc5Lt) and uses it in their game
- Player 1 passes this information to Player 2
- Player 2 uses information about queue received from Player 1
- Player 1 and Player 2 join this queue
- Player 1 and Player 2 are matched into the same match
- Flow of joining continues as normal
queueName has to be name of a queue defined in Elympics (using Panel or CLI).
You just use
queueName:suffix instead of
Actions & events
bool success, string userId, string jwtToken, string error
PlayOnlineInRegion(string regionName, float matchmakerData = null, byte gameEngineData = null, string queueName = null, bool loadGameplaySceneOnFinished = true)
Action<(string MatchId, string TcpUdpServerAddress, string WebServerAddress, string UserSecret, List<string> MatchedPlayers)>