Posted on

Photon 2 Unassigned Reference Exception with Observed Components

This is a Debugging video for how to fix an Unassigned Reference Exception error when using an Observed Component in Unity with Photon. This is a very easy error to fix as It only takes switching one variable in the inspector. If you are receiving this error it is probably because you accidentally made one little mistake without realizing it.

To fix this error all you must do is look at all you Photon Prefabs and make sure that the Observe Option of the Photon View component is set to off or you have at least on observed component set. If the Observe option is turned on and you don’t have a component being observed then you will be receiving this error.

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.