首次连接Photon大厅无法查询好友在线状态问题排查
Photon好友在线状态查询首次连接失效,赛后恢复的问题排查与修复
核心原因
问题根源是身份认证(UserId)设置时机错误。Photon的好友系统依赖UserId在连接Master服务器的阶段完成身份绑定,你当前在OnJoinedLobby方法里才设置PhotonNetwork.AuthValues.UserId,这时候已经错过了身份注册的关键时机——Master服务器无法将你的连接实例与UserId关联,导致好友系统无法识别你的在线状态,也无法查询到其他好友的状态。
而完成一局比赛返回主场景后,Photon内部可能保留了之前的身份缓存,或者重新连接时流程更符合规范,因此功能恢复正常。
代码问题点拆解
Start方法连接逻辑混乱
- 先调用异步的
PhotonNetwork.Disconnect(),紧接着判断!PhotonNetwork.IsConnected并不准确,因为Disconnect操作还未完成,会导致后续连接逻辑执行异常。 - 第二个判断条件
else if (!PhotonNetwork.InLobby && !PhotonNetwork.IsConnected)逻辑矛盾:未连接到服务器时,根本无法执行JoinLobby操作。
- 先调用异步的
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
相关产品推荐
相关产品推荐

