Unity点击Play时反复触发NullReferenceException错误的排查求助
解决Unity中Photon的NullReferenceException错误
咱们先从报错信息和你的代码入手,定位这个空引用问题的根源——这个错误大概率出在未实例化的对象访问或者Photon房间状态未就绪这两个方向上,下面给你一步步拆解解决方案:
1. 核心问题:PhotonNetwork.CurrentRoom为空时被调用
你点击Play按钮后,游戏可能还没完成Photon的连接、房间进入流程,Update函数就已经开始执行了。这时候PhotonNetwork.CurrentRoom还是null,直接访问它的MaxPlayers属性必然会抛出空引用错误。
修复代码:
在访问Photon房间相关属性前,先做非空判断,同时限制只有进入房间后才执行人数更新逻辑:
public int playerCount; int roomSize; private void Update() { // 先判断是否已成功进入房间,避免访问空的CurrentRoom if (PhotonNetwork.InRoom) { // 房间内至少2名玩家 且 当前是主机玩家 if (PhotonNetwork.IsMasterClient && PhotonNetwork.CurrentRoom.PlayerCount >= 2) { playButton.SetActive(true); } else { playButton.SetActive(false); } PlayerCountUpdate(); } else { // 不在房间时隐藏按钮,同时避免playButton空引用 if(playButton != null) playButton.SetActive(false); } } public void PlayerCountUpdate() { // 双重保险:确保CurrentRoom不为空再访问属性 if(PhotonNetwork.CurrentRoom == null) return; roomSize = PhotonNetwork.CurrentRoom.MaxPlayers; playerCount = PhotonNetwork.PlayerList.Length; // 同样要确保文本组件不为空 if(roomCountDisplay != null) { roomCountDisplay.text = playerCount + " / " + roomSize; } }
2. 再次检查UI组件赋值
虽然你说已经检查了Inspector的公共变量,但请再仔细确认这两个组件:
playButton:这个Button组件是否确实拖到了LobbyManager脚本的对应字段中?roomCountDisplay:显示人数的Text/TextMeshPro组件有没有遗漏赋值?这类UI组件很容易在场景调整后被误删或未关联,是空引用的高发区。
3. 优化roomSize的初始化时机
你之前尝试把roomSize的赋值移到Start函数,但如果Start执行时还没进入房间,PhotonNetwork.CurrentRoom依旧是空的。建议改用Photon的回调函数,在成功进入房间后再初始化:
public override void OnJoinedRoom() { base.OnJoinedRoom(); // 只有进入房间后才获取房间最大人数 roomSize = PhotonNetwork.CurrentRoom.MaxPlayers; }
这样能保证roomSize的赋值时机绝对安全,不会因为房间未就绪导致空引用。
内容的提问来源于stack exchange,提问作者Shem Tom
相关产品推荐
相关产品推荐

