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

Unity+Photon空引用异常求助:双开游戏时玩家对象引用丢失

针对Photon双实例NullReferenceException的修复方案

1. 检查玩家预制体的引用与配置

  • 打开挂载Photon逻辑的脚本检视面板,确认**玩家预制体(Player Prefab)**的引用没有为空,拖入的预制体必须是正确的资源。
  • 确保预制体上已添加并启用PhotonView组件——Photon依赖这个组件同步网络对象,没有它会导致实例化失败返回null。
  • 如果用PhotonNetwork.Instantiate创建玩家,要核对传入的预制体路径(比如"Assets/Prefabs/Player.prefab")是否完全正确,路径错误会直接导致实例化失败。

2. 规范OnJoinedRoom的执行逻辑

  • 只有本地玩家成功连入房间后,才应该执行玩家实例化,代码里要加状态判断避免提前执行:
    public override void OnJoinedRoom()
    {
        // 确认网络连接正常且本地玩家对象存在
        if (PhotonNetwork.IsConnectedAndReady && PhotonNetwork.LocalPlayer != null)
        {
            // 用Photon的实例化方法,不要用普通Instantiate
            GameObject player = PhotonNetwork.Instantiate(
                "PlayerPrefab", 
                spawnPoint.transform.position, 
                spawnPoint.transform.rotation
            );
        }
    }
    

3. 排查第二个实例的网络连接问题

  • 第二个实例无法匹配,先看Console里的Photon日志:有没有成功连接Master Server?有没有找到目标房间?
  • 确认两个实例用的是同一个Photon App ID,且网络区域(比如Asia、Europe)一致。如果是手动创建房间,要确保房间是公开状态且未达人数上限。

4. 避免组件引用的空指针

  • 实例化玩家后,如果要访问它身上的组件(比如PlayerController、CameraFollow),必须先判断组件是否存在:
    PlayerController playerCtrl = player.GetComponent<PlayerController>();
    if (playerCtrl != null)
    {
        playerCtrl.SetAsLocalPlayer();
    }
    else
    {
        Debug.LogError("玩家预制体缺少PlayerController组件!");
    }
    

5. 检查Photon全局配置

  • 打开Edit > Project Settings > Photon Unity Networking,确认Auto-Join Lobby、Auto-Create Room等选项符合你的需求。如果是手动匹配,要确保第二个实例能正确搜索到已创建的房间。

内容的提问来源于stack exchange,提问作者Mert Batuhan ÜNVERDİ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:17