Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее
См. в Словарь
Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects.

Используйте классы NetworkReader и NetworkWriter для записи данных к байтовым потокам.

Многопользовательская API высокого уровняСистема создания многопользовательских возможностей для игр Unity . Он построен поверх нижнего уровня транспортного уровня связи в реальном времени и выполняет многие общие задачи, необходимые для многопользовательских игр. Подробнее
См. в Словарь
построен с использованием этих классов и широко их использует. Однако вы можете использовать их напрямую, если хотите реализовать свои собственные функциональные возможности транспорта. У них есть специальные функции сериализации для многих типов Unity (полный список типов см. в NetworkWriter.Write).

Чтобы использовать классы, создайте экземпляр модуля записи и запишите в него отдельные переменные. Они сериализуются внутри в массив байтов, и это может быть отправлено по сети. На принимающей стороне важно, чтобы экземпляр считывателя массива байтов считывал переменные точно в том же порядке, в котором они были записаны.

Это можно использовать с классом MessageBase для создания массивов байтов, содержащих сериализованные сетевые сообщения.

void SendMessage(short msgType, MessageBase msg, int channelId) { // write the message to a local buffer NetworkWriter writer = new NetworkWriter(); writer.StartMessage(msgType); msg.Serialize(writer); writer.FinishMessage(); myClient.SendWriter(writer, channelId); }

Это сообщение имеет правильный формат, поэтому для него можно вызвать функцию обработчика сообщений.

Использование классов NetworkReader и NetworkWriter с классами NetworkServerSimple и NetworkClient

Следующий пример кода представляет собой довольно низкоуровневую демонстрацию, в которой используются классы самого низкого уровня из высокоуровневого API для настройки подключения.

Это код для соединения клиента и сервера вместе:

using UnityEngine; using UnityEngine.Networking; public class Serializer : MonoBehaviour { NetworkServerSimple m_Server; NetworkClient m_Client; const short k_MyMessage = 100; // When using a server instance like this it must be pumped manually void Update() { if (m_Server != null) m_Server.Update(); } void StartServer() { m_Server = new NetworkServerSimple(); m_Server.RegisterHandler(k_MyMessage, OnMyMessage); if (m_Server.Listen(5555)) Debug.Log("Started listening on 5555"); } void StartClient() { m_Client = new NetworkClient(); m_Client.RegisterHandler(MsgType.Connect, OnClientConnected); m_Client.Connect("127.0.0.1", 5555); } void OnClientConnected(NetworkMessage netmsg) { Debug.Log("Client connected to server"); SendMessage(); } }

Следующий фрагмент кода отправляет сообщение, используя средства сетевого чтения и записи, но использует обработчики сообщений, встроенные в эти классы:

void SendMessage() { NetworkWriter writer = new NetworkWriter(); writer.StartMessage(k_MyMessage); writer.Write(42); writer.Write("What is the answer"); writer.FinishMessage(); m_Client.SendWriter(writer, 0); } void OnMyMessage(NetworkMessage netmsg) { Debug.Log("Got message, size=" + netmsg.reader.Length); var someValue = netmsg.reader.ReadInt32(); var someString = netmsg.reader.ReadString(); Debug.Log("Message value=" + someValue + " Message string='" + someString + "'"); }

При настройке сообщений для обработчиков сообщений всегда следует использовать вызовы NetworkWriter.StartMessage() (с идентификатором типа сообщения) и вызовы NetworkWriter.FinishMessage(). Если вы не используете байтовые массивы, вы можете пропустить этот шаг.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3