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

首次连接Photon大厅无法查询好友在线状态问题排查

Photon好友在线状态查询首次连接失效,赛后恢复的问题排查与修复

核心原因

问题根源是身份认证(UserId)设置时机错误。Photon的好友系统依赖UserId在连接Master服务器的阶段完成身份绑定,你当前在OnJoinedLobby方法里才设置PhotonNetwork.AuthValues.UserId,这时候已经错过了身份注册的关键时机——Master服务器无法将你的连接实例与UserId关联,导致好友系统无法识别你的在线状态,也无法查询到其他好友的状态。

而完成一局比赛返回主场景后,Photon内部可能保留了之前的身份缓存,或者重新连接时流程更符合规范,因此功能恢复正常。

代码问题点拆解

  1. Start方法连接逻辑混乱

    • 先调用异步的PhotonNetwork.Disconnect(),紧接着判断!PhotonNetwork.IsConnected并不准确,因为Disconnect操作还未完成,会导致后续连接逻辑执行异常。
    • 第二个判断条件else if (!PhotonNetwork.InLobby && !PhotonNetwork.IsConnected)逻辑矛盾:未连接到服务器时,根本无法执行JoinLobby操作。
  2. AuthValues设置时机过晚

    • PhotonNetwork.AuthValues必须在调用ConnectUsingSettings()之前设置,才能让Master服务器在连接阶段完成身份认证。你当前在进入大厅后才设置,身份信息无法被正确注册,直接导致好友系统失效。

修复后的代码示例

void Awake()
{
    Instance = this;
}

void Start()
{
    // 提前设置身份认证信息,必须在连接前完成
    PhotonNetwork.AuthValues = new AuthenticationValues();
    PhotonNetwork.AuthValues.UserId = PlayerData.userName;

    if (!PhotonNetwork.IsConnected)
    {
        Debug.Log("Connecting to Master");
        PhotonNetwork.ConnectUsingSettings();
        PhotonNetwork.AutomaticallySyncScene = true;
    }
    else if (PhotonNetwork.IsConnected && !PhotonNetwork.InLobby)
    {
        PhotonNetwork.JoinLobby();
    }

    if (RoomManager.Instance == null)
    {
        Instantiate(roomManager);
    }
}

public override void OnConnectedToMaster()
{
    Debug.Log("Connected to Master");
    PhotonNetwork.JoinLobby();
}

public override void OnJoinedLobby()
{
    Debug.Log("The Server used is : "+PhotonNetwork.Server);
    MenuManager.Instance.OpenMenu("title");
    Debug.Log("Joined Lobby");
}

// 好友查询相关代码保持不变
public void InviteFriend()
{
    PhotonNetwork.FindFriends(new string[] { "Hammas"});
}

public override void OnFriendListUpdate(List<FriendInfo> friendsInfo)
{
    for (int i = 0; i < friendsInfo.Count; i++)
    {
        FriendInfo friend = friendsInfo[i];
        Debug.LogFormat("{0}", friend);
    }
}

额外注意事项

  • 移除Start方法里不必要的PhotonNetwork.Disconnect()调用,避免打乱初始化流程;若确实需要重置连接,需等待OnDisconnected回调触发后再执行连接操作。
  • 确保PlayerData.userName在设置AuthValues时已经有有效非空值,空字符串会导致身份认证失败。
  • 好友系统功能正常依赖Photon服务器端配置,但你赛后能正常使用,说明服务器配置无问题,只需修正客户端连接流程即可。

内容的提问来源于stack exchange,提问作者Kashif Sattar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:25:35