Unity使用Photon Engine开发多人游戏出现命名空间报错求助
问题排查
语法与API使用错误
- 命名空间引用错误:PUN 2 的正确命名空间是
Photon.Pun和Photon.Realtime,不是你写的UnityEngine.Pun、UnityEngine.Realtime - 基类拼写错误:正确类名是
MonoBehaviourPunCallbacks,你写的MonoBehaviourPunCallBacks存在大小写和拼写错误 - 回调方法名错误:加入房间成功的回调是
OnJoinedRoom,不是你写的OnJoinRoom
逻辑错误
- 你把
PhotonNetwork.JoinRandomRoom()写在了Update方法里,会每帧执行一次请求,还没等前一次请求返回结果就重复发起调用,必然触发服务端限流和接口报错 - 你没有判断Photon的连接状态,刚调用
ConnectUsingSettings还没完成和服务器的连接就发起加入房间的请求,会直接失败 - 没有给
RoomOptions设置MaxPlayers参数,创建房间时会出现参数缺失错误 - 你没有绑定Play按钮的点击事件,当前代码的逻辑是启动后自动尝试加入房间,不符合常规的输入昵称后点击按钮进入的流程
修正后的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; using UnityEngine.UI; public class Manager : MonoBehaviourPunCallbacks { public InputField playername; public Button playbutton; void Start() { playbutton.interactable = false; PhotonNetwork.ConnectUsingSettings(); PhotonNetwork.AutomaticallySyncScene = true; // 绑定按钮点击事件 playbutton.onClick.AddListener(OnClickPlayButton); } // 连接到Photon服务器成功的回调 public override void OnConnectedToMaster() { playbutton.interactable = true; } void OnClickPlayButton() { if(string.IsNullOrEmpty(playername.text)) return; PhotonNetwork.NickName = playername.text; PhotonNetwork.JoinRandomRoom(); playbutton.interactable = false; } public override void OnJoinRandomFailed(short returnCode, string message) { RoomOptions roomOps = new RoomOptions(); roomOps.IsVisible = true; roomOps.IsOpen = true; roomOps.MaxPlayers = 20; // 可按需求调整房间最大人数 string roomName = "Room" + Random.Range(0, 1000); PhotonNetwork.CreateRoom(roomName, roomOps); } public override void OnJoinedRoom() { PhotonNetwork.LoadLevel(1); } }
额外检查项
- 检查你的PhotonServerSettings里的AppID是否正确填写,区域设置和你Photon账号里的配置一致
- 检查Build Settings里是否已经添加了索引为1的目标场景
- 检查PUN 2包是否已经通过Package Manager正确导入到项目中
内容的提问来源于stack exchange,提问作者Fabboy
相关产品推荐
相关产品推荐

