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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:49:04