Unity 2022.3.14F1中重写OnServerConnect方法适配错误求助
解决Mirror最新版中NetworkManager重写方法的签名错误
错误根源
你碰到的问题是最新版Mirror对NetworkManager的回调方法签名做了更新,旧教程里的NetworkConnection参数已被替换为NetworkConnectionToClient,沿用旧签名会导致无法正确覆盖父类方法。
具体修正方案
1. 修复OnServerConnect方法
确保重写方法的参数为NetworkConnectionToClient,如果不需要自定义逻辑,保留空实现即可,但必须调用父类方法保证Mirror内部逻辑正常执行:
public override void OnServerConnect(NetworkConnectionToClient conn) { base.OnServerConnect(conn); }
2. 修复OnServerAddPlayer方法
你的OnServerAddPlayer同样使用了旧参数类型,需要同步修改为NetworkConnectionToClient,同时修正变量名拼写错误(GamePLayerInstance改为GamePlayerInstance):
public override void OnServerAddPlayer(NetworkConnectionToClient conn) { if (SceneManager.GetActiveScene().name == "Lobby") { PlayerObjectController GamePlayerInstance = Instantiate(GamePlayerPrefab); GamePlayerInstance.ConnectionID = conn.connectionId; GamePlayerInstance.PlayerIdNumer = GamePlayers.Count + 1; GamePlayerInstance.PlayerSteamID = (ulong)SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)SteamLobby.Instance.CurrentLobbyID, GamePlayers.Count); NetworkServer.AddPlayerForConnection(conn, GamePlayerInstance.gameObject); GamePlayers.Add(GamePlayerInstance); } }
修改后的完整代码
using Mirror; using UnityEngine.SceneManagement; using System.Collections.Generic; public class CustomNetworkManager : NetworkManager { [SerializeField] private PlayerObjectController GamePlayerPrefab; public List<PlayerObjectController> GamePlayers { get; } = new List<PlayerObjectController>(); public override void OnServerConnect(NetworkConnectionToClient conn) { base.OnServerConnect(conn); } public override void OnServerAddPlayer(NetworkConnectionToClient conn) { if (SceneManager.GetActiveScene().name == "Lobby") { PlayerObjectController GamePlayerInstance = Instantiate(GamePlayerPrefab); GamePlayerInstance.ConnectionID = conn.connectionId; GamePlayerInstance.PlayerIdNumer = GamePlayers.Count + 1; GamePlayerInstance.PlayerSteamID = (ulong)SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)SteamLobby.Instance.CurrentLobbyID, GamePlayers.Count); NetworkServer.AddPlayerForConnection(conn, GamePlayerInstance.gameObject); GamePlayers.Add(GamePlayerInstance); } } }
额外提示
- 确保脚本顶部引用了
using Mirror;,否则无法识别NetworkConnectionToClient类型 - 不要省略
base.OnServerConnect(conn),Mirror依赖这个调用完成内部连接初始化逻辑
内容的提问来源于stack exchange,提问作者shad0ww
相关产品推荐
相关产品推荐

