Зеркало Unity — сетевой сервер отправляет сообщение целевому клиенту

#unity3d #multiplayer #mirror

#Unity3D #Многопользовательский режим #unity3d-зеркало

Вопрос:

Я не уверен, что я здесь делаю не так, но, похоже, я не могу передать свое сообщение с сервера клиенту. Вот что у меня есть до сих пор:

 protected virtual void RegisterHandlers(bool enable)
{
    if (enable)
    {
        NetworkServer.RegisterHandler<ClientRequestLoadScene>(OnClientRequestedToLoadScene);

        NetworkClient.RegisterHandler<ServerRequestLoadScene>(OnServerRequestLoadScene);
     }
     else
     {
         NetworkServer.UnregisterHandler<ClientRequestLoadScene>();

         NetworkClient.UnregisterHandler<ServerRequestLoadScene>();
     }
}
 

Вышеуказанное вызывается, когда экземпляр начинает регистрировать новый обработчик. Затем у меня есть вызов клиента:

 ClientRequestLoadScene msg = new ClientRequestLoadScene();
msg.scene = scene;
NetworkClient.Send(msg);
 

Сервер получает его нормально. Затем сервер выполняет следующее:

 private void OnClientRequestedToLoadScene(NetworkConnection conn, ClientRequestLoadScene msg)
{
  ...
  ...
   ServerRequestLoadScene server_msg = new ServerRequestLoadScene();
   server_msg.scene = msg.scene;
   NetworkServer.SendToClientOfPlayer(conn.identity, msg);
  ...
  ...
}
 

Вышеупомянутое сообщение никогда не будет получено клиентом. Я также пробовал: NetworkServer.SendToAll(msg); и это тоже никогда не принимается клиентом. Что я делаю не так?

Комментарии:

1. Есть ли причина для -1? Это законный вопрос. Я хотел бы услышать причину, по которой вы считаете, что этому здесь не место.

Ответ №1:

Проблема с вышеизложенным связана с этими строками:

 server_msg.scene = msg.scene;
NetworkServer.SendToClientOfPlayer(conn.identity, msg);
 

Это должно было быть:

 server_msg.scene = msg.scene;
conn.Send(server_msg);