The Unity Transport
com.unity.transport package respository adds multiplayer and network features to your project. See the following changelog for new features, updates, fixes, and upgrade information.
- Added new 'Max Send Queue Size' configuration field in the inspector. This controls the size of the send queue that is used to accumulate small sends together and also acts as an overflow queue when there are too many in-flight packets or when other internal queues are full. #1491
- Updated Netcode for GameObjects dependency to 1.0.0-pre.4 #1562
- Removed 'Maximum Packet Size' configuration field in the inspector. This would cause confusion since the maximum packet size is in effect always the MTU (1400 bytes on most platforms). #1403
- Updated com.unity.transport to 1.0.0-pre.10 #1501
- The 'Send Queue Batch Size' configuration field now controls the size of the send queue, rather than the size of a single batch of messages. Consequently, it should be set much higher than it was previously. #1491
- All delivery methods now support fragmentation, meaning the 'Send Queue Batch Size' setting (which controls the maximum payload size) now applies to all delivery methods, not just reliable ones. #1512
- Fixed packet overflow errors when sending payloads too close to the MTU (was mostly visible when using Relay). #1403
- Don't throw an exception when the host disconnects (issue 1439 on GitHub). #1441
- Avoid "too many inflight packets" errors by queueing packets in a queue when the limit of inflight packets is reached in UTP. The size of this queue can be controlled with the 'Max Send Queue Size' configuration field. #1491
- Added support for long serialization and delta compression.
- Upgraded collections to 1.0.0.
- Support for Unity Relay #887
- New SetConnectionData function that takes in a NetworkEndpoint
- Minimum required Unity version has changed to 2020.3.0f1.
- No longer use coroutines when connecting to relay
- Consolidated the Send/Recv queue properties as they always needed to be the same.
- Consolidated the Fragmentation/Queue size as they always needed to be the same.
- Updated Unity Transport package to 1.0.0-pre.6
- Fixed an issue where OnClientDisconnectCallback was not being called #1243
- Flush the UnityTransport send queue on shutdown #1234
- Exposed a way to set ip and port from code #1208
- Possible Editor crash when trying to read a batched packet where the size of the packet was larger than the max packet size.
- Removed the requirement that MaxPacketSize needs to be the same size as the batched/fragmentation buffer size.
- Added overloads of
PopEventForConnectionwhich return the pipeline used as an out parameter.
- Fixed some compatility issues with tiny.
- Fixed a crash when sending messages slightly less than one MTU using the fragmentation pipeline.
- Fixed a bug causing
NetworkDriver.RemoteEndPointto return an invalid value when using the default network interface.
DataStreamWriter.ReadRawBitsfor reading and writing raw bits from a data stream.
- Optimized the
NetworkCompressionModelto find buckets in constant time.
- Changed the error behavior of
DataStreamReaderto be consistent between the editor and players.
- Fixed a crash when receiving a packet with an invalid pipeline identifier.
- An error handling pass has been made and
Error.StatusCodehave been added to indicate more specific errors.
Error.DisconnectReasonhas been added, so when NetworkDriver.PopEvent returns a
NetworkEvent.Type.Disconnectthe reader returned contains 1 byte of data indicating the reason.
- The function signature for NetworkDriver.BeginSend has changed. It now returns an
intvalue indicating if the function succeeded or not and the DataStreamWriter now instead is returned as a
- The function signature for
INetworkInterface.Initializehas changed. It now requires you to return an
intvalue indicating if the function succeeded or not.
- The function signature for
INetworkInterface.CreateInterfaceEndPointhas changed. It now requires you to return an
intvalue indicating if the function succeeded or not, and NetworkInterfaceEndPoint is now returned as a
- Fixed a potential crash when receiving a malformated packet.
- Fixed an issue where the DataStream could sometimes fail writing packet uints before the buffer was full.
NetworkDriver.BeginSendnow returns an
Error.StatusCode, and the
DataStreamWriteris passed as an
- Fixed display of ipv6 addresses as strings.
NetworkDriver.GetEventQueueSizeForConnectionwhich allows you to check how many pending events a connection has.
- Fixed a compatibility isue with DOTS Runtime.
- Added a new fragmentation pipeline which allows you to send messages larger than one MTU. If the
FragmentationPipelineStageis part of the pipeline you are trying to send with the
NetworkDriverwill allow a
requiredPayloadSizelarger than one MTU to be specified and split the message into multiple packages.
- The methods to read and write strings in the
DataStreamWriterhave been changed to use
NativeString<N>. The name of the methods have also changed from
ReadFixedString64- and similar changes for write and the packed version of the calls. The calls support
- Minimum required Unity version has changed to 2020.1.2.
The data stream methods for reading and writing strings have changed, they now take
FixedString64 instead of
NativeString64 and the names have changed as follows:
The transport now requires Unity 2020.1.2.
- Added a new
BeginSend. The required size cannot be larger than
- Added errorcode parameter to a
- Additional APIs added to
- Fixed an issue in the reliable pipeline which would cause it to not recover if one end did not receive packages for a while.
- Fixed invalid use of strings when specifying the size of socket buffers in the native bindings
- Pipelines are now registered by calling
NetworkPipelineStageCollection.RegisterPipelineStagebefore creating a
NetworkDriver. The built-in pipelines do not require explicit registration. The interface for implementing pipelines has been changed to support this.
- NetworkDriver is no longer a generic type. You pass it an interface when creating the
NetworkDriver, which means you can switch between backends without modifying all usage of the driver. There is a new
NetworkDriver.Createwhich creates a driver with the default
NetworkInterface. It is also possible to create a
new NetworkDriverby passing a
NetworkInterfaceinstance as the first argument.
NetworkDriver.Sendis replaced by
EndSend. This allows us to do less data copying when sending messages. The interface for implementing new network interfaces has been changed to support this.
DataStreamWriterno longer owns any memory. They are just reading/writing the data of a
DataStreamWriterhas explicit types for all Write methods.
DataStreamReader.Contexthas been removed.
- Error handling for
DataStreamWriterhas been improved, on failure it returns false and sets
DataStreamReaderreturns a default value and sets
DataStreamReaderwill throw an exception instead of returning a default value in the editor.
- IPCManager is no longer public, it is still possible to create a
NetworkDriver.ScheduleFlushSendwhich must be called to guarantee that messages are send before next call to
NetworkDriver.LastUpdateTimeto get the update time the
NetworkDriverused for the most recent update.
- Removed the IPC address family, use a IPv4 localhost address instead.
- Fixed a memory overflow in the reliability pipeline.
- Made the soaker report locale independent.
Creation and type of
NetworkDriver has changed, use
NetworkDriver.Create or pass an instance of a
NetworkInterface to the
NetworkDriver.Send has been replaced by a pair of
BeginSend will return a
DataStreamWriter to which you write the data. The
DataStreamWriter is then passed to
All write calls in
DataStreamWriter need an explicit type, for example
Write(0) should be replaced by
DataStreamWriter no longer shares current position between copies, if you call a method which writes you must pass it by ref for the modifications to apply.
DataStreamWriter no longer returns a DeferedWriter, you need to take a copy of the writer at the point you want to make modifications and use the copy to overwrite data later.
DataStreamWriter is no longer disposable. If you use the allocating constructor you need to use
Allocator.Temp, if you pass a
NativeArray<byte> to the constructor the
NativeArray owns the memory.
DataStreamReader.Context no longer exists, you need to pass the
DataStreamReader itself by ref if you read in a different function.
The interface for network pipelines has been changed.
The interface for network interfaces has been changed.
- Added reading and write methods for NativeString64 to DataStream.
- Added a stress test for parallel sending of data.
- Upgraded collections to 0.3.0.
- Fixed a race condition in IPCNetworkInterface.
- Changed NetworkEventQueue to use UnsafeList to get some type safety.
- Fixed an out-of-bounds access in the reliable sequenced pipeline.
- Fixed spelling and broken links in the documentation.
- Added missing bindings for Linux and Android
- Added support for unquantized floats to
NetworkConfigParameter.maxFrameTimeMSso you to allow longer frame times when debugging to prevent disconnections due to timeout.
- Allow "18.104.22.168:1234" strings when parsing the IP string in the NetworkEndPoint class, it will use the port part when it is present.
- Reliable pipeline now does not require parameters passed in (uses default window size of 32).
- Added Read/Write of ulong to
- Made it possible to get connection state from the parallel NetworkDriver.
- Do not push data events to disconnected connections. Fixes an error about resetting the queue with pending messages
- Made the endian checks in
DataStreamcompatible with latest version of burst.
Added a new Ping-Multiplay sample based on the Ping sample.
- Created to be the main sample for demonstrating Multiplay compatibility and best practices (SQP usage, IP binding, etc.).
- Contains both client and server code. Additional details in readme in
DedicatedServerConfig: Added arguments for
NetworkEndPoint: Added a
TryParse()method which returns false if parsing fails.
Parse()method returns a default IP / Endpoint if parsing fails, but a method that could report failure was needed for the Multiplay sample.
- Added a
HasArgument()method which returns true if an argument is present.
- Added a
PrintArgsToLog()method which is a simple way to print launch args to logs.
- Added a
TryUpdateVariableWithArgValue()method which updates a ref var only if an arg was found and successfully parsed.
- Added a
Deleted existing SQP code and added reference to SQP Package (now in staging).
Removed SQP server usage from basic Ping sample.
The SQP server was only needed for Multiplay compatibility, so the addition of Ping-Multiplay allowed us to remove SQP from Ping.
- DedicatedServerConfig: Vsync is now disabled programmatically if requesting an FPS different from the current screen refresh rate.
- Moved MatchMaking to a package and supporting code to a separate folder.
- Fixed an issue with the reliable pipeline not resending when completely idle.
- Added network pipelines to enable processing of outgoing and incomming packets. The available pipeline stages are
ReliableSequencedPipelineStagefor reliable UDP messages and
SimulatorPipelineStagefor emulating network conditions such as high latency and packet loss. See the pipeline documentation for more information.
- Added reading and writing of packed signed and unsigned integers to
DataStream. These new methods use huffman encoding to reduce the size of transfered data for small numbers.
- Enable Burst compilation for most jobs.
- Made it possible to get the remote endpoint for a connection.
- Replacing EndPoint parsing with custom code to avoid having a dependency on System.Net.
- Change the ping sample command-line parameters for server to
- For matchmaking, use an Assignment object containing the
Roster, and an
AssignmentErrorstring instead of just the
- Fixed an issue with building iOS on Windows.
- Fixed inconsistent error handling between platforms when the network buffer is full.
Unity 2019.1 is now required.
BasicNetworkDriver has been renamed to
GenericNetworkDriver and a new
UdpNetworkDriver helper class is also available.
System.Net EndPoints can no longer be used as addresses, use the new NetworkEndpoint struct instead.