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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:35:17