unity3d 房间的自定义属性不会更新|光子PUN2|团结

t5zmwmid  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个系统,玩家可以创建一个房间,然后其他玩家可以加入这个房间。在任何时候,主客户端可以为房间中的每个人更改场景,他们可以开始玩,但其他玩家仍然可以加入房间,并立即同步他们的场景。
然而,我想向选择房间的玩家展示这个房间里的游戏是否已经开始。我决定通过使用房间的自定义属性来保存一个整数,这个整数可以是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");
}

知道为什么吗

wh6knrhe

wh6knrhe1#

我通过在创建房间之前添加自定义属性来解决我的问题。之后,在我的开始游戏方法中,我将属性的值从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");
}
x8diyxa7

x8diyxa72#

您正在创建一个空哈希表,因此它不包含键“inGame”。您需要在使用roomProps["inGame"] = 0访问它之前先添加它;
你可以像这样添加键:

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

roomProps.Add("inGame", 0);

相关问题