2.3.0
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Additional documentation and release notes are available at Multiplayer Documentation.
[2.3.0] - 2025-04-09
Added
- Added
NetworkManager.OnPreShutdownwhich is called before the NetworkManager cleans up and shuts down. (#3366) - Added
Lerpinterpolation type that still uses a lerp approach but uses the new buffer consumption logic. (#3355) - Added property to enable or disable lerp smoothing for position, rotation, and scale interpolators. (#3355)
- Added
NetworkTransform.InterpolationBufferTickOffsetstatic property to provide users with a way to increase or decrease the time marker where interpolators will pull state update from the queue. (#3355) - Added interpolator types as an inspector view selection for position, rotation, and scale. (#3337)
- Added a new smooth dampening interpolator type that provides a nice balance between precision and smoothing results. (#3337)
- Added
NetworkTimeSystem.TickLatencyproperty that provides the average latency of a client. (#3337) - Added
FastBufferReader(ArraySegment<byte> buffer, Allocator copyAllocator)constructor that uses theArraySegment.Offsetas theFastBufferReaderoffset and theArraySegment.Countas theFastBufferReaderlength. (#3321) - Added
FastBufferReader(ArraySegment<byte> buffer, Allocator copyAllocator, int length = -1)constructor that uses theArraySegment.Offsetas theFastBufferReaderoffset. (#3321)
Fixed
- Fixed issue where in-scene placed
NetworkObjectscould fail to synchronize its transform properly (especially without aNetworkTransform) if their parenting changes from the default when the scene is loaded and if the same scene remains loaded between network sessions while the parenting is completely different from the original hierarchy. (#3387) - Fixed an issue in
UnityTransportwhere the transport would accept sends on invalid connections, leading to a useless memory allocation and confusing error message. (#3382) - Fixed issue where the time delta that interpolators used would not be properly updated during multiple fixed update invocations within the same player loop frame. (#3355)
- Fixed issue when using a distributed authority network topology and many clients attempt to connect simultaneously the session owner could max-out the maximum in-flight reliable messages allowed, start dropping packets, and some of the connecting clients would fail to fully synchronize. (#3350)
- Fixed issue when using a distributed authority network topology and scene management was disabled clients would not be able to spawn any new network prefab instances until synchronization was complete. (#3350)
- Fixed issue where an owner that changes ownership, when using a distributed authority network topology, could yield identical previous and current owner identifiers. This could also cause
NetworkTransformto fail to change ownership which would leave the previous owner still subscribed to network tick events. (#3347) - Fixed issue where the
MaximumInterpolationTimecould not be modified from within the inspector view or runtime. (#3337) - Fixed
ChangeOwnershipchanging ownership to clients that are not observers. This also happened with automated object distribution. (#3323) - Fixed issue where
AnticipatedNetworkVariableprevious value returned byAnticipatedNetworkVariable.OnAuthoritativeValueChangedis updated correctly on the non-authoritative side. (#3306) - Fixed
OnClientConnectedCallbackpassing incorrectclientIdwhen scene management is disabled. (#3312) - Fixed issue where the
NetworkObject.Ownershipcustom editor did not take the default "Everything" flag into consideration. (#3305) - Fixed DestroyObject flow on non-authority game clients. (#3291)
- Fixed exception being thrown when a
GameObjectwith an associatedNetworkTransformis disabled. (#3243) - Fixed issue where the scene migration synchronization table was not cleaned up if the
GameObjectof aNetworkObjectis destroyed before it should have been. (#3230) - Fixed issue where the scene migration synchronization table was not cleaned up upon
NetworkManagershutting down. (#3230) - Fixed
NetworkObject.DeferDespawnto respect theDestroyGameObjectparameter. (#3219) - Fixed issue where a
NetworkObjectwith nestedNetworkTransformcomponents of varying authority modes was not being taken into consideration and would break both the initialNetworkTransformsynchronization and fail to properly handle synchronized state updates of the nestedNetworkTransformcomponents. (#3209) - Fixed issue with distributing parented children that have the distributable and/or transferrable permissions set and have the same owner as the root parent, that has the distributable permission set, were not being distributed to the same client upon the owning client disconnecting when using a distributed authority network topology. (#3203)
- Fixed issue where a spawned
NetworkObjectthat was registered with a prefab handler and owned by a client would invoke destroy more than once on the host-server side if the client disconnected while theNetworkObjectwas still spawned. (#3200) - Fixed issue where
NetworkVariableBasederived classes were not being re-initialized if the associatedNetworkObjectinstance was not destroyed and re-spawned. (#3181)
Changed
- Changed the scene loading event serialization order for in-scene placed
NetworkObjects to be based on their parent-child hierarchy. (#3387) - Changed the original
Lerpinterpolation type toLegacyLerp. (#3355) - Changed
BufferedLinearInterpolator<T>.Update(float deltaTime, NetworkTime serverTime)as being deprecated since this method is only used for internal testing purposes. (#3337) - Changed error thrown when attempting to build a dedicated server with Unity Transport that uses websockets to provide more useful information to the user. (#3336)
- Changed root in-scene placed
NetworkObjectinstances now will always have either theDistributablepermission set unless theSessionOwnerpermission is set. (#3305) - Changed the
DestroyObjectmessage to reduce the serialized message size and remove the unnecessary message field. (#3304) - Changed the
NetworkTimeSystem.Syncmethod to use half RTT to calculate the desired local time offset as opposed to the full RTT. (#3212)