The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Additional documentation and release notes are available at [Multiplayer Documentation](https://docs-multiplayer.unity3d.com). ## [1.0.0-pre.4] - 2021-01-04 ### Added - Added `com.unity.modules.physics` and `com.unity.modules.physics2d` package dependencies (#1565) ### Removed - Removed `com.unity.modules.ai` package dependency (#1565) - Removed `FixedQueue`, `StreamExtensions`, `TypeExtensions` (#1398) ### Fixed - Fixed in-scene NetworkObjects that are moved into the DDOL scene not getting restored to their original active state (enabled/disabled) after a full scene transition (#1354) - Fixed invalid IL code being generated when using `this` instead of `this ref` for the FastBufferReader/FastBufferWriter parameter of an extension method. (#1393) - Fixed an issue where if you are running as a server (not host) the LoadEventCompleted and UnloadEventCompleted events would fire early by the NetworkSceneManager (#1379) - Fixed a runtime error when sending an array of an INetworkSerializable type that's implemented as a struct (#1402) - NetworkConfig will no longer throw an OverflowException in GetConfig() when ForceSamePrefabs is enabled and the number of prefabs causes the config blob size to exceed 1300 bytes. (#1385) - Fixed NetworkVariable not calling NetworkSerialize on INetworkSerializable types (#1383) - Fixed NullReferenceException on ImportReferences call in NetworkBehaviourILPP (#1434) - Fixed NetworkObjects not being despawned before they are destroyed during shutdown for client, host, and server instances. (#1390) - Fixed KeyNotFound exception when removing ownership of a newly spawned NetworkObject that is already owned by the server. (#1500) - Fixed NetworkManager.LocalClient not being set when starting as a host. (#1511) - Fixed a few memory leak cases when shutting down NetworkManager during Incoming Message Queue processing. (#1323) ### Changed - The SDK no longer limits message size to 64k. (The transport may still impose its own limits, but the SDK no longer does.) (#1384) - Updated com.unity.collections to 1.1.0 (#1451)
22 KiB
Changelog
All notable changes to this project will be documented in this file.
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.
[1.0.0-pre.4] - 2021-01-04
Added
- Added
com.unity.modules.physicsandcom.unity.modules.physics2dpackage dependencies (#1565)
Removed
- Removed
com.unity.modules.aipackage dependency (#1565) - Removed
FixedQueue,StreamExtensions,TypeExtensions(#1398)
Fixed
- Fixed in-scene NetworkObjects that are moved into the DDOL scene not getting restored to their original active state (enabled/disabled) after a full scene transition (#1354)
- Fixed invalid IL code being generated when using
thisinstead ofthis reffor the FastBufferReader/FastBufferWriter parameter of an extension method. (#1393) - Fixed an issue where if you are running as a server (not host) the LoadEventCompleted and UnloadEventCompleted events would fire early by the NetworkSceneManager (#1379)
- Fixed a runtime error when sending an array of an INetworkSerializable type that's implemented as a struct (#1402)
- NetworkConfig will no longer throw an OverflowException in GetConfig() when ForceSamePrefabs is enabled and the number of prefabs causes the config blob size to exceed 1300 bytes. (#1385)
- Fixed NetworkVariable not calling NetworkSerialize on INetworkSerializable types (#1383)
- Fixed NullReferenceException on ImportReferences call in NetworkBehaviourILPP (#1434)
- Fixed NetworkObjects not being despawned before they are destroyed during shutdown for client, host, and server instances. (#1390)
- Fixed KeyNotFound exception when removing ownership of a newly spawned NetworkObject that is already owned by the server. (#1500)
- Fixed NetworkManager.LocalClient not being set when starting as a host. (#1511)
- Fixed a few memory leak cases when shutting down NetworkManager during Incoming Message Queue processing. (#1323)
Changed
- The SDK no longer limits message size to 64k. (The transport may still impose its own limits, but the SDK no longer does.) (#1384)
- Updated com.unity.collections to 1.1.0 (#1451)
[1.0.0-pre.3] - 2021-10-22
Added
- ResetTrigger function to NetworkAnimator (#1327)
Fixed
- Overflow exception when syncing Animator state. (#1327)
- Added
try/catcharound RPC calls, preventing exception from causing further RPC calls to fail (#1329) - Fixed an issue where ServerClientId and LocalClientId could have the same value, causing potential confusion, and also fixed an issue with the UNet where the server could be identified with two different values, one of which might be the same as LocalClientId, and the other of which would not.(#1368)
- IL2CPP would not properly compile (#1359)
[1.0.0-pre.2] - 2021-10-19
Added
- Associated Known Issues for the 1.0.0-pre.1 release in the changelog
Changed
- Updated label for
1.0.0-pre.1changelog section
[1.0.0-pre.1] - 2021-10-19
Added
- Added
ClientNetworkTransformsample to the SDK package (#1168) - Added
Bootstrapsample to the SDK package (#1140) - Enhanced
NetworkSceneManagerimplementation with additive scene loading capabilities (#1080, #955, #913)NetworkSceneManager.OnSceneEventprovides improved scene event notificaitons
- Enhanced
NetworkTransformimplementation with per axis/component based and threshold based state replication (#1042, #1055, #1061, #1084, #1101) - Added a jitter-resistent
BufferedLinearInterpolator<T>forNetworkTransform(#1060) - Implemented
NetworkPrefabHandlerthat provides support for object pooling andNetworkPrefaboverrides (#1073, #1004, #977, #905,#749, #727) - Implemented auto
NetworkObjecttransform parent synchronization at runtime over the network (#855) - Adopted Unity C# Coding Standards in the codebase with
.editorconfigruleset (#666, #670) - When a client tries to spawn a
NetworkObjectan exception is thrown to indicate unsupported behavior. (#981) - Added a
NetworkTimeandNetworkTickSystemwhich allows for improved control over time and ticks. (#845) - Added a
OnNetworkDespawnfunction toNetworkObjectwhich gets called when aNetworkObjectgets despawned and can be overriden. (#865) - Added
SnapshotSystemthat would allow variables and spawn/despawn messages to be sent in blocks (#805, #852, #862, #963, #1012, #1013, #1021, #1040, #1062, #1064, #1083, #1091, #1111, #1129, #1166, #1192)- Disabled by default for now, except spawn/despawn messages
- Will leverage unreliable messages with eventual consistency
NetworkBehaviourandNetworkObject'sNetworkManagerinstances can now be overriden (#762)- Added metrics reporting for the new network profiler if the Multiplayer Tools package is present (#1104, #1089, #1096, #1086, #1072, #1058, #960, #897, #891, #878)
NetworkBehaviour.IsSpawneda quick (and stable) way to determine if the associated NetworkObject is spawned (#1190)- Added
NetworkRigidbodyandNetworkRigidbody2Dcomponents to support networkingRigidbodyandRigidbody2Dcomponents (#1202, #1175) - Added
NetworkObjectReferenceandNetworkBehaviourReferencestructs which allow to sendingNetworkObject/Behavioursover RPCs/NetworkVariables (#1173) - Added
NetworkAnimatorcomponent to support networkingAnimatorcomponent (#1281, #872)
Changed
- Bumped minimum Unity version, renamed package as "Unity Netcode for GameObjects", replaced
MLAPInamespace and its variants withUnity.Netcodenamespace and per asm-def variants (#1007, #1009, #1015, #1017, #1019, #1025, #1026, #1065)- Minimum Unity version:
- 2019.4 → 2020.3+
- Package rename:
- Display name:
MLAPI Networking Library→Netcode for GameObjects - Name:
com.unity.multiplayer.mlapi→com.unity.netcode.gameobjects - Updated package description
- Display name:
- All
MLAPI.xnamespaces are replaced withUnity.NetcodeMLAPI.Messaging→Unity.NetcodeMLAPI.Connection→Unity.NetcodeMLAPI.Logging→Unity.NetcodeMLAPI.SceneManagement→Unity.Netcode- and other
MLAPI.xvariants toUnity.Netcode
- All assembly definitions are renamed with
Unity.Netcode.xvariantsUnity.Multiplayer.MLAPI.Runtime→Unity.Netcode.RuntimeUnity.Multiplayer.MLAPI.Editor→Unity.Netcode.Editor- and other
Unity.Multiplayer.MLAPI.xvariants toUnity.Netcode.xvariants
- Minimum Unity version:
- Renamed
Prototypingnamespace and assembly definition toComponents(#1145) - Changed
NetworkObject.Despawn(bool destroy)API to default todestroy = truefor better usability (#1217) - Scene registration in
NetworkManageris now replaced by Build Setttings → Scenes in Build List (#1080) NetworkSceneManager.SwitchScenehas been replaced byNetworkSceneManager.LoadScene(#955)NetworkManager, NetworkConfig, and NetworkSceneManagerscene registration replaced with scenes in build list (#1080)GlobalObjectIdHashreplacedPrefabHashandPrefabHashGeneratorfor stability and consistency (#698)NetworkStarthas been renamed toOnNetworkSpawn. (#865)- Network variable cleanup - eliminated shared mode, variables are server-authoritative (#1059, #1074)
NetworkManagerand other systems are no longer singletons/statics (#696, #705, #706, #737, #738, #739, #746, #747, #763, #765, #766, #783, #784, #785, #786, #787, #788)- Changed
INetworkSerializable.NetworkSerializemethod signature to useBufferSerializer<T>instead ofNetworkSerializer(#1187) - Changed
CustomMessagingManager's methods to useFastBufferWriterandFastBufferReaderinstead ofStream(#1187) - Reduced internal runtime allocations by removing LINQ calls and replacing managed lists/arrays with native collections (#1196)
Removed
- Removed
NetworkNavMeshAgent(#1150) - Removed
NetworkDictionary,NetworkSet(#1149) - Removed
NetworkVariableSettings(#1097) - Removed predefined
NetworkVariable<T>types (#1093)- Removed
NetworkVariableBool,NetworkVariableByte,NetworkVariableSByte,NetworkVariableUShort,NetworkVariableShort,NetworkVariableUInt,NetworkVariableInt,NetworkVariableULong,NetworkVariableLong,NetworkVariableFloat,NetworkVariableDouble,NetworkVariableVector2,NetworkVariableVector3,NetworkVariableVector4,NetworkVariableColor,NetworkVariableColor32,NetworkVariableRay,NetworkVariableQuaternion
- Removed
- Removed
NetworkChannelandMultiplexTransportAdapter(#1133) - Removed ILPP backend for 2019.4, minimum required version is 2020.3+ (#895)
NetworkManager.NetworkConfighad the following properties removed: (#1080)- Scene Registrations no longer exists
- Allow Runtime Scene Changes was no longer needed and was removed
- Removed the NetworkObject.Spawn payload parameter (#1005)
- Removed
ProfilerCounter, the original MLAPI network profiler, and the built-in network profiler module (2020.3). A replacement can now be found in the Multiplayer Tools package. (#1048) - Removed UNet RelayTransport and related relay functionality in UNetTransport (#1081)
- Removed
UpdateStageparameter fromServerRpcSendParamsandClientRpcSendParams(#1187) - Removed
NetworkBuffer,NetworkWriter,NetworkReader,NetworkSerializer,PooledNetworkBuffer,PooledNetworkWriter, andPooledNetworkReader(#1187) - Removed
EnableNetworkVariableinNetworkConfig, it is always enabled now (#1179) - Removed
NetworkTransform's FixedSendsPerSecond, AssumeSyncedSends, InterpolateServer, ExtrapolatePosition, MaxSendsToExtrapolate, Channel, EnableNonProvokedResendChecks, DistanceSendrate (#1060) (#826) (#1042, #1055, #1061, #1084, #1101) - Removed
NetworkManager'sStopServer(),StopClient()andStopHost()methods and replaced with singleNetworkManager.Shutdown()method for all (#1108)
Fixed
- Fixed ServerRpc ownership check to
Debug.LogErrorinstead ofDebug.LogWarning(#1126) - Fixed
NetworkObject.OwnerClientIdproperty changing beforeNetworkBehaviour.OnGainedOwnership()callback (#1092) - Fixed
NetworkBehaviourILPPto iterate over all types in an assembly (#803) - Fixed cross-asmdef RPC ILPP by importing types into external assemblies (#678)
- Fixed
NetworkManagershutdown when quitting the application or switching scenes (#1011)- Now
NetworkManagershutdowns correctly and despawns existingNetworkObjects
- Now
- Fixed Only one
PlayerPrefabcan be selected onNetworkManagerinspector UI in the editor (#676) - Fixed connection approval not being triggered for host (#675)
- Fixed various situations where messages could be processed in an invalid order, resulting in errors (#948, #1187, #1218)
- Fixed
NetworkVariables being default-initialized on the client instead of being initialized with the desired value (#1266) - Improved runtime performance and reduced GC pressure (#1187)
- Fixed #915 - clients are receiving data from objects not visible to them (#1099)
- Fixed
NetworkTransform's "late join" issues,NetworkTransformnow usesNetworkVariables instead of RPCs (#826) - Throw an exception for silent failure when a client tries to get another player's
PlayerObject, it is now only allowed on the server-side (#844)
Known Issues
NetworkVariabledoes not serializeINetworkSerializabletypes through theirNetworkSerializeimplementationNetworkObjectsmarked asDontDestroyOnLoadare disabled during some network scene transitionsNetworkTransforminterpolates from the origin when switching Local Space synchronization- Exceptions thrown in
OnNetworkSpawnuser code for an object will prevent the callback in other objects - Cannot send an array of
INetworkSerializablein RPCs - ILPP generation fails with special characters in project path
[0.2.0] - 2021-06-03
WIP version increment to pass package validation checks. Changelog & final version number TBD.
[0.1.1] - 2021-06-01
This is hotfix v0.1.1 for the initial experimental Unity MLAPI Package.
Changed
- Fixed issue with the Unity Registry package version missing some fixes from the v0.1.0 release.
[0.1.0] - 2021-03-23
This is the initial experimental Unity MLAPI Package, v0.1.0.
Added
- Refactored a new standard for Remote Procedure Call (RPC) in MLAPI which provides increased performance, significantly reduced boilerplate code, and extensibility for future-proofed code. MLAPI RPC includes
ServerRpcandClientRpcto execute logic on the server and client-side. This provides a single performant unified RPC solution, replacing MLAPI Convenience and Performance RPC (see here). - Added standarized serialization types, including built-in and custom serialization flows. See RFC #2 for details.
INetworkSerializableinterface replacesIBitWritable.- Added
NetworkSerializer..., which is the main aggregator that implements serialization code for built-in supported types and holdsNetworkReaderandNetworkWriterinstances internally. - Added a Network Update Loop infrastructure that aids Netcode systems to update (such as RPC queue and transport) outside of the standard
MonoBehaviourevent cycle. See RFC #8 and the following details:- It uses Unity's low-level Player Loop API and allows for registering
INetworkUpdateSystems withNetworkUpdatemethods to be executed at specificNetworkUpdateStages, which may also be before or afterMonoBehaviour-driven game logic execution. - You will typically interact with
NetworkUpdateLoopfor registration andINetworkUpdateSystemfor implementation. NetworkVariables are now tick-based using theNetworkTickSystem, tracking time through network interactions and syncs.
- It uses Unity's low-level Player Loop API and allows for registering
- Added message batching to handle consecutive RPC requests sent to the same client.
RpcBatchersends batches based on requests from theRpcQueueProcessing, by batch size threshold or immediately. - GitHub 494: Added a constraint to allow one
NetworkObjectperGameObject, set through theDisallowMultipleComponentattribute. - Integrated MLAPI with the Unity Profiler for versions 2020.2 and later:
- Added new profiler modules for MLAPI that report important network data.
- Attached the profiler to a remote player to view network data over the wire.
- A test project is available for building and experimenting with MLAPI features. This project is available in the MLAPI GitHub testproject folder.
- Added a MLAPI Community Contributions new GitHub repository to accept extensions from the MLAPI community. Current extensions include moved MLAPI features for lag compensation (useful for Server Authoritative actions) and
TrackedObject.
Changed
- GitHub 520: MLAPI now uses the Unity Package Manager for installation management.
- Added functionality and usability to
NetworkVariable, previously calledNetworkVar. Updates enhance options and fully replace the need forSyncedVars. - GitHub 507: Reimplemented
NetworkAnimator, which synchronizes animation states for networked objects. - GitHub 444 and 455: Channels are now represented as bytes instead of strings.
For users of previous versions of MLAPI, this release renames APIs due to refactoring. All obsolete marked APIs have been removed as per GitHub 513 and GitHub 514.
| Previous MLAPI Versions | V 0.1.0 Name |
|---|---|
NetworkingManager |
NetworkManager |
NetworkedObject |
NetworkObject |
NetworkedBehaviour |
NetworkBehaviour |
NetworkedClient |
NetworkClient |
NetworkedPrefab |
NetworkPrefab |
NetworkedVar |
NetworkVariable |
NetworkedTransform |
NetworkTransform |
NetworkedAnimator |
NetworkAnimator |
NetworkedAnimatorEditor |
NetworkAnimatorEditor |
NetworkedNavMeshAgent |
NetworkNavMeshAgent |
SpawnManager |
NetworkSpawnManager |
BitStream |
NetworkBuffer |
BitReader |
NetworkReader |
BitWriter |
NetworkWriter |
NetEventType |
NetworkEventType |
ChannelType |
NetworkDelivery |
Channel |
NetworkChannel |
Transport |
NetworkTransport |
NetworkedDictionary |
NetworkDictionary |
NetworkedList |
NetworkList |
NetworkedSet |
NetworkSet |
MLAPIConstants |
NetworkConstants |
UnetTransport |
UNetTransport |
Fixed
- GitHub 460: Fixed an issue for RPC where the host-server was not receiving RPCs from the host-client and vice versa without the loopback flag set in
NetworkingManager. - Fixed an issue where data in the Profiler was incorrectly aggregated and drawn, which caused the profiler data to increment indefinitely instead of resetting each frame.
- Fixed an issue the client soft-synced causing PlayMode client-only scene transition issues, caused when running the client in the editor and the host as a release build. Users may have encountered a soft sync of
NetworkedInstanceIdissues in theSpawnManager.ClientCollectSoftSyncSceneObjectSweepmethod. - GitHub 458: Fixed serialization issues in
NetworkListandNetworkDictionarywhen running in Server mode. - GitHub 498: Fixed numerical precision issues to prevent not a number (NaN) quaternions.
- GitHub 438: Fixed booleans by reaching or writing bytes instead of bits.
- GitHub 519: Fixed an issue where calling
Shutdown()before makingNetworkManager.Singleton = nullis null onNetworkManager.OnDestroy().
Removed
With a new release of MLAPI in Unity, some features have been removed:
- SyncVars have been removed from MLAPI. Use
NetworkVariables in place of this functionality. - GitHub 527: Lag compensation systems and
TrackedObjecthave moved to the new MLAPI Community Contributions repo. - GitHub 509: Encryption has been removed from MLAPI. The
Encryptionoption inNetworkConfigon theNetworkingManageris not available in this release. This change will not block game creation or running. A current replacement for this functionality is not available, and may be developed in future releases. See the following changes:- Removed
SecuritySendFlagsfrom all APIs. - Removed encryption, cryptography, and certificate configurations from APIs including
NetworkManagerandNetworkConfig. - Removed "hail handshake", including
NetworkManagerimplementation andNetworkConstantsentries. - Modified
RpcQueueandRpcBatcherinternals to remove encryption and authentication from reading and writing.
- Removed
- Removed the previous MLAPI Profiler editor window from Unity versions 2020.2 and later.
- Removed previous MLAPI Convenience and Performance RPC APIs with the new standard RPC API. See RFC #1 for details.
- GitHub 520: Removed the MLAPI Installer.
Known Issues
NetworkNavMeshAgentdoes not synchronize mesh data, Agent Size, Steering, Obstacle Avoidance, or Path Finding settings. It only synchronizes the destination and velocity, not the path to the destination.- For
RPC, methods with aClientRpcorServerRpcsuffix which are not marked with [ServerRpc] or [ClientRpc] will cause a compiler error. - For
NetworkAnimator, Animator Overrides are not supported. Triggers do not work. - For
NetworkVariable, theNetworkDictionaryListandSetmust use thereliableSequencedchannel. NetworkObjectss are supported but when spawning a prefab with nested child network objects you have to manually call spawn on themNetworkTransformhave the following issues:- Replicated objects may have jitter.
- The owner is always authoritative about the object's position.
- Scale is not synchronized.
- Connection Approval is not called on the host client.
- For
NamedMessages, always useNetworkBufferas the underlying stream for sending named and unnamed messages. - For
NetworkManager, connection management is limited. UseIsServer,IsClient,IsConnectedClient, or other code to check if MLAPI connected correctly.
[0.0.1-preview.1] - 2020-12-20
This was an internally-only-used version of the Unity MLAPI Package