Comment on page
Updating Room States
3 - 5 minutes read
You have used SyncPropertyAgent to update player properties. RoomPropertyAgent is similar to SyncPropertyAgent, but it is designed to updates room level properties.
Select the GameManager GameObject in the Scene Hierarchy, Click the Add Component Button and search for "GameDataManager". Select RoomPropertyAgent to Attach it to the GameManager GameObject.
Similar to SceneSpawner, a Network System ID component is attached automatically. You can have multiple RoomPropertyAgents, make sure you assign different Agent Id to them.
Click Add Game Sync Property button and name the new SyncProperty "PlayerScores". Set Type to Serializable.
For this tutorial, the player who killed opponents 3 times is the winner of the game. You can use serializable objects to store player scores.
Create a new script and call it GameDataModels.cs. Add GameData and PlayerScore Serializable Classes.
public class PlayerScores
public List<Score> scores = new List<Score>();
public class Score
public string playerRemoteId;
public int score;
GameSceneManager should have a reference to its RoomPropertyAgent component.
private void Start()
roomPropertyAgent = GetComponent<RoomPropertyAgent>();
Added a method to update player's score.
public void PlayerScored(string playerId)
// Read the current value of the "PlayerScores" SyncProperty.
PlayerScores playerScores = roomPropertyAgent.GetPropertyWithName("PlayerScores").GetValue<PlayerScores>();
// Initialize the playerScores object.
if (playerScores == null)
playerScores = new PlayerScores();
bool foundPlayerScore = false;
// If player already have a score, increase it by 1.
foreach (Score s in playerScores.scores)
if (s.playerRemoteId == playerId)
foundPlayerScore = true;
// If player has not scored yet, add a new score for the player and set its value to 1.
Score ps = new Score();
ps.playerRemoteId = playerId;
ps.score = 1;
// Modify the "PlayerScores" SyncProperty