房间的自定义属性未更新 |光子 PUN2 |统一

Room's custom properties don't get updated | Photon PUN2 | Unity

我有一个系统,玩家可以创建一个房间,然后其他玩家可以加入那个房间。主客户端可以随时为房间中的每个人更改场景,他们可以开始玩,但其他玩家仍然可以加入房间并立即同步他们的场景。
但是,我想向选择房间加入的玩家展示该房间的游戏是否已经开始。我决定通过使用房间的自定义属性来保存一个整数来做到这一点,该整数可以是 0(玩家仍在等待)或 1(玩家正在游戏中)。我在房间已创建的主客户端上获得回调后设置了自定义属性,但是在我使用 SetCustomProperties 后自定义属性没有改变。

    public override void OnCreatedRoom()
{
    base.OnCreatedRoom();
    ExitGames.Client.Photon.Hashtable roomProps = new ExitGames.Client.Photon.Hashtable();
    roomProps["inGame"] = 0;
    PhotonNetwork.CurrentRoom.SetCustomProperties(roomProps);
}

    public void StartLobbyGame() {
    ExitGames.Client.Photon.Hashtable roomProps = new ExitGames.Client.Photon.Hashtable();
    roomProps["inGame"] = 1;
    PhotonNetwork.CurrentRoom.SetCustomProperties(roomProps);
    PhotonNetwork.LoadLevel("InGame");
}

知道这是为什么吗?

您正在创建一个空哈希表,因此它不包含键“inGame”。 您需要先添加它,然后再使用 roomProps["inGame"] = 0;

访问它

您可以像这样添加键:

ExitGames.Client.Photon.Hashtable roomProps = new ExitGames.Client.Photon.Hashtable() {{"inGame", 0} };

roomProps.Add("游戏中", 0);

我通过在使用这些选项创建房间之前将自定义 属性 添加到房间选项来解决我的问题。之后,在我的开始游戏方法中,我将 属性 的值从 0 更改为 1。

 public void CreateRoom(string name)
{
    RoomOptions ropts = new RoomOptions() { IsOpen = true, IsVisible = true, MaxPlayers = 8 };
    ExitGames.Client.Photon.Hashtable roomProps = new ExitGames.Client.Photon.Hashtable();
    roomProps.Add("inGame", 0);
    ropts.CustomRoomProperties = roomProps;
    PhotonNetwork.CreateRoom(name, ropts);
}


    public void StartLobbyGame() {
    PhotonNetwork.CurrentRoom.CustomProperties["inGame"] = 1;
    PhotonNetwork.LoadLevel("InGame");
}