Unity Photon VR游戏:如何检测玩家是否已连接至大厅?
检测Photon大厅连接状态以控制VR Rig显示
你需要利用Photon提供的API判断玩家是否已连接至大厅,且由于连接是异步操作,仅在Start()里判断一次可能不准确,推荐结合以下两种方式实现需求:
方法1:使用Photon回调事件(推荐)
Photon提供了一系列回调方法,会在玩家成功加入大厅或断开连接时自动触发,无需每帧检测,性能更优:
using UnityEngine; using Photon.Pun; using Photon.Realtime; public class LobbyConnectionChecker : MonoBehaviourPunCallbacks { public GameObject OfflineRig; void Start() { // 初始化时根据当前状态设置Rig UpdateRigState(PhotonNetwork.InLobby); } // 成功加入大厅时触发 public override void OnJoinedLobby() { UpdateRigState(true); } // 断开与Photon服务器连接时触发 public override void OnDisconnected(DisconnectCause cause) { UpdateRigState(false); } // 更新Rig激活状态的工具方法 private void UpdateRigState(bool isInLobby) { if (OfflineRig != null) { OfflineRig.SetActive(!isInLobby); } } }
方法2:帧检测(简单直接)
如果只需每帧检查当前是否在大厅中,可在Update()里判断:
using UnityEngine; using Photon.Pun; public class LobbyConnectionChecker : MonoBehaviour { public GameObject OfflineRig; void Update() { bool isInLobby = PhotonNetwork.InLobby && PhotonNetwork.IsConnected; if (OfflineRig != null) { OfflineRig.SetActive(!isInLobby); } } }
关键API说明
PhotonNetwork.InLobby:判断当前玩家是否已加入Photon大厅PhotonNetwork.IsConnected:判断当前是否与Photon服务器保持连接(结合InLobby可避免异常状态)- 继承
MonoBehaviourPunCallbacks才能使用Photon的回调方法,需确保脚本所在物体已添加PhotonView组件(若无同步需求,可禁用其同步功能)
内容的提问来源于stack exchange,提问作者Liam Shumaker
相关产品推荐
相关产品推荐

