Posted on

Unity Multiplayer – Custom Matchmaking

Learn to make a Custom Matchmaking system using the Photon Plugin

For this tutorial on how to use the Photon 2 plugin in Unity, I will be teaching you how to make a custom matchmaking system. This will allow you to connect to lobbies, create rooms, search rooms, and join rooms. This type of matchmaking system can be found in popular games such and Battlefield, PUBG, and Insurgency.

make sure you watch the first video of this series before watching this video. https://youtu.be/02P_mrszvzY

Main Menu UI in Unity

For this lesson, we will begin by showing you how to set up your UI system for your main menu scene. You will have the main menu panel which will have one button for connecting to the Photon lobby. We will then need a Lobby panel which will have two input fields for creating new rooms. We will then need two buttons, one for creating a room and one for returning to the main menu panel. This panel will also need a container to hold all the room listing objects. The last panel we will need for this scene is the room panel. This panel will need two, once for starting the game and loading the multiplayer scene and one for leaving the currently connected room. This panel will also need another container for holding all the player listing objects.

Scripting the Lobby Controller

Next up we will open our scripts need for this custom matchmaking system. For the lobby controller script, we need to enable the lobby connect button once we have connected to the master photon servers. We then need to make a public function for this lobby connect button. in this function, we will connect the player to a photon lobby using PhotonNetwork.JoinLobby(); Once our player has connected to a photon lobby the OnRoomListUpdate callback function will begin sending updates for what rooms are in the lobby. We will use this callback function to instantiate room listing object into our container object. Next, we will create public functions to pair to the different UI object we have for creating new rooms.

Scripting the Room Controller

Next, we will switch over to the room controller script. In this script, we will first use the OnJoinedRoom callback function for updating all the player listings in the container of our room panel. We will also do the same for when other players join and leave the current room. To do this we will use the OnPlayerEnteredRoom and OnPlayerLeftRoom callback functions. The last thing we need to do for this script is creating public functions, one for the start game but and the second for the leave room button. The start game function should load all the players into the multiplayer scene using PhotonNetwork.LoadLevel(); via the master client.

Scripting the Room Button

The last script that we need for this tutorial is the script attached to the room listing prefab. This room button script needs to have a public function for updating the room name and room size. This function is called in the lobby controller when the room listing is instantiated on the room container object. This script also needs to have a public function for the on click on this button object. This function should have the players then join the room of this room listing object via the room name. This is done by using PhotonNetwork.JoinRoom( roomName );

Applying Code to Unity Scene

Back in Unity, we need to attach these script to their respective objects and then initialize all the need variables in the inspector. We will then need to set the OnClick and OnValueChanged functions for any necessary UI objects. This will require you to create the room listing prefab and player listing prefab objects. Once you have done all this you should then have a working custom matchmaking system for your next multiplayer game.

Posted on

Unity Multiplayer – Delay Start

For this lesson, I will teach you how to create a delay start matchmaking system using the Photon 2 plugin in Unity. In the last video, I showed you how to create a quick start matchmaking system which is where the players can click one button that will connect them to a photon room and load them into the multiplayer scene. This is mostly used in games where the players can join an ongoing game. A delay start system is where the players can click one button which will connect them to a photon room but instead of loading the multiplayer scene it will instead load a waiting room scene. Once the minimum players have joined a timer will start and once the timer runs out all the players in the room will be loaded into the multiplayer scene at the exact same time. This is a better system for games that need to be played from beginning to ends such as Rainbow Six Siege, PUBG, and Fortnite.

Menu Scene in Unity

To get started we will first create the menu scene in Unity. This scene needs to have three buttons. one for showing before we have connected to the Photon servers, one for starting the search for a room, and the last for canceling the search. Once you have created the menu scene we will then code two scripts for this scene. One will be the lobby controller and the other will be the room controller.

Coding the Delay Start Matchmaking in C#

In the lobby controller script, we need to automatically sync the scene loading. we will need to create a function to pair to the start button. This function will first try to join an existing room. If it fails to join we will then try to create our own room. If we fail to create a room we will then just keep trying to create a room. We will also need to create a function for our cancel button. In our room controller script, we will need to load the waiting room scene when the player successfully joins a photon room.

After this save your scripts and go back to Unity. Inside Unity and the menu scene, you will need to add these script to the scene. You will then need to set the variables of these scripts and pair the public functions to the different buttons in the scene.

Waiting Room Scene in Unity

The next thing we need to do is create the waiting room scene. This scene needs to have a cancel button, a player count text display, and a timer text display. Once you have created this scene we will then need to create one script for this scene which will be our waiting room controller.

Coding the Countdown and Waiting Room

In this script, we will first update the displays for the player count and the timer. We will then need to update the displays whenever a new player joins the room or when a player leaves the room. We will then need to count down the timer in the update function if there are enough players in the scene. if the timer gets down to zero then we will load the master client into the multiplayer scene which because of automatically syncing the scenes will in turn load all the other players into the same scene.

Once you have all this you can then save all your scripts and go back to Unity. Inside Unity, you need to add this script to your waiting room scene. You will then want to set the variables in the inspector and pair the function to the cancel button.

After this, the last thing you need to have is your multiplayer scene which we created in our quick start tutorial. If you followed along with this tutorial you should now have a working delay start matchmaking system for your multiplayer games.

Posted on

Unity Multiplayer – Quick Start

This is the second lesson in this Unity multiplayer tutorial series. In this lesson, we will teach you how to make a quick start matchmaking system. This will allow the player to click one single button which will then load them into a multiplayer match.

Unity UI setup for Quick Start

In this tutorial, we will begin by creating the UI for our quick start matchmaking. For this UI in Unity, we will need three UI buttons. One of the buttons we will disable the interactable option of the button, this will be for before we connect to the Photon servers. The second button will be our join or quick-start button and the third button will be a cancel button. We will need to hide these last two buttons in the hierarchy. Once we create these button we will need to create a new script which will be for this quick start mechanic.

Coding Quick Start Matchmaking in C#

In this new C# script, we will need to first create a callback function for when our play first connects to the Photon servers. in this callback function, we want to enable the quick-start button. We will then need to create a public function that we can pair to the On Click of the quick-start button. In this function, we need to make it so that the players first try to join an existing game but if no game is available then we will try to create a new game. When we successfully join or create a new room we will then load the players into the game scene and instantiate a player object in the scene for each player. We then need to create another public function, that will be for the cancel button.

Working in Unity

Once you have this script created, we will then go back to Unity. In Unity, we will need to create an empty game object to attach this script to. We will then need to set the value of our variables and you will need to set the on click functions of the various buttons. Next, you will need to create a player prefab object. Finally, we will need to create a new scene to be our multiplayer game scene.

Testing your Project

If you followed along with this tutorial you should then have a working quick start matchmaking system for your game. When you test your project you will know the quick start is working when you see two instances of your game load into the multiplayer scene and in the hierarchy, you can see two different player prefabs with each being owned by a different user.

Unlock Code and Member Content