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

Mirror报错:TargetRPC传入空连接的原因与解决方法

解决Mirror框架中TargetRpc调用"null connection"报错问题

报错核心原因

这个报错的本质是TargetRpc必须指定有效的目标客户端连接,你的代码存在两个关键问题:

  1. 挂载脚本的对象是场景对象,场景对象的NetworkIdentity默认没有owner(connectionToClient为null)。直接调用TargetCreateSelection时,Mirror会默认使用当前NetworkBehaviour所属对象的owner.connection作为目标,自然得到null触发报错。
  2. 实例化卡牌时,NetworkServer.Spawn(card)未指定玩家作为owner,卡牌不属于任何客户端连接,后续无法通过卡牌关联有效连接。

解决办法

1. 显式指定TargetRpc的目标连接

由于CmdCreateSelection是客户端发起的命令,可通过connectionToClient获取发起请求的玩家连接,显式传递给TargetRpc:

public void CmdCreateSelection()
{
    List<GameObject> myLocalList = new();
    // 获取当前调用Cmd的客户端连接
    NetworkConnection targetConnection = connectionToClient;
    for (int i = 0; i < cardsPrefab.Count; i++)
    {
        GameObject card = Instantiate(cardsPrefab[i], holder);
        card.tag = "CreateDeck";
        card.GetComponent<CardType>().prefab = cardsPrefab[i];
        myLocalList.Add(card);
        // Spawn卡牌时指定owner为发起请求的玩家
        NetworkServer.Spawn(card, targetConnection);
        // 显式传入目标连接调用TargetRpc
        TargetCreateSelection(targetConnection, card.transform);
    }
}

// 修改TargetRpc方法,添加NetworkConnection参数
[TargetRpc] 
public void TargetCreateSelection(NetworkConnection targetConn, Transform card)
{
    card.SetParent(holder, false);
}

2. 给场景对象关联有效玩家(可选)

如果场景对象需要长期属于某个玩家,可在场景加载完成后,为其NetworkIdentity分配客户端权限:

void OnEnable()
{
    SceneManager.sceneLoaded += OnSceneLoaded;
}

void OnDisable()
{
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    if (isServer && scene.name == "你的游戏场景名称")
    {
        // 获取当前玩家(示例:从NetworkManager取本地玩家)
        PlayerController player = NetworkManager.singleton.LocalPlayer.GetComponent<PlayerController>();
        if (player != null)
        {
            GetComponent<NetworkIdentity>().AssignClientAuthority(player.GetComponent<NetworkIdentity>().connectionToClient);
        }
    }
}

此方法适合场景对象固定归属某玩家的场景,推荐优先使用第一种方法。

关键注意事项

  • TargetRpc必须明确目标连接,不能依赖无owner对象的默认连接逻辑。
  • 实例化网络对象时,尽量指定owner,确保后续网络操作能正确关联到对应客户端。

内容的提问来源于stack exchange,提问作者Oleksii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:22