ClientRpc (Unity Mirror) 缺少一些重要的东西

问题描述

我遇到了 ClientRpc 从未被调用任何客户端对象的问题。我已经在互联网上玩了几个小时,但我找不到任何关于为什么我的实现不起作用的线索。 我正在遵循这样的事件顺序:

  1. 在大厅中添加玩家
  2. 切换场景到游戏场景
  3. 在服务器上生成随机图块
  4. 使用 Rpc 将图块数据发送给客户端进行渲染

然而,渲染函数永远不会被调用

NetworkManager.cs

public override void OnServerReady(NetworkConnection conn)
{
    base.OnServerReady(conn);
    //Make sure they're all ready
    for (int i = RoomPlayers.Count - 1; i >= 0; i--)
    {
        if (!RoomPlayers[i].IsReady)
        {
            return;
        }
    }
    //PrevIoUsly add SpawnTiles to OnServerReadied
    OnServerReadied?.Invoke(conn);
}

GameManager.cs

private void SpawnTiles(NetworkConnection conn)
{
    //Generate rawTiles beforehand
    Debug.Log(conn.isReady);
    Debug.Log("Entered spawn tiles");
    RpcSpawnTiles(rawTiles);
}

[ClientRpc]
public void RpcSpawnTiles(short[] rawTiles)
{
    Debug.Log("Client spawning tiles");
}

这是我在主机上运行时的输出

True
Entered spawn tiles

它似乎永远不会进入 Rpc 功能:( 有什么特别明显的东西我错过了吗?我的 GameManager 确实附加了一个 NetworkID

解决方法

似乎有很多事情我必须做才能让它工作 - 我不完全确定哪一个工作,但如果你遇到这些问题,这些是我必须检查的一些事情-

  1. 只是基本代码。确保在客户端、主机或服务器上创建了适当的内容
  2. 确保没有任何竞争条件,尤其是在处理不断变化的场景时。您可以从 OnClientSceneChangedOnServerSceneChanged
  3. 调用东西
  4. 正如 derHugo 指出的那样,我并没有检查我的包裹是否可以寄出。事实证明,可以发送的最大大小是 1200 字节,而我试图发送 100x100x4 字节。我在主机上测试的时候没有出现这个错误,只有在有外部客户端的时候才出现