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İ
相关产品推荐
相关产品推荐

