You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:24:26