Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее См. в Словарь Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects. |
NetworkConnection — это высокоуровневый класс API, который инкапсулирует сетевое подключение. Объекты (NetworkClient)[class-NetworkClient] имеют NetworkConnection
, а NetworkServer имеют несколько подключений — по одному от каждого клиента. Сетевые подключения позволяют отправлять массивы байтов или сериализованные объекты в виде сетевых сообщений.
Свойства
Property: | Функции: | |
---|---|---|
hostId | Идентификатор хоста NetworkTransport для этого подключения. | |
connectionId | Идентификатор соединения NetworkTransport для этого соединения. |
|
isReady | Отметьте, чтобы контролировать, отправляются ли обновления состояния в это соединение | |
lastMessageTime | Время последнего получения сообщения по этому соединению. | |
address | IP-адрес конечной точки, к которой подключено это соединение. | |
playerControllers | Набор игроков, добавленных с помощью AddPlayer(). | |
clientOwnedObjects | Набор объектов, над которыми это соединение имеет власть.. |
Класс NetworkConnection имеет виртуальные функции, которые вызываются, когда данные отправляются на транспортный уровень или получаются с транспортного уровня. Эти функции позволяют специализированным версиям NetworkConnection проверять или изменять эти данные или даже направлять их в разные источники. Эти функции показаны ниже, включая поведение по умолчанию:
public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)
{
HandleBytes(bytes, numBytes, channelId);
}
public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
{
return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
}
Примером использования этих функций является регистрация содержимого входящих и исходящих пакетов. Ниже приведен пример класса DebugConnection, производного от NetworkConnection, который регистрирует первые 50 байтов пакетов на консоли. Чтобы использовать такой класс, вызовите функцию SetNetworkConnectionClass() в NetworkClient или NetworkServer.
class DebugConnection : NetworkConnection
{
public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)
{
StringBuilder msg = new StringBuilder();
for (int i = 0; i < numBytes; i++)
{
var s = String.Format("{0:X2}", bytes[i]);
msg.Append(s);
if (i > 50) break;
}
UnityEngine.Debug.Log("TransportRecieve h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);
HandleBytes(bytes, numBytes, channelId);
}
public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
{
StringBuilder msg = new StringBuilder();
for (int i = 0; i < numBytes; i++)
{
var s = String.Format("{0:X2}", bytes[i]);
msg.Append(s);
if (i > 50) break;
}
UnityEngine.Debug.Log("TransportSend h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);
return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
}
}