Deprecations
Last updated
Last updated
Certain features of Unity Networking (UNet) were removed from Mirror or modified for various reasons. This page will identify all changed and removed features, properties, and methods, the reason for change or removal, and possible alternatives.
As part of the Unity Services, this entire namespace was removed. It didn't work well to begin with, and was incredibly complex to be part of the core networking package. We expect this, along with other back-end services, will be provided through standalone apps that have integration to Mirror.
This was too complex and impractical to maintain for what little it did, and was removed. There are much easier ways to make a basic listen server, with or without one of our transports.
The core networking was greatly simplified by removing this low-hanging fruit. It was buggy, and too convoluted to be worth fixing. For those that need something like this, consider defining a non-visible player prefab as a message conduit that spawns actual player prefabs with client authority. All inputs would route through the conduit prefab to control the player objects.
The MsgType
enumeration was removed. All message types are generated dynamically. Use Send
instead.
was fully replaced so that it only syncs position, rotation and scale, has control options for those and whether to interpolate them, and uses Snapshot Interpolation. It also has a bunch of virtual methods and there's a for making your own derived version. Rigidbody support was removed in favor of a separate component.
SyncListString
was replaced by SyncList<string>
.
SyncListFloat
was replaced by SyncList<float>
.
SyncListInt
was replaced by SyncList<int>
.
SyncListUInt
was replaced by SyncList<uint>
.
SyncListBool
was replaced by SyncList<bool>
.
OP_REMOVE
was replaced by OP_REMOVEAT
OP_DIRTY
was replaced by OP_SET
OP_DIRTY
was replaced by OP_SET
This is now a class instead of an interface.
Flush
- Use ClearChanges
instead.
In classic UNet, QoS Flags were used to determine how packets got to the remote end. For example, if you needed a packet to be prioritized in the queue, you would specify a high priority flag which the Unity LLAPI would then receive and deal with appropriately. Unfortunately, this caused a lot of extra work for the transport layer and some of the QoS flags did not work as intended due to buggy code that relied on too much magic.
The currently defined channels are:
Channels.Reliable = 0
Channels.Unreliable = 1
NetworkConnection
was replaced by NetworkConnectionToClient
in many places.
IsHeadless()
Use compiler symbol UNITY_SERVER
instead.
ConfigureServerFrameRate
was renamed to ConfigureHeadlessFrameRate
.
client
Use NetworkClient directly, it will be made static soon. For example, use NetworkClient.Send(message)
instead of NetworkManager.client.Send(message)
.
IsClientConnected()
Use static property NetworkClient.isConnected
instead.
onlineScene
and offlineScene
These store full paths now, so use SceneManager.GetActiveScene().path instead.
OnStartClient(NetworkClient client)
Override OnStartClient() instead since all NetworkClient
methods are static now.
OnClientChangeScene(string newSceneName)
Override OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
instead.
OnClientChangeScene(string newSceneName, SceneOperation sceneOperation)
Override OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
instead.
OnServerRemovePlayer(NetworkConnection conn, NetworkIdentity player)
Use NetworkServer.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
and disconnectInactiveTimeout
were removed.
OnClient* virtual methods no longer take a NetworkConnection
parameter. Remove the parameter from your overrides and use NetworkClient.connection
in your code instead.
serverTickRate
renamed to sendRate
.
serverTickInterval
moved to NetworkServer
.
showGUI
was removed.
Disable the component instead.
NetworkConnection
was replaced by NetworkConnectionToClient
in many places.
OnRoomServerCreateGamePlayer(NetworkConnection conn)
Use OnRoomServerCreateGamePlayer(NetworkConnection conn, GameObject roomPlayer)
instead.
OnRoomServerSceneLoadedForPlayer(GameObject roomPlayer, GameObject gamePlayer)
Use OnRoomServerSceneLoadedForPlayer(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
Use GetSceneIdentity
instead (typo in original name)
RemoveClientAuthority(NetworkConnection conn)
NetworkConnection parameter is no longer needed and nothing is returned
spawned
dictionary
This has been split up to NetworkServer.spawned
and NetworkClient.spawned
dictionaries.
NetworkConnection
was replaced by NetworkConnectionToClient
in many places.
sendInterval
attribute
Use NetworkBehaviour.syncInterval
field instead. Can be modified in the Inspector too.
List m_SyncObjects
Use List syncObjects
instead.
OnSetLocalVisibility(bool visible)
Override OnSetHostVisibility(bool visible)
instead.
OnRebuildObservers
, OnCheckObserver
, and OnSetHostVisibility
were moved to a separate class called NetworkVisibility
NetworkBehaviour.OnNetworkDestroy
was renamed to NetworkBehaviour.OnStopClient
.
getSyncVarHookGuard
renamed to GetSyncVarHookGuard
.
setSyncVarHookGuard
- renamed to SetSyncVarHookGuard
.
SetDirtyBit
- Use SetSyncVarDirtyBit
instead.
[Command]
attribute parameter ignoreAuthority
replaced with requiresAuthority
.
[ClientRpc]
attribute parameter includeOwner
replace with excludeOwner
.
hasAuthority
renamed to isOwned
.
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. Use connection.GetType() == typeof(NetworkConnection)
to check if it's a regular or local connection.
isConnected
Removed because it's pointless. A NetworkConnection
is always connected.
InvokeHandlerNoData(int msgType)
Use InvokeHandler
instead.
playerController
renamed to identity
since that's what it is: the NetworkIdentity
for the connection.
RegisterHandler(short msgType, NetworkMessageDelegate handler)
Use NetworkServer.RegisterHandler()
or NetworkClient.RegisterHandler()
instead.
UnregisterHandler(short msgType)
Use NetworkServer.UnregisterHandler()
or NetworkClient.UnregisterHandler()
instead.
Send(int msgType, MessageBase msg, int channelId = Channels.Reliable)
Use Send(msg, channelId)
instead.
clientOwnedObjects
renamed to owned
.
NetworkConnection
was replaced by NetworkConnectionToClient
in many places.
FindLocalObject(uint netId)
Use NetworkServer.spawned[netId].gameObject
instead.
RegisterHandler(int msgType, NetworkMessageDelegate handler)
Use RegisterHandler(T msg)
instead.
RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)
Use RegisterHandler(T msg)
instead.
RegisterHandler(Action handler, bool requireAuthentication = true)
Use RegisterHandler(Action<NetworkConnection, T), requireAuthentication = true)
instead.
UnregisterHandler(int msgType)
Use UnregisterHandler(T msg)
instead.
UnregisterHandler(MsgType msgType)
Use UnregisterHandler(T msg)
instead.
SendToAll(int msgType, MessageBase msg, int channelId = Channels.Reliable)
Use SendToAll(T msg, int channelId = Channels.Reliable)
instead.
SendToClient(int connectionId, int msgType, MessageBase msg)
Use NetworkConnection.Send(T msg, int channelId = Channels.Reliable)
instead.
SendToClient(int connectionId, T msg)
Use NetworkConnection.Send(T msg, int channelId = Channels.Reliable)
instead.
SendToClientOfPlayer(NetworkIdentity identity, int msgType, MessageBase msg)
Use identity.connectionToClient.Send<T>(T message, int channelId = Channels.Reliable)
instead.
SendToReady(NetworkIdentity identity, short msgType, MessageBase msg, int channelId = Channels.Reliable)
Use identity.connectionToClient.Send()
instead.
SendToReady(NetworkIdentity identity, T message, bool includeOwner = true, int channelId = Channels.Reliable)
Renamed to SendToReadyObservers
.
SpawnWithClientAuthority(GameObject obj, GameObject player)
Use Spawn(GameObject obj, GameObject player)
instead.
SpawnWithClientAuthority(GameObject obj, NetworkConnection ownerConnection)
Use Spawn(GameObject obj, NetworkConnection ownerConnection)
instead.
SpawnWithClientAuthority(GameObject obj, Guid assetId, NetworkConnection ownerConnection)
Use Spawn(GameObject obj, Guid assetId, NetworkConnection ownerConnection)
instead.
disconnectInactiveConnections
and disconnectInactiveTimeout
were removed.
NoConnections
was renamed to NoExternalConnections
.
DisconnectAllExternalConnections
/ DisconnectAllConnections
Use DisconnectAll
instead.
OnError
renamed to OnTransportError
for clarity.
NetworkClient singleton
Use NetworkClient
directly. Singleton isn't needed anymore as all functions are static now.
Example: NetworkClient.Send(message)
instead of NetworkClient.singleton.Send(message)
.
allClients
Use NetworkClient
directly instead. There is always exactly one client.
GetRTT()
Use NetworkTime.rtt
instead.
readyConnection
Use connection
instead.
isLocalClient
Use isHostClient
instead.
DisconnectLocalServer()
Use NetworkClient.Disconnect()
instead.
RegisterHandler(int msgType, NetworkMessageDelegate handler)
Use RegisterHandler(T msg)
instead.
RegisterHandler(MsgType msgType, NetworkMessageDelegate handler)
Use RegisterHandler(T msg)
instead.
RegisterHandler(Action<NetworkConnection, T> handler, bool requireAuthentication = true)
Use RegisterHandler(Action<T> handler, bool requireAuthentication = true)
instead.
UnregisterHandler(int msgType)
Use UnregisterHandler(T msg)
instead.
UnregisterHandler(MsgType msgType)
Use UnregisterHandler(T msg)
instead.
Ready(NetworkConnection conn)
Use Ready()
without the NetworkConnection
parameter instead.
Send(short msgType, MessageBase msg)
Use Send(T msg, int channelId = Channels.Reliable)
with no message id instead
ShutdownAll()
Use Shutdown()
instead. There is only one client.
OnError
renamed to OnTransportError
for clarity.
Merged into NetworkClient
.
NetworkConnection
was replaced by NetworkConnectionToClient
in many places.
OnClientAuthenticate
no longer takes a NetworkConnection
parameter.
Use NetworkClient.connection
as needed.
OnClientAuthenticated
event no longer takes a NetworkConnection
parameter.
Use NetworkClient.connection
as needed.
NetworkConnection
is no longer used in client message handlers.
Use NetworkClient.connection
within your handlers instead.
ClientAccept
and ClientReject
no longer needs a NetworkConnection
parameter.
NetworkTime.timeVar
was renamed to timeVariance
.
NetworkTime.timeSd
was renamed to timeStandardDeviation
.
NetworkTime.rttVar
was renamed to rttVariance
.
NetworkTime.rttSd
was renamed to rttStandardDeviation
.
activeTransport
renamed to active
.
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)
Use ReadBytes
instead.
ReadPackedInt32(int value)
Use ReadInt32(int value)
instead.
ReadPackedUInt32(uint value)
Use ReadUInt32(uint value)
instead.
ReadPackedUInt64(ulong value)
Use ReadUInt64(ulong value)
instead.
ReadBoolean
renamed to ReadBool
.
ReadInt16
renamed to ReadShort
.
ReadInt32
renamed to ReadInt
.
Readint64
renamed to ReadLong
.
ReadSingle
renamed to ReadFloat
.
Write(bool value)
Use WriteBool
instead.
Write(byte value)
Use WriteByte
instead.
Write(sbyte value)
Use WriteSByte
instead.
Write(short value)
Use WriteShort
instead.
Write(ushort value)
Use WriteUShort
instead.
Write(int value)
Use WriteInt
instead.
Write(uint value)
Use WriteUInt
instead.
Write(long value)
Use WriteLong
instead.
Write(ulong value)
Use WriteULong
instead.
Write(float value)
Use WriteFloat
instead.
Write(double value)
Use WriteDouble
instead.
Write(decimal value)
Use WriteDecimal
instead.
Write(string value)
Use WriteString
instead.
Write(char value)
Use WriteChar
instead.
Write(Vector2 value)
Use WriteVector2
instead.
Write(Vector2Int value)
Use WriteVector2Int
instead.
Write(Vector3 value)
Use WriteVector3
instead.
Write(Vector3Int value)
Use WriteVector3Int
instead.
Write(Vector4 value)
Use WriteVector4
instead.
Write(Color value)
Use WriteColor
instead.
Write(Color32 value)
Use WriteColor32
instead.
Write(Guid value)
Use WriteGuid
instead.
Write(Transform value)
Use WriteTransform
instead.
Write(Quaternion value)
Use WriteQuaternion
instead.
Write(Rect value)
Use WriteRect
instead.
Write(Plane value)
Use WritePlane
instead.
Write(Ray value)
Use WriteRay
instead.
Write(Matrix4x4 value)
Use WriteMatrix4x4
instead.
Write(NetworkIdentity value)
Use WriteNetworkIdentity
instead.
Write(GameObject value)
Use WriteGameObject
instead.
Write(byte[] buffer, int offset, int count)
Use WriteBytes
instead.
WritePackedInt32(int value)
Use WriteInt32(int value)
instead
WritePackedUInt32(uint value)
Use WriteUInt32(uint value)
instead
WritePackedUInt64(ulong value)
Use WriteUInt64(ulong value)
instead
Renamed to RemoteProcedureCalls
.
CmdDelegate
renamed to RemoteCallDelegate
.
MirrorInvokeType
renamed to RemoteCallType
.
GetConnectionInfo(int connectionId, out string address)
Use ServerGetClientAddress(int connectionId)
instead.
GetMaxBatchSize
renamed to GetMaxPacketSize
.
ClientSend(int channelId, ArraySegment segment)
Use ClientSend(segment, channelId)
instead.
ServerSend(int connectionId, int channelId, ArraySegment segment)
Use ServerSend(connectionId, segment, channelId)
instead.
MaxMessageSize
Use MaxMessageSizeFromClient
or MaxMessageSizeFromServer
instead.
This has been removed.
Version
enum removed.
DefaultReliable
renamed to Reliable
.
DefaultUnreliable
renamed to Unreliable
.
was also simplified, as it batches all Animator parameters into a single update message.
property values are now updated before the hook is called, and hooks now require two parameters of the same type as the property: oldValue
and newValue
Use instead.
See for more details.
See for more details.
See for more details.
In Mirror, QoS flags were replaced with a "Channels" system. While the default transport, , does not use channels at all because it's TCP-based, other transports, such as and , do support them.
networkPort
Removed as part of separating Transports to components. Not all transports use ports, but those that do have a field for it. See for more info.
OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage)
Override OnServerAddPlayer(NetworkConnection conn)
instead. See for details.
Local Player Authority checkbox This checkbox is no longer needed, and we simplified how works in Mirror.
Replaced by .
Replaced by / Interest Management.
Replaced by Network Match and requires t.
Replaced by Network Team and requires .