Unity中使用Photon Pun 2无法加入自定义属性房间的问题
问题解决:Photon JoinRandomRoom无法匹配同模式房间
你的代码逻辑方向是对的,但出现No match found的原因通常和以下几点有关,对应解决方案如下:
1. 修正JoinRandomRoom的maxPlayers参数
你当前调用JoinRandomRoom时第二个参数传了10,这个参数的作用是只寻找最大玩家数≤该值的房间,但如果Photon的匹配逻辑因为这个参数限制导致过滤掉了符合条件的房间,建议直接传0来忽略最大玩家数限制,只按自定义属性筛选:
public void JoinOrCreateRandomRoom() { // 传0忽略maxPlayers限制,仅匹配Mode属性 PhotonNetwork.JoinRandomRoom(new Hashtable { { "Mode", gameMode } }, 0); }
2. 确保gameMode字符串完全匹配
Photon的自定义属性字符串匹配是大小写敏感的,比如"TeamDeathmatch"和"teamdeathmatch"会被判定为不同值。检查你的gameMode变量值,确保和已创建房间的Mode属性完全一致(包括大小写、空格、特殊字符)。
3. 验证房间属性的同步
创建房间后,确认Mode属性被正确设置并同步到大厅:
- 在创建房间的代码后添加日志,验证属性:
PhotonNetwork.CreateRoom(roomName, roomOptions, null); Debug.Log($"创建房间:{roomName},模式:{PhotonNetwork.CurrentRoom.CustomProperties["Mode"]}"); - 调用JoinRandomRoom前,打印大厅内的所有房间信息,排查是否存在符合条件的房间:
public void JoinOrCreateRandomRoom() { // 打印当前大厅所有房间信息 foreach (var room in PhotonNetwork.GetRoomList()) { var mode = room.CustomProperties.ContainsKey("Mode") ? room.CustomProperties["Mode"].ToString() : "无模式属性"; Debug.Log($"房间名:{room.Name},模式:{mode},当前人数:{room.PlayerCount}/{room.MaxPlayers}"); } PhotonNetwork.JoinRandomRoom(new Hashtable { { "Mode", gameMode } }, 0); }
4. 确认CustomRoomPropertiesForLobby设置正确
你的代码里已经将"Mode"加入CustomRoomPropertiesForLobby,这一步是必须的——只有加入这个数组的属性才会被同步到大厅,客户端才能用它来筛选房间。如果后续有修改房间属性的逻辑,也要确保Mode属性不会被移除出这个列表。
内容的提问来源于stack exchange,提问作者Emil Coder
相关产品推荐
相关产品推荐

