无法获取在镜像网络中工作的命令

问题描述 投票:0回答:1

最近跳上镜像网络并在命令方面遇到一些问题

所以,我有一些在运行时实例化的块,并且可以单击它们。

我的逻辑是,当单击块时,我会向服务器发送一条消息,其中包含块的 id,然后通过游戏管理器(其中包含所有块的列表)进行服务器,为每个客户端执行具有该 id 的块的单击,使用 ClientRpc。

这在主机实例上工作得很好,但在客户端实例上却不行。

代码很简单

 [Command(requiresAuthority = false)]
public void SendClickToAServer(int index)
{
     Debug.Log("Clicked index:" + index);
}

但是我遇到错误并且客户端断开连接
我需要从客户端向服务器发送消息,所以我使用命令。当我尝试在主机实例上执行此操作时,一切都很好,但是当我尝试仅从客户端发送此消息时,我收到错误 Disconnecting connection: connection(390227533) 因为处理 Mirror.CommandMessage 类型的消息导致异常。如果对方意外(或攻击者故意)发送了无效数据,则可能会发生这种情况。原因:System.NullReferenceException:未将对象引用设置为 \Mirror\Core\NetworkServer.cs 中 Mirror.NetworkServer.OnCommandMessage(Mirror.NetworkConnectionToClient conn、Mirror.CommandMessage msg、System.Int32 channelId)[0x00103] 处的对象实例:327

我添加了所有需要的组件和继承,正如我在主机实例上所说的那样,它正在工作,我只是无法获取缺少的对象引用。也许我实例化或生成对象的方式有问题?

如果我删除[命令],那么一切正常,但它是热同步的

c# unity-game-engine networking multiplayer mirror
1个回答
0
投票

嗯..我很难说出哪里出了问题,但是您提供的代码(也没有您的工作流程)没有任何问题。

如果它在 host 而不是 client 上运行良好,那么您遇到的问题是您的 client 正在处理不正确的

NetworkIdentity
(最有可能),并且游戏状态之前已经不同步您发送
Command
。检查以确保您生成的对象在 server 上生成并同步到 client(而不是直接在
client
上生成 NetworkIdentity)。确保在连接到
server
时,默认情况下由
Player Prefab
创建的 NetworkManager 不会重复生成(例如,在启动 之前确保它们尚未出现在您的场景中)服务器)。

© www.soinside.com 2019 - 2024. All rights reserved.