Bird
Raised Fist0
Unityframework~20 mins

Lobby and matchmaking basics in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Lobby and Matchmaking Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this lobby player count code?

Consider this Unity C# code snippet that manages a lobby's player count. What will be printed to the console?

Unity
using UnityEngine;
using System.Collections.Generic;

public class LobbyManager : MonoBehaviour {
    private List<string> players = new List<string>();

    void Start() {
        players.Add("Alice");
        players.Add("Bob");
        players.Remove("Alice");
        Debug.Log($"Players in lobby: {players.Count}");
    }
}
APlayers in lobby: 1
BPlayers in lobby: 2
CPlayers in lobby: 0
DPlayers in lobby: 3
Attempts:
2 left
💡 Hint

Think about how many players are added and removed before the count is printed.

🧠 Conceptual
intermediate
1:30remaining
Which statement best describes matchmaking in Unity?

Matchmaking helps players find games to join. Which option correctly describes its main purpose?

AIt matches players based on criteria like skill or region to create balanced games.
BIt connects players to random game servers without any filtering.
CIt only allows players to join games created by their friends.
DIt automatically creates new game servers for every player joining.
Attempts:
2 left
💡 Hint

Think about why matchmaking is important for player experience.

🔧 Debug
advanced
2:30remaining
Why does this lobby join code cause a runtime error?

Look at this code snippet that tries to join a lobby. What causes the runtime error?

Unity
using UnityEngine;

public class LobbyJoiner : MonoBehaviour {
    string lobbyId = null;

    void JoinLobby() {
        Debug.Log($"Joining lobby {lobbyId.ToUpper()}");
    }

    void Start() {
        JoinLobby();
    }
}
AThe lobbyId variable is not initialized with a valid lobby name.
BThe method JoinLobby is private and cannot be called from Start.
CDebug.Log cannot use string interpolation in Unity.
DlobbyId is null, so calling ToUpper() causes a NullReferenceException.
Attempts:
2 left
💡 Hint

Check what happens when you call a method on a null string.

📝 Syntax
advanced
1:30remaining
Which option correctly declares a lobby dictionary with player counts?

You want to create a dictionary in C# that maps lobby names (strings) to player counts (integers). Which declaration is correct?

ADictionary lobbies = new Dictionary<string, int>();
BDictionary<string, int> lobbies = new Dictionary<string, int>();
CDictionary<string> lobbies = new Dictionary<string>();
DDictionary<int, string> lobbies = new Dictionary<int, string>();
Attempts:
2 left
💡 Hint

Remember the syntax for generic dictionaries in C#.

🚀 Application
expert
3:00remaining
What is the final player count after this matchmaking simulation?

Given this code simulating players joining and leaving a lobby, what is the final count printed?

Unity
using System.Collections.Generic;
using UnityEngine;

public class MatchmakingSim : MonoBehaviour {
    List<string> players = new List<string>();

    void Simulate() {
        players.Add("Anna");
        players.Add("Ben");
        players.Add("Cara");
        players.RemoveAt(1);
        players.Add("Dan");
        players.Remove("Anna");
        Debug.Log($"Final players: {players.Count}");
    }

    void Start() {
        Simulate();
    }
}
AFinal players: 4
BFinal players: 1
CFinal players: 2
DFinal players: 3
Attempts:
2 left
💡 Hint

Track each add and remove step carefully.

Practice

(1/5)
1. What is the main purpose of a lobby in Unity multiplayer games?
easy
A. To let players wait and prepare before the game starts
B. To automatically find and connect players
C. To render 3D graphics for the game
D. To save player progress locally

Solution

  1. Step 1: Understand the role of a lobby

    A lobby is a waiting area where players gather before the game begins.
  2. Step 2: Differentiate from matchmaking

    Matchmaking is the process of finding and connecting players automatically, not the lobby itself.
  3. Final Answer:

    To let players wait and prepare before the game starts -> Option A
  4. Quick Check:

    Lobby = waiting area before game [OK]
