Некоторые функции Unity Networking (UNet) были удалены из Mirror или изменены по разным причинам. На этой странице будут указаны все измененные и удаленные функции, свойства и методы, причина изменения или удаления и возможные альтернативы.
{% hint style="info" %} Примечание: Некоторые изменения в этом документе могут применяться к предстоящему выпуску Asset Store. {% endhint %}
Как часть служб Unity, все это пространство имен было удалено. С самого начала это работало не очень хорошо, и невероятно плохо взаимодействовало с основной частью пакета. Мы ожидаем, что это, наряду с другими внутренними сервисами, будет предоставляться через автономные приложения, которые имеют интеграцию с Mirror.
Это было очень непрактично для своей небольшой задачи, поэтому оно было удалено. Есть гораздо более простые способы создать базовый сервер прослушивания, с одним из наших транспортных средств или без него.
Основная сеть была значительно упрощена за счет удаления этого низко висящего фрукта. Оно было слишком багнутым и сложным, чтобы это исправлять. Если вам необходимо нечто подобное, рассмотрите невидимый player prefab как канал для прослушивания спавна актуальных player prefab'ов с client authority. Все входные данные будут проходить через prefab conduit для управления объектами player.
MsgType
enum был удален. Все типы сообщений генерируются динамически. Используйте Send
вместо этого.
Network Transform был полностью изменен так, что он теперь синхронизирует только позицию, вращение и размер, имеет параметры управления и определяет, следует ли их интерполировать, и использует Snapshot Interpolation. В нём есть куча виртуальных методов и шаблоны скриптов для создания вашей собственной версии. Поддержка Rigidbody была удалена чтобы создать отдельный Network Rigidbody компонент.
Network Animator также был упрощен, поскольку он объединяет все параметры аниматора в одно сообщение об обновлении.
SyncVar значения свойств теперь обновляются перед вызовом перехватчика, и для перехватчиков теперь требуются два параметра того же типа, что и свойство: oldValue
и newValue
Используйте SyncList вместо этого.
SyncListString
было заменено наSyncList<string>
.SyncListFloat
было заменено наSyncList<float>
.SyncListInt
было заменено наSyncList<int>
.SyncListUInt
было заменено наSyncList<uint>
.SyncListBool
было заменено наSyncList<bool>
.
Смотрите документацию для получения более подробного содержания.
OP_REMOVE
было заменено наOP_REMOVEAT
OP_DIRTY
было заменено наOP_SET
See documentation for more details.
OP_DIRTY
was replaced byOP_SET
Смотрите документацию для получения более подробного содержания.
- Теперь это класс, а не интерфейс.
Flush
- ИспользуйтеClearChanges
вместо этого.
В классическом UNet флаги QoS использовались для определения того, как пакеты попадают на удаленный конец. Например, если вам нужно, чтобы пакету был присвоен приоритет в очереди, вы бы указали флаг высокого приоритета, который Unity LLAPI затем получил бы и обработал соответствующим образом. К сожалению, это вызвало много дополнительной работы для транспортного уровня, и некоторые флаги QoS не работали должным образом из-за ошибочного кода, который полагался на слишком много магии.
В Mirror, QoS флаги были заменены на систему "каналов". Стандартный транспорт Telepathy не использует каналы потому что полностью основан на TCP, остальные транспорты, такие как Ignorance и LiteNetLib поддерживают это.
В настоящее время определены следующие каналы:
Channels.Reliable = 0
Channels.Unreliable = 1
-
NetworkConnection
было заменено наNetworkConnectionToClient
во всех местах. -
networkPort
Удален для разделения на транспортный компонент. Не все транспорты используют порты, только те, у кого действительно есть для этого поле. Смотрите Транспорты для получения более подробного содержания. -
IsHeadless()
Use compiler symbolUNITY_SERVER
instead. -
ConfigureServerFrameRate
was renamed toConfigureHeadlessFrameRate
. -
client
Use NetworkClient directly, it will be made static soon. For example, useNetworkClient.Send(message)
instead ofNetworkManager.client.Send(message)
. -
IsClientConnected()
Use static propertyNetworkClient.isConnected
instead. -
onlineScene
andofflineScene
These store full paths now, so use SceneManager.GetActiveScene().path instead. -
OnStartClient(NetworkClient client)
Override OnStartClient() instead since allNetworkClient
methods are static now. -
OnClientChangeScene(string newSceneName)
OverrideOnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
instead. -
OnClientChangeScene(string newSceneName, SceneOperation sceneOperation)
OverrideOnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
instead. -
OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage)
OverrideOnServerAddPlayer(NetworkConnection conn)
instead. See Custom Player Spawn Guide for details. -
OnServerRemovePlayer(NetworkConnection conn, NetworkIdentity player)
UseNetworkServer.RemovePlayerForConnection(NetworkConnection conn, GameObject player, bool keepAuthority = false)
instead. -
OnServerError(NetworkConnection conn, int errorCode)
Replaced with
OnServerError(NetworkConnection conn, Exception exception)
. -
OnClientError(NetworkConnection conn, int errorCode)
Replaced with
OnClientError(Exception exception)
. -
disconnectInactiveConnections
anddisconnectInactiveTimeout
were removed. -
OnClient* virtual methods no longer take a
NetworkConnection
parameter. Remove the parameter from your overrides and useNetworkClient.connection
in your code instead. -
serverTickRate
renamed tosendRate
. -
serverTickInterval
moved toNetworkServer
.
-
showGUI
was removed.Disable the component instead.
-
NetworkConnection
was replaced byNetworkConnectionToClient
in many places. -
OnRoomServerCreateGamePlayer(NetworkConnection conn)
UseOnRoomServerCreateGamePlayer(NetworkConnection conn, GameObject roomPlayer)
instead. -
OnRoomServerSceneLoadedForPlayer(GameObject roomPlayer, GameObject gamePlayer)
UseOnRoomServerSceneLoadedForPlayer(NetworkConnection conn, GameObject roomPlayer, GameObject gamePlayer)
instead. -
Client virtual methods no longer take a
NetworkConnection
parameter.Use
NetworkClient.connection
within your overrides.
-
clientAuthorityOwner
Use connectionToClient instead -
GetSceneIdenity
UseGetSceneIdentity
instead (typo in original name) -
RemoveClientAuthority(NetworkConnection conn)
NetworkConnection parameter is no longer needed and nothing is returned -
spawned
dictionaryThis has been split up to
NetworkServer.spawned
andNetworkClient.spawned
dictionaries. -
Local Player Authority checkbox
This checkbox is no longer needed, and we simplified how Authority works in Mirror.
NetworkConnection
was replaced byNetworkConnectionToClient
in many places.sendInterval
attribute
UseNetworkBehaviour.syncInterval
field instead. Can be modified in the Inspector too.List m_SyncObjects
UseList syncObjects
instead.OnSetLocalVisibility(bool visible)
OverrideOnSetHostVisibility(bool visible)
instead.OnRebuildObservers
,OnCheckObserver
, andOnSetHostVisibility
were moved to a separate class calledNetworkVisibility
NetworkBehaviour.OnNetworkDestroy
was renamed toNetworkBehaviour.OnStopClient
.getSyncVarHookGuard
renamed toGetSyncVarHookGuard
.setSyncVarHookGuard
- renamed toSetSyncVarHookGuard
.SetDirtyBit
- UseSetSyncVarDirtyBit
instead.[Command]
attribute parameterignoreAuthority
replaced withrequiresAuthority
.[ClientRpc]
attribute parameterincludeOwner
replace withexcludeOwner
.hasAuthority
renamed toisOwned
.
hostId
Removed because it's not needed ever since we removed LLAPI as default. It's always 0 for regular connections and -1 for local connections. Useconnection.GetType() == typeof(NetworkConnection)
to check if it's a regular or local connection.isConnected
Removed because it's pointless. ANetworkConnection
is always connected.InvokeHandlerNoData(int msgType)
UseInvokeHandler
instead.playerController
renamed toidentity
since that's what it is: theNetworkIdentity
for the connection.RegisterHandler(short msgType, NetworkMessageDelegate handler)
UseNetworkServer.RegisterHandler()
orNetworkClient.RegisterHandler()
instead.UnregisterHandler(short msgType)
UseNetworkServer.UnregisterHandler()
orNetworkClient.UnregisterHandler()
instead.Send(int msgType, MessageBase msg, int channelId = Channels.Reliable)
UseSend(msg, channelId)
instead.clientOwnedObjects
renamed toowned
.
-
NetworkConnection
was replaced byNetworkConnectionToClient
in many places. -
FindLocalObject(uint netId)
UseNetworkServer.spawned[netId].gameObject
instead. -
RegisterHandler(int msgType, NetworkMessageDelegate handler)
UseRegisterHandler(T msg)
instead. -
RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)
UseRegisterHandler(T msg)
instead. -
RegisterHandler(Action handler, bool requireAuthentication = true)
Use
RegisterHandler(Action<NetworkConnection, T), requireAuthentication = true)
instead. -
UnregisterHandler(int msgType)
UseUnregisterHandler(T msg)
instead. -
UnregisterHandler(MsgType msgType)
UseUnregisterHandler(T msg)
instead. -
SendToAll(int msgType, MessageBase msg, int channelId = Channels.Reliable)
UseSendToAll(T msg, int channelId = Channels.Reliable)
instead. -
SendToClient(int connectionId, int msgType, MessageBase msg)
UseNetworkConnection.Send(T msg, int channelId = Channels.Reliable)
instead. -
SendToClient(int connectionId, T msg)
UseNetworkConnection.Send(T msg, int channelId = Channels.Reliable)
instead. -
SendToClientOfPlayer(NetworkIdentity identity, int msgType, MessageBase msg)
Useidentity.connectionToClient.Send<T>(T message, int channelId = Channels.Reliable)
instead. -
SendToReady(NetworkIdentity identity, short msgType, MessageBase msg, int channelId = Channels.Reliable)
Useidentity.connectionToClient.Send()
instead. -
SendToReady(NetworkIdentity identity, T message, bool includeOwner = true, int channelId = Channels.Reliable)
Renamed to
SendToReadyObservers
. -
SpawnWithClientAuthority(GameObject obj, GameObject player)
UseSpawn(GameObject obj, GameObject player)
instead. -
SpawnWithClientAuthority(GameObject obj, NetworkConnection ownerConnection)
UseSpawn(GameObject obj, NetworkConnection ownerConnection)
instead. -
SpawnWithClientAuthority(GameObject obj, Guid assetId, NetworkConnection ownerConnection)
UseSpawn(GameObject obj, Guid assetId, NetworkConnection ownerConnection)
instead. -
disconnectInactiveConnections
anddisconnectInactiveTimeout
were removed. -
NoConnections
was renamed toNoExternalConnections
. -
DisconnectAllExternalConnections
/DisconnectAllConnections
Use
DisconnectAll
instead. -
OnError
renamed toOnTransportError
for clarity.
-
NetworkClient singleton
UseNetworkClient
directly. Singleton isn't needed anymore as all functions are static now.
Example:NetworkClient.Send(message)
instead ofNetworkClient.singleton.Send(message)
. -
allClients
UseNetworkClient
directly instead. There is always exactly one client. -
GetRTT()
UseNetworkTime.rtt
instead. -
readyConnection
Use
connection
instead. -
isLocalClient
Use
isHostClient
instead. -
DisconnectLocalServer()
Use
NetworkClient.Disconnect()
instead. -
RegisterHandler(int msgType, NetworkMessageDelegate handler)
UseRegisterHandler(T msg)
instead. -
RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)
UseRegisterHandler(T msg)
instead. -
RegisterHandler(Action<NetworkConnection, T> handler, bool requireAuthentication = true)
Use
RegisterHandler(Action<T> handler, bool requireAuthentication = true)
instead. -
UnregisterHandler(int msgType)
UseUnregisterHandler(T msg)
instead. -
UnregisterHandler(MsgType msgType)
UseUnregisterHandler(T msg)
instead. -
Ready(NetworkConnection conn)
Use
Ready()
without theNetworkConnection
parameter instead. -
Send(short msgType, MessageBase msg)
UseSend(T msg, int channelId = Channels.Reliable)
with no message id instead -
ShutdownAll()
UseShutdown()
instead. There is only one client. -
OnError
renamed toOnTransportError
for clarity.
- Merged into
NetworkClient
.
- Replaced by Scene Interest Management.
- Replaced by Spatial Hash / Distance Interest Management.
- Replaced by Network Match and requires Match Interest Management.
- Replaced by Network Team and requires Team Interest Management.
-
NetworkConnection
was replaced byNetworkConnectionToClient
in many places. -
OnClientAuthenticate
no longer takes aNetworkConnection
parameter.
UseNetworkClient.connection
as needed. -
OnClientAuthenticated
event no longer takes aNetworkConnection
parameter.
UseNetworkClient.connection
as needed. -
NetworkConnection
is no longer used in client message handlers.Use
NetworkClient.connection
within your handlers instead. -
ClientAccept
andClientReject
no longer needs aNetworkConnection
parameter.
NetworkTime.timeVar
was renamed totimeVariance
.NetworkTime.timeSd
was renamed totimeStandardDeviation
.NetworkTime.rttVar
was renamed torttVariance
.NetworkTime.rttSd
was renamed torttStandardDeviation
.
activeTransport
renamed toactive
.
Basic messages of simple types were all removed as unnecessary bloat. You can create your own message classes instead.
StringMessage
ByteMessage
BytesMessage
IntegerMessage
DoubleMessage
EmptyMessage
NetworkMessage requires structs in all cases - classes no longer supported
Read(byte[] buffer, int offset, int count)
UseReadBytes
instead.ReadPackedInt32(int value)
UseReadInt32(int value)
instead.ReadPackedUInt32(uint value)
UseReadUInt32(uint value)
instead.ReadPackedUInt64(ulong value)
UseReadUInt64(ulong value)
instead.ReadBoolean
renamed toReadBool
.ReadInt16
renamed toReadShort
.ReadInt32
renamed toReadInt
.Readint64
renamed toReadLong
.ReadSingle
renamed toReadFloat
.
Write(bool value)
UseWriteBool
instead.Write(byte value)
UseWriteByte
instead.Write(sbyte value)
UseWriteSByte
instead.Write(short value)
UseWriteShort
instead.Write(ushort value)
UseWriteUShort
instead.Write(int value)
UseWriteInt
instead.Write(uint value)
UseWriteUInt
instead.Write(long value)
UseWriteLong
instead.Write(ulong value)
UseWriteULong
instead.Write(float value)
UseWriteFloat
instead.Write(double value)
UseWriteDouble
instead.Write(decimal value)
UseWriteDecimal
instead.Write(string value)
UseWriteString
instead.Write(char value)
UseWriteChar
instead.Write(Vector2 value)
UseWriteVector2
instead.Write(Vector2Int value)
UseWriteVector2Int
instead.Write(Vector3 value)
UseWriteVector3
instead.Write(Vector3Int value)
UseWriteVector3Int
instead.Write(Vector4 value)
UseWriteVector4
instead.Write(Color value)
UseWriteColor
instead.Write(Color32 value)
UseWriteColor32
instead.Write(Guid value)
UseWriteGuid
instead.Write(Transform value)
UseWriteTransform
instead.Write(Quaternion value)
UseWriteQuaternion
instead.Write(Rect value)
UseWriteRect
instead.Write(Plane value)
UseWritePlane
instead.Write(Ray value)
UseWriteRay
instead.Write(Matrix4x4 value)
UseWriteMatrix4x4
instead.Write(NetworkIdentity value)
UseWriteNetworkIdentity
instead.Write(GameObject value)
UseWriteGameObject
instead.Write(byte[] buffer, int offset, int count)
UseWriteBytes
instead.WritePackedInt32(int value)
UseWriteInt32(int value)
insteadWritePackedUInt32(uint value)
UseWriteUInt32(uint value)
insteadWritePackedUInt64(ulong value)
UseWriteUInt64(ulong value)
instead
- Renamed to
RemoteProcedureCalls
. CmdDelegate
renamed toRemoteCallDelegate
.MirrorInvokeType
renamed toRemoteCallType
.
-
GetConnectionInfo(int connectionId, out string address)
UseServerGetClientAddress(int connectionId)
instead. -
GetMaxBatchSize
renamed toGetMaxPacketSize
. -
ClientSend(int channelId, ArraySegment segment)
Use
ClientSend(segment, channelId)
instead. -
ServerSend(int connectionId, int channelId, ArraySegment segment)
Use
ServerSend(connectionId, segment, channelId)
instead.
MaxMessageSize
UseMaxMessageSizeFromClient
orMaxMessageSizeFromServer
instead.
- This has been removed.
Version
enum removed.DefaultReliable
renamed toReliable
.DefaultUnreliable
renamed toUnreliable
.