2020 Change Log
Mirror uses semantic versioning, and the versions shown here are those that were published to the Asset Store, and occasionally major version bumps happen mid-month between store submissions and are therefore not individually shown here.
- Added: Network Reader/Writer now does
WriteBlittablefor better performance.
- Added: KCP Transport updated to version 1.4.
- Added: Network Authenticator now has
- Added: Network Transform now applies compression to rotations.
SyncVarsnow support using types that inherit from
SimpleWebTransportnow has option for TLS outside the transport.
MultipleMatchesexample featuring Network Match Checker with Lobby and Match functionality.
- Fixed: Better presentation of Network Ping Display..
- Fixed: Middleware Transport now listens for inner events correctly..
- Fixed: Calling
StartClientmore than once is now prevented..
- Fixed: NRE when no host player in
- Fixed: player collisions in
- Fixed: Weaver now properly generates readers and writers for structs in other assemblies, e.g.
NetworkServer.maxConnectionsis now public.
- Fixed: Skip reset of object that's being destroyed.
NetworkRoomManageris now public.
NetworkTransformnow correctly uses
- Fixed: Added
- Fixed: Weaver method lookup conflict with Unity 2020.2.
- Fixed: Memory allocation vulnerability in
- Changed: Play mode now blocked for invalid scene id's, with error messages.
- Changed: Experimental Network Transform now uses
Channels.DefaultUnreliableand applies compression to rotations.
- Changed: Server Only scene objects in examples replaced with normal objects instantiated on server or just eliminated.
- Breaking: Force
NetworkMessageto use structs in all cases - classes no longer supported.
- Breaking: Removed
WritePackedfunctions - Use Read and Write variants instead.
- Breaking: LLAPI has been removed.
- Added: Quaternion and float compression.
- Added: Option to configure handshakeMaxSize in SimpleWebTransport.
- Added: ServerTeleport to Experimental NetworkTransform.
- Added: Accept and Reject methods to Authenticator base class for ease of use.
- Fixed: Weaver failure on Authenticators and assemblies with only messages and no behaviors.
- Fixed: Examples no longer rely on sequential connectionId.
- Fixed: Eliminated errors when first importing due to preprocessor defines in transports.
- Fixed: Scene ID logging is now consistently in hex format.
- Fixed: sceneId when using BuildPipeline.BuildPlayer with incorrect case in path.
- Fixed: Trigger not applied correctly for host in NetworkAnimator.
- Fixed: Ensure ReadHelper.Read reads exactly number of bytes in SimpleWebTransport.
- Changed: Minimum Unity version is now 2018.4.28 LTS.
- Breaking: NetworkIdentity.clientAuthorityCallback is an event now.
- Breaking: Removed older obsolete methods and tests.
- Breaking: Transports no longer support sending to a List of connectionIds.
- Added: Support null when serializing classes.
- Added: Support recursive data types.
- Added: Support jagged arrays.
- Added: New generic Read and Write methods for types used by mirror and user callbacks.
- Added: NetworkAnimator now syncs animator.speed.
- Added: NetworkTransform Server Teleport function.
- Fixed: ClientScene.localplayer is now set to null when it is destroyed.
- Fixed: Fixing IndexChanged hook not being called for NetworkRoomPlayer.
- Fixed: Fixing NullReferenceException when loading scene.
- Fixed: Fixing NetworkConnectionToClient for IL2CPP.
- Fixed: NullReferenceException in tanks example when running in headless server only.
- Changed: OnSerialize now includes the component index as byte before serializing each component. Better CPU performance at the cost of bandwidth.
- Changed: Can now have 256 NetworkBehaviours per NetworkIdentity.
- Added: NetworkAnimator now syncs Layer Weight.
- Added: Lists can now be sent in Command/Rpc/Message/etc.
[Client]can now be used outside of NetworkBehaviour.
- Added: Experimental NetworkLerpRigidbody component that syncs position and velocity and applies them using Lerp.
- Fixed: NetworkAnimator now fires triggers immediately on owner.
isServerwill now keep its value after calling
[Client]error message now correctly logs the name of the method.
- Fixed: Messages can now be nested within other Message types.
[Client]now correctly give error when used on abstract method.
- Fixed: Abstract classes can now implement IMessageBase.
- Fixed: Weaver now correctly gives error when generating a reader methods for abstract classes.
- Changed: NetworkServer no longer runs update if there are no connections.
- Changed: NetworkBehaviour.IsDirty is now a public.
- Changed: SyncEvent are now obsolete and will be removed in the next version.
- Removed: isHeadless is now obsolete, Use preprocessor directive
- Fixed: base method called inside Command/RPC now work if the first base class does not have an override.
- Fixed: NetworkRoomPlayer now cleans up roomSlots on disable.
- Fixed: Fallback and Multiplex now disable their transports when they are disabled.
- Fixed: Websockets transport SocketState now returns false if socket is
- Fixed: SyncEvents can now have the same name if they are in different classes.
- Fixed: You can now have multiple SyncEvents per class.
- Fixed: Message base classes are now processed even if they are declared later in the file.
- Fixed: Registering a prefab with and same GUID no longer gives an error.
- Fixed: Weaver now generates Serialize methods for classes that implement IMessageBase.
- Changed: NetworkProximityChecker now has slightly better performance.
- Changed: ClientRpc no longer need Rpc prefix.
- Changed: Commands no longer need Cmd prefix.
- Changed: TargetRpc no longer need Target prefix.
- Changed: NetworkManager.networkSceneName is now protected set as it should not be set directly.
- Added: [Command] now has an
ignoreAuthorityoption for invoking Commands on objects the client doesn't have authority over, and Command methods can have an optional
- Added: [ClientRpc] now has an
excludeOwneroption to prevent messages from going to the client that owns the object.
- Added: Commands and Rpc's can now be declared as virtual and overridden in derived classes.
- Added: NetworkLogSettings component and Log Settings Window.
- Added: SyncLists now support
- Added: Network Room Manager now has a virtual
OnRoomServerPlayersNotReadythat fires on server from
- Added: Network Room Player template now includes base Network Behaviour overrides.
- Added: Network Room Player now has a virtual hook for the index SyncVar, and the override is in the template.
- Added: Experimental Network Transform with more control settings and features.
- Fixed: Network Room Manager.minPlayers is now protected so it's available for derived classes.
- Fixed: Network Room Manager no longer does redundant player prefab registration in
- Fixed: Network Room Player
OnClientEnterRoomnow correctly only fires on clients.
RegisterClientMessageswas being incorrectly invoked for every scene change.
- Fixed: Network Behaviour
SyncIntervalwas not showing in the inspector in some cases (regression).
- Fixed: Network Manager now cleans up network objects better when server stops.
- Fixed: Network Manager no longer tries to change to offline scene redundantly in
- Fixed: Network Connection's
lastMessageTimewasn't being properly initialized, causing incorrect idle timeout disconnects.
- Fixed: Websockets transport now correctly pauses and queues messages during scene changes and should otherwise be more stable with SSL
- Changed: Improvements were made to the Tanks example.
- Changed: Network Room Player now uses virtual SyncVar hook for ReadyStateChanged.
- Changed: Network Proximity Checker now uses direct distance check against player objects instead of Physics.SphereCastNonAlloc for better performance.
- Breaking: Websockets Transport now requires full path to PFX Certificate file.
- Removed: Discord Transport
- Added: Network Match Checker component. Use this component to create many concurrent isolated matches within a single game server.
- Added: Network Behaviour now has
- Added: Weaver now supports custom Reader & Writer for types in other assemblies.
- Added: Network Manager now has an optional setting to check for and disconnect remote connections that have gone silent for a specified interval.
- Added: Network Server and Network Client now have
ReplaceHandlermethods to avoid warnings when attempting to double register message handlers.
NetworkServer.SendToAllnow has an optional bool to only send to ready clients, and a
SendToReadymethod that doesn't require a Network Identity.
- Fixed: Network Animator no longer double-fires SetTrigger / ResetTrigger on the host client.
- Fixed: Network Animator is no longer limited to one component per object.
- Fixed: Destroy is no longer invoked twice on the server for the player object.
RegisterClientMessagesis no longer invoked twice on the client.
- Fixed: Network Behaviour
SyncIntervalwas not showing in the inspector in some cases.
- Fixed: Telepathy Transport -
LateUpdatenow processes a limited amount of messages per tick to avoid deadlocks.
- Changed: Network Behaviour:
OnNetworkDestroywas renamed to
- Breaking: RemovePlayerMessage has been removed as a potential security risk. Use
- Breaking: Network Behaviour:
OnSetHostVisibilitywere moved to a separate class called
- Added: SyncVar hooks can be virtual now, and overridden in a derived class.
- Added: Virtual
OnRoomStopServeradded to Network Room Manager and Script Template.
- Added: 10K Networked Objects Benchmark Example.
- Fixed: Setting breakpoints in an IDE for Command's and Rpc's work correctly now.
NetworkServer.SendToObserversnow reports correct channel to Mirror Profiler.
- Fixed: Network Room Manager's
protectedso it can be accessed in derived classes.
- Fixed: Network Room Player inspector and documentation updated to be less confusing.
- Fixed: Network Identity no longer double calls
- Fixed: Network Animator now correctly excludes parameters controlled by curves.
- Fixed: Network Behaviour now uses a property drawer for the SyncVar label so it displays better.
NetworkServer.SendToReadyoverloads are no longer ambiguous.
- Fixed: Network Room Manager no longer incorrectly destroys the game player object. It's left in the game scene to be cleaned up by Unity when the scene changes.
OnServerDisconnectin Network Manager, and correctly unwinds before shutting down the server.
isServeris no longer incorrectly false on server in Network Identity's
- Changed: Network Manager
onlineScenestore full paths now, so use SceneManager.GetActiveScene().path instead.
- Changed: Network Manager HUD now calls
- Changed: Network Manager HUD labels no longer say LAN. Associated docs also cleaned up to eliminate the misconception of Mirror being LAN only solution.
- Changed: Network Transform compression removed and message handling is much simpler now.
- Changed: Network Scene Checker initializes in Awake again because
OnEnableproved to be unreliable in some cases.
- Changed: Network Manager will no longer lose references to scenes if they aren't in the Build Settings scene list, however moving or renaming scenes may cause references to be lost.
- Removed: Many obsolete methods and properties. Use version 10 first if upgrading from UNet or older Mirror. See Deprecations for complete list.
- Added: Weaver will now block play mode and builds if there are weaver errors and show them in the console again.
PooledNetworkWriter, both Disposable.
- Added: Network Discovery now handles headless server mode.
- Added: SyncVar, Cmd's and Rpc's now support Scriptable Objects via CreateInstance on the receiving side.
- Added: Discord Transport Removed in v16.1.1
isClientnow returns true on clients in OnDestroy for networked objects.
- Fixed: Host Player race condition for Ready message.
- Fixed: Network Animator and Network Transform now correctly check for client authority in their respective Command methods.
- Fixed: Network Room Manager Script Template had a virtual method instead of an override.
- Fixed: Network Server's calls to NetworkConnectionToClient.Send now includes the channelId parameter that was missing.
- Fixed: Network Server's calls to SendToAll, SendToReady, and SendToObservers send to the exact connection if it is detected as local connection, instead of falling back to the .localConnection.
- Fixed: Network Server.SpawnObjects returns false if server isn't running.
- Fixed: Network Transform rotation detection improved.
- Fixed: Weaver generated code now builds properly for IL2CPP (again).
- Changed: StartHost in Network Manager is no longer a virtual method (and shouldn't have been). Override OnStartHost instead.
- Changed: Network Room Manager's OnRoomServerSceneLoadedForPlayer now includes NetworkConnection parameter.
- Changed: Network Scene Checker now works from OnEnable instead of Awake, and uses Scene instead of scene name.
- Changed: Renamed NeworkWriter.Write to WriteMessage for consistency.
- Added: Network Animator now has a ResetTrigger function and server / client authority warnings.
- Added: Network Transform now has 3 new floats for Sensitivity to quiet down message traffic from micro changes.
- Added: Network Observer added to Script Templates -- See the new Mirror section in the Assets > Create menu.
- Added: Network Discovery has been reimplemented including an example and script template -- thanks to all those who contributed!
- Added: Mirror Icon for all components.
- Added: Inspector Headers to Network Behaviour, Network Transform, and Network Animator.
- Added: URI added to supported data types.
NetworkReaderPoolhas been implemented in place of
new NetworkReadereverywhere, significantly reducing garbage allocation.
- Fixed: Network Transform and Network Animator now uses NetworkWriterPool.
- Fixed: Network Transform and Network Animator now respect
hasAuthorityfor client owned objects.
- Fixed: Network Transform will now correctly teleport if time / distance are too large.
- Fixed: Network Animator now correctly syncs when clientAuthority is false.
- Fixed: Client owned objects are now destroyed when client disconnects (regression).
- Fixed: Client authority is now preserved for networked objects carried through scene change in DontDestroyOnLoad (DDOL).
- Fixed: Starting server immediately after canceling client connection attempt no longer throws a NRE.
- Fixed: IL2CPP builds no longer trigger an assert when stopping server.
- Fixed: SyncVars are now set for Host player before hook is invoked.
- Fixed: SyncDictionary now correctly updates the value before invoking callbacks.
- Fixed: StopHost no longer tries to change to the Offline scene twice.
- Fixed: Network Room Manager roomSlots are now correctly managed on both server and clients.
- Fixed: Network Room Manager now correctly supports multiple GamePlay scenes and adds a virtual
- Fixed: Additive scene operations no longer incorrectly lead to extraneous AddPlayer messages from clients.
NetworkWriterPoolis now used everywhere instead of
new NetworkWriter(we missed a couple when the pool was implemented).
- Fixed: Patch for Unity 2019.3.x
RequestScriptReloadwas moved to EditorUtility from UnityEditorInternal.InternalEditorUtility.
- Fixed: Arrays of custom types are now correctly supported.
- Changed: Shutdown logic has been streamlined.
NetworkIdentity.GetSceneIdenitymethod renamed to
- Changed: OnApplicationQuit virtual method added to Transport class and
Transport.activeTransport.Shutdown()is no longer called from Network Manager.
- Breaking: SyncVar Hooks now require two parameters, one each for the old and new value, and the property value is now set before the hook is called.
- Added: Full Text Search added to docs.
- Added: Basic Chat example.
- Added: Some YouTube videos have been created and linked from various doc pages where appropriate.
- Added: Transports can now support using a URI for connection including port.
- Added: version.txt file is now included with the release version in it.
- Added: Structs that inherit from IMessageBase now generate serializers.
- Fixed: Components now appear in docs under API Reference.
- Fixed: Delayed disconnect in Basic Authenticator.
- Fixed: Multiplexer now handles OnClientConnect and GetMaxMessageSize correctly.
- Fixed: Network Room Manager OnRoomServerCreateGamePlayer now includes the Room Player Object as parameter.
- Changed: Room example now has Network Room Manager in the Offline scene and correctly switches to the Room scene when server / client is started.
- Changed: Network Manager startPositionIndex and loadingSceneAsync are now public.
- Changed: SceneMessage now has an optional customHandling flag so devs can handle their own custom scene loading, e.g. using Addressables.
- Breaking: Network Transform now defaults to server authority and has a Client Authority checkbox.