Hint: Lobbies are for waiting; matchmaking is for finding players [OK]
Common Mistakes:
  • Confusing lobby with matchmaking
  • Thinking lobby handles graphics
  • Assuming lobby saves progress
2. Which of the following is the correct way to override a lobby method in Unity C#?
easy
A. public override void OnPlayerJoined() {}
B. override public void OnPlayerJoined() {}
C. public void OnPlayerJoined() override {}
D. void override OnPlayerJoined() {}

Solution

  1. Step 1: Recall C# override syntax

    In C#, the correct syntax places 'override' before the return type.
  2. Step 2: Check each option

    public override void OnPlayerJoined() {} uses 'public override void MethodName()' which is correct syntax.
  3. Final Answer:

    public override void OnPlayerJoined() {} -> Option A
  4. Quick Check:

    Override keyword before return type [OK]
Hint: In C#, 'override' comes before the return type [OK]
Common Mistakes:
  • Placing override after method name
  • Omitting override keyword
  • Wrong order of keywords
3. Given this code snippet in a Unity lobby script:
public override void OnPlayerJoined(Player player) {
    Debug.Log($"Player {player.Name} joined.");
    if (Players.Count >= 4) {
        StartGame();
    }
}

What happens when the 4th player joins?
medium
A. The lobby closes without starting the game
B. Nothing happens until manually started
C. The game starts automatically
D. An error occurs because Players.Count is undefined

Solution

  1. Step 1: Analyze the OnPlayerJoined method

    When a player joins, it logs their name and checks if Players.Count is 4 or more.
  2. Step 2: Understand the condition

    If Players.Count is 4 or more, StartGame() is called, starting the game automatically.
  3. Final Answer:

    The game starts automatically -> Option C
  4. Quick Check:

    Players.Count >= 4 triggers StartGame() [OK]
Hint: Check conditions that trigger StartGame() call [OK]
Common Mistakes:
  • Assuming manual start needed
  • Thinking Players.Count is undefined
  • Confusing lobby closing with game start
4. Identify the error in this matchmaking code snippet:
public void Matchmake() {
    var match = Matchmaker.CreateMatch();
    match.OnPlayerJoined += OnPlayerJoined;
    match.Start();
}

void OnPlayerJoined(Player player) {
    Debug.Log("Player joined: " + player.Name);
}
medium
A. Start() method does not exist on match object
B. Event subscription syntax is incorrect
C. OnPlayerJoined method must be public to subscribe
D. Matchmaker.CreateMatch() might return null and is not checked

Solution

  1. Step 1: Review event subscription

    The syntax 'match.OnPlayerJoined += OnPlayerJoined;' is correct for subscribing to events.
  2. Step 2: Check for null safety

    Matchmaker.CreateMatch() might return null if no match is found, but code does not check for null before using match.
  3. Final Answer:

    Matchmaker.CreateMatch() might return null and is not checked -> Option D
  4. Quick Check:

    Always check for null after CreateMatch() [OK]
Hint: Always check if CreateMatch() returns null before use [OK]
Common Mistakes:
  • Assuming event subscription syntax is wrong
  • Ignoring null checks
  • Assuming Start() method is missing
5. You want to create a lobby that only starts the game when all players are ready. Which approach is best in Unity matchmaking?
hard
A. Call StartGame() immediately when the first player joins
B. Override OnPlayerJoined to check a 'ready' flag on each player before calling StartGame()
C. Use a timer to start the game after 30 seconds regardless of players
D. Disable matchmaking and start game manually from UI

Solution

  1. Step 1: Understand the requirement

    The game should start only when all players are ready, not just when they join.
  2. Step 2: Choose the best method

    Overriding OnPlayerJoined to check each player's 'ready' status before starting the game ensures all are prepared.
  3. Final Answer:

    Override OnPlayerJoined to check a 'ready' flag on each player before calling StartGame() -> Option B
  4. Quick Check:

    Check readiness before starting game [OK]
Hint: Check all players' ready flags before starting game [OK]
Common Mistakes:
  • Starting game too early
  • Ignoring player readiness
  • Disabling matchmaking unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard