Unity Mirror联网开发玩家无法正常生成问题排查
Mirror联网框架玩家无法生成问题修复方案
核心问题点
- 重写服务端就绪回调时方法名拼写错误,未正确覆盖基类虚方法
- 新版Mirror API调整后,客户端连接后未手动标记就绪状态,导致服务端无法收到就绪回调
- 部分重写方法的签名、修饰符错误,未被框架正确识别
分步修复
修正
OnServerReady方法拼写错误
当前代码里的方法名OnSeverReady为笔误(将Server错写为Sever,漏写字母r),该方法没有重写基类NetworkManager的对应虚方法,框架回调时不会执行自定义的事件触发逻辑。修正后代码如下:public override void OnServerReady(NetworkConnectionToClient conn) { base.OnServerReady(conn); OnServerReadied?.Invoke(conn); }补全客户端连接后的就绪标记逻辑
新版Mirror的无参OnClientConnect回调不会自动将客户端标记为就绪状态,需要手动调用Ready方法,否则服务端永远不会收到客户端的就绪请求,自然不会触发后续生成逻辑。修正客户端连接回调代码:public override void OnClientConnect() { base.OnClientConnect(); // 手动标记客户端就绪,触发服务端OnServerReady回调 NetworkClient.Ready(); OnClientConnected?.Invoke(); }注意:如果NetworkManager组件勾选了Auto Create Player选项请取消勾选,避免默认生成逻辑和自定义的
PlayerSpawnSystem冲突。修正断开连接回调的签名与修饰符
当前写的public virtual void OnServerDisconnect()存在两个错误:一是用virtual修饰而非override,无法覆盖基类方法;二是缺少服务端断开回调所需的NetworkConnectionToClient参数。修正为匹配新版API的形式:// 服务端监听客户端断开回调 public override void OnServerDisconnect(NetworkConnectionToClient conn) { base.OnServerDisconnect(conn); // 可在此补充玩家下线后的生成点索引回收逻辑 OnClientDisconnected?.Invoke(); } // 客户端自身断开连接回调 public override void OnClientDisconnect() { base.OnClientDisconnect(); OnClientDisconnected?.Invoke(); }
验证方法
完成以上修改后启动服务端、连接客户端,服务端会正常进入OnServerReady回调,触发OnServerReadied事件调用SpawnPlayer方法,玩家即可在预设生成点正常生成,之前的CS0672、CS0618过时警告也会完全消除。
内容的提问来源于stack exchange,提问作者Leanne
相关产品推荐
相关产品推荐

