Changelog

V1.44 [2022-07-05]

  • fix: Benchmark movement destinations set around start, not around position. prevents them from stopping to move because of the wander off protection.

  • Upgraded to Unity 2021.3.4

  • Upgraded to DOTS 0.51

V1.43 [2022-03-30]

  • breaking: upgraded to DOTS 0.50, Unity 2020.3.30, Scriptable Render Pipeline (URP)

  • breaking: FlatByteArrays functions moved to Utils

  • GUIConsole: now shows for warnings too

  • PrefabSystem moved into InitializationSystemGroup. no need to show it in SimulationSystemGroup next to regularly updated systems, as it's just distracting

  • DependencyInjectionSystem moved into InitializationSystemGroup. no need to show it in SimulationSystemGroup next to regularly updated systems, as it's just distracting

  • NetworkComponentSerializers moved into LateSimulationSystemGroup next to NetworkServer/NetworkClientSystem, because it's explicitly updated from those.

V1.42 [2022-01-28]

  • fix: ConvertTo.ToInt32 changed to ToInt64 to still support entities far from origin https://github.com/vis2k/DOTSNET/issues/59

V1.41

  • Upgraded to Unity 2021.2.8 for Apple Silicon support

  • fix: kcp2k V1.17

    • MaxRetransmit aka dead_link is now configurable. fixes issues where dead_link may have been too low causing premature disconnects. Default is now '40' instead of Kcp.DEAD_LINK '20'.

    • dead_link disconnect message improved to show exact retransmit count

    • perf: server/client MaximizeSendReceiveBuffersToOSLimit option to set send/recv buffer sizes to OS limit. avoids drops due to small buffers under heavy load.

    • fix: SendUnreliable respects ArraySegment.Offset

    • fix: potential bug with negative length (see PR #2)

    • breaking: removed pause handling because it's not necessary for Mirror anymore

  • DeltaCompression: MaxOverhead/MaxPatchSize renamed

  • fix: Write/ReadBlittable throwing NullReferenceException in some rare android systems which don't support (T) unaligned reads/writes

V1.39 [2021-12-03]

  • fix: kcp2k V1.14

    • fix: perf: uncork max message size from 144 KB to as much as we want based on receive window size. fixes https://github.com/vis2k/kcp2k/issues/22 fixes https://github.com/skywind3000/kcp/pull/291

    • feature: OnData now includes channel it was received on

    • fix: Send() now throws an exception for messages which require > 255 fragments

    • fix: ReliableMaxMessageSize is now limited to messages which require <= 255 fragments

  • fix: Delta Snapshots don't use quaternion smallest-three compression anymore. fixes #57

  • fix: #28 - client now properly destroys NetworkIdentities with LinkedEntityGroup too

  • fix: NetworkClient.OnTransportData now rejects messages while disconnected. this previously could cause odd situations in tests.

  • fix: #53 involuntary client disconnect now clears .spawned too

  • packages: Burst updated to 1.6.3

V1.38 [2021-11-26]

  • feature: NativeHashMap.SortKeys extension & tests

  • feature: Utils.Partition to partition NativeHashMap last/current into added/kept/removed

  • feature: Utils.max3

  • fix: NativeSliceToArraySegment / ArraySegmentToNativeSlice unsafe memcpy could write into random memory if segment/slice was larger than buffer size. Added a test to prevent it from ever happening again.

  • fix: TransportSystem creates NativeSlice to ArraySegment conversion buffers in OnStartRunning instead of OnCreate. fixes a bug where a custom message size > default would cause errors because the buffers were initialized with the default in OnCreate, before the custom was set later from authoring Awake.

  • fix: Telepathy transport send rate now shows in NetworkStatistics GUI

V1.37 [2021-11-23]

  • fix: DeltaCompression.Decompress() only reads up to the comparing block's length, instead of reading up to 'blockSize' if 'patch' still had more data.

    => added a test to guarantee it never happens again.

  • feature: NetworkReader/Writer VarInt extensions (useful for delta compression)

  • perf: delta snapshots metadata per entity reduced from 1 byte 'bool delta' per entity to 8 bytes per WorldMessage in total.

    => Reduces Benchmark bandwidth for non moving monsters at radius=30 from 303 KB/s => 275 KB/s (10%)

    => a lot more compression optimizations are coming soon!

V1.36 [2021-11-21]

  • perf: Delta Snapshots & Delta Compression

  • feature: NetworkReader/Writer FixedList<T> support

V1.35 [2021-10-31]

  • Happy halloween!

  • perf: Server/Client: Send split into RawSend(NativeSlice) and Send so we can serialize large messages with burst if necessary.

  • breaking: BitReader/Writer replaced with NetworkReader/Writer (byte level) to prepare for Delta Compression. It's faster and easier to use as well (no more .BitPosition).

    • Make sure to pass NetworkReader/Writer instead of BitReader/Writer to your NetworkMessage/NetworkComponent OnSerialize functions everywhere!

  • feature: Writer WriteBytes(NativeSlice) for burst support

  • feature: Reader ReadBytes(byte*) for burst support

  • perf: NetworkMessages can now optionally be serialized & deserialized with burst to prepare for huge WorldState messages for Delta Snapshots

    • feature: PackMessageHeader() we can pack a NetworkMessage with burst

    • perf: Server/Client RegisterHandler can now pass a custom deserializer for burst support

    • feature: NetworkServer/ClientMessageSystem: virtual MessageDeserializer() that can be overwritten to explicitly deserialize with burst

  • perf: SnapshotServerMessageSystem changed from iterating all Entities.ForEach to a bursted .spawned lookup. Significantly faster with large amounts of entities (1 million monsters: 5-14 ms => 3-8 ms)

  • perf: SnapshotServer/ClientMessageSystem: use messages.IsEmpty instead of messages.Count()

  • fix: NetworkServer OnTransportDisconnected only runs disconnect code if the connection still exists

  • feature: NativeHashMap.CopyTo extension

  • feature: Utils.QuaternionAngle until DOTS quaternion has .Angle() function

  • feature: FlatByteArrays.CompareBytes16 nonalloc

  • feature: NativeSlice ToContentString() Extension like BitConverter.GetString()

V1.34 [2021-10-16]

  • feature: NativeMultiMap.ContainsKeyAndValue extension

  • perf: ConnectionState.owned moved to NetworkServerSystem.ownedPerConnection as NativeMultiHashMap which can be used within burst

  • perf: DistanceInterestManagement.RebuildObservers: parsing connections is now bursted thanks to server.ownedPerConnection being a native collection

  • perf: NetworkClient/ServerSystem.spawned changed from Dictionary to NativeHashMap so we can use it in burst

  • feature: NetworkClient/ServerSystem.RegisterHandler custom allocator for reusable messages to prepare for large WorldState etc.

  • feature: NetworkClient/ServerMessageSystem provides virtual MessageAllocator that can be overwritten to reuse large messages

  • perf: FlatByteArrays BytesToArray functions now use memcpy for up to 10x performance improvement

  • perf: FlatByteArrays ArrayToBytes functions now use memcpy for up to 10x performance improvement

  • Transport.GetMaxPacketSize Channel parameter added to increase kcp reliable channel max message size from 1200 bytes to 140 KB

  • removed Batching: won't be necessary with Delta Snapshots, and it allocated by boxing NetworkMessages anyway

  • feature: ConnectionState.mainPlayer for convenience, set by JoinWorld

  • feature: NetworkServerSystem.GetMainPlayerPosition(connectionId) for convenience

  • perf: MonsterMovementSystem now runs via ScheduleParallel() for significant performance improvement when scaling to 500k+ entities

  • perf: BitWriter.WriteBytes16 improved. runs twice as fast now.

  • perf: BitReader.ReadBytes16 improved. runs 25% faster.

  • fix: NetworkServerSystem OnTransportConnect/Data/Disconnect callbacks now check if server is active. fixes a bug where Transport Update would be called just after stopping, then NRE would be thrown because OnTransportDisconnect would still try to remove from connections which is already null.

  • fix: StopServer() now clears ownedPerConnection to fix a bug where StartServer()->ConnectClient()->StopServer()->StartServer would throw an exception about old entities

  • perf: BitReader/Writer now use NativeArray/NativeSlice instead of byte[] and ArraySegment to be burstable. Transport OnData() now uses NativeSlice too.

V1.33 [2021-10-05]

  • breaking: NetworkMessage messageId size increased to 2 bytes

  • feature: NetworkMessageMeta.GetId<T> for automated message ids

  • perf: NetworkMessage.De/Serialize parameter changed from IBitReader/Writer to BitReader/Writer to avoid runtime allocations when casting to interfaces

  • perf: Batching now always flushes at the end of the frame in order to minimize latency

  • breaking: removed libuv & LiteNetLib. use kcp/Telepathy instead, which are both stable & fast enough for DOTSNET

  • Transports: initialization moved to Start()/Connect()

  • kcp2k updated to V1.12

  • Network Loop: Process Incoming -> Update World -> Process Outgoing

    • adjusted Transports for Early / LateUpdate

    • adjusted NetworkServer/ClientSystem update order

    • adjusted Interest Management update order

    • added LateSimulationGroups

V1.32 [2021-09-27]

  • fix: Quaternion Compression LargestAbsoluteComponentIndex wrong largest initialization

  • packages: updated to Burst 1.6.0 for apple silicon support

  • packages: updated latest .previews of remaining packages

V1.31 [2021-07-20]

  • perf: kcp2k V1.11

    • perf: where-allocation (https://github.com/vis2k/where-allocation):

      nearly removes all socket.SendTo/ReceiveFrom allocations

    • perf: Segment MemoryStream initial capacity set to MTU to avoid early runtime

      resizing/allocations

  • fix: Utils.RoundBitsToFullBytes(0) now returns 0 bytes

  • Upgraded to Unity 2020.3.12f1 LTS for latest fixes

  • fix: Benchmark 'Ground' object is now converted to network entity, not to regular entity (https://github.com/vis2k/DOTSNET/issues/44)

  • feature: BitReader/Writer: float2 support

V1.30 [2021-05-29]

  • BitWriter128: rewrite to use int[] directly instead of scratch

  • BitWriter128: allow setting .BitPosition from the outside

  • BitReader128: expose .BitPosition

  • TransportServerSystem.Disconnect return value changed to void because the bool wasn't used anywhere.

  • packages: burst updated to 1.4.8 verified

  • kcp2k V1.10

    • feature: configurable Timeout

    • allocations explained with comments (C# ReceiveFrom / IPEndPoint.GetHashCode)

    • fix: #17 KcpConnection.ReceiveNextReliable now assigns message default so it works in .net too

    • fix: Segment pool is not static anymore. Each kcp instance now has it's own Pool. fixes #18 concurrency issues

  • fix: Transport initializations moved from OnCreate to OnStartRunning. Fixes a bug where kcp server would always run with default configuration because SelectiveSystemAuthoring Awake() configuration is called AFTER OnCreate(). Fixes kcp not handling much bandwidth because CongestionWindow was always enabled, limiting send queue to send buffer copying to around 60 items per tick due to congestion control.

  • Disabled some log messages on startup

V1.29 [2021-04-30]

  • Upgrade to Unity 2020.3 LTS again

  • breaking: Snapshots (raw). replaces Broadcast systems. Prepares for NetworkComponents.

  • breaking: NetworkEntity renamed to NetworkIdentity because that's what it is

  • fix: PongServerSystem.OnUpdate() now calls base.OnUpdate() too. Fixes a bug where batched messages wouldn't be flushed in the Pong example.

  • NetworkServerSystem.Send(List) obsoleted. It was only used by InterestManagementSystem, and the implementation simply calls Send(message) for each list entry.

  • perf: InterestManagement uses Send(message) instead of Send(list). previously it would sort messages into a list, call Send(list), then Send(List) would call Send(message) for each list entry, which is redundant.

  • fix: libuv replaced with kcp everywhere. libuv obsoleted. fixes 2020.3 LTS build bug.

  • feature: NetworkComponents

V1.28 [2021-04-15]

  • fix: downgraded to Unity 2020.1.16 to avoid ‘no available transport’ error in builds.

    • Let’s stay on this version until I have time to look into the bug

  • packages: Burst 1.4.7 (verified)

  • batching simplified and fully moved to update

  • BruteForceInterestManagementSystem renamed to DistanceInterestManagementSystem

  • NetworkMessageMeta.Pack/UnpackMessage helper functions so client & server are guaranteed to use the same packing code

  • BitWriter: smaller improvements

  • BitWriter/Reader: float3 support added for convenience

  • BitReader/Writer: Read/WriterBytesBitSize fixed* version for 'fixed byte[]' support

  • IBitReader/Writer interface added to prepare for NetworkComponents

  • BitReader/Writer128 (burstable) added to prepare for NetworkComponents

  • fix: Benchmark scene PlayerMovement SelectiveSystemAuthoring component moved from NetworkServer GameObject to NetworkClient GameObject

V1.27 [2021-03-29]

  • Unity updated to 2020.3 LTS for stability

  • fix: Telepathy updated to V1.6: lots of fixes & improvements

  • fix: kcp2k V1.8: fixes empty message sending/receiving undefined behaviour and fixes IPv6 errors on Nintendo Switch

  • packages: burst updated to 1.4.6

  • packages: code coverage 1.0.0

  • packages: entity 0.17.0; hybrid renderer 0.11.0; dots editor 0.12.0

  • packages: test framework 1.1.24

  • packages: unity.physics 0.6.0

V1.26 [2021-01-29]

  • Telepathy transport added

  • packages: DOTS Editor V0.11.0 added

  • BitReader: ReadBytesBitSize added

  • fix: Batch.lastSendTime is now initialized to current time so that first elapsed time calculation doesn't use "now - 0" which would always be a lot

  • libuv2k V0.19

    • fix: deadlock/crash when closing loop inside a uv_run call is now detected and an error is logged instead of allowing libuv to crash Unity.

    • added more tests

    • fix: Shutdown now clears nativeLookup after logging about them not being disposed. fixes a bug where if one test/session would miss disposing, the values would stay in there and make all future tests fail until the next domain reload.

    • fix: TcpStream.OnCloseHandle doesn't invalidate the handle before the OnClosed callback anymore

    • fix: libuv Transport OnLibuvServerClosed doesn't access the disposed handle's usertoken anymore. we get the connectionId before disposing now.

    • fix: libuv Transport loops are created/disposed only once in OnCreate/OnDestroy. we should not dispose a loop while events are being called from a loop's uv_run

    • fix: libuv Transport now Updates even if server/client are null. fixes ClientVoluntaryDisconnect test not passing because client.Disconnect()->uv_close callback would only be called in next loop update, which would never happen if we don't update after the client was disposed.

    • fix: libuv Transport doesn't manually dispose the handle in OnLibuvError anymore. libuv2k does it internally already, and calling it twice is actually not a good idea.

    • fix: libuv Transport manually dispose the handle in OnLibuvClosed anymore. libuv2k does it internally already, and calling it Dispose() instead of a Dispose() call is just a bad idea. potentially fixes memory/crash issues.

    • fix: libuv Transport OnLibuvError/Closed checks null before invoking OnDisconnected. fixes a bug where stopping the Editor while client and server are running would clean up loop -> call OnClosed -> DOTSNET already removed the Transport events but libuv Transport still tried to access them.

V1.25 [2021-01-21]

  • perf: BitReader uses fast method when copying 4 bytes, slow method otherwise.

  • perf: BitWriter uses fast method when copying 4 bytes, slow method otherwise.

  • fix: kcp2k V1.7

    • lots of fixes(!)

    • performance improvements

    • unreliable channel support(!)

    • DOTSNET Transport: Send/Receive window defaults increased 4096(!)

    • statistics logging for headless servers

  • fix: libuv2k V0.18:

    • NativeHandle major rewrite to improve C#<->C interface

    • Fixed several memory issues

    • Improved performance

    • Hugely simplified code

    • NativeHandle memory leaks are now detected on shutdown

  • fix: netId is now ulong again instead of uint to avoid situations where Version would be larger than 0xF too quickly (e.g. after a monster respawned 16 times). Added comment so this is never changed again.

V1.24 [2021-01-11]

  • perf: kcp2k V1.6

    • unreliable channel

    • better recv/send window size defaults

    • show max send/recv rate in debug gui

    • lots of improvements

  • fix: KcpTransport uses OnCreate to set up kcp, and wraps the callbacks in lazy functions. fixes a bug where starting in headless would cause a NullReferenceException because Kcp OnStartRunning is called after Server OnStartRunning.

  • perf: ServerActiveSimulationSystemGroup foreach allocations removed by using for-int

  • perf: ClientConnectSimulationSystemGroup foreach allocations removed by using for-int

  • BitWriter: support buffer sizes that aren't multiples of 4 for convenience

V1.23 [2021-01-06]

  • perf: Bitpacking to compress values down to the bit. Use BitWriter.WriteUInt(level, 1, 60) to compress a level from range 1..60 down to only 6 bits.

  • perf: Batching on a per-connection basis for every send function. This is a lot easier than Send(NativeList) only batching. And it actually batches every Send, not just Send(NativeList).

  • perf: NetworkEntity.netId 4 bytes uint instead of 8 bytes ulong. Reduces 10k Benchmark bandwidth from 2.48 MB/s to 2.1 MB/s.

  • perf: NetworkMessage.GetId() 2 bytes ushort reduced to 1 byte. Reduces 10k Benchmark Bandwidth from 2.10 MB/s to 2.00 MB/s. 256 message ids should be enough for every project.

  • perf: NetworkServer/Client WrapHandler uses 'default' instead of new T() in combination with 'where T : struct' to avoid heavy allocations of 88 KB / frame in 10k benchmark.

  • Network/ServerClientSystem hooks into Transport events via += instead of = to not overwrite anyone else's hooks. Prepares for NetworkStatistics.

  • Transport.OnSend for statistics etc.

  • NetworkStatistics to measure bandwidth via NetworkServer/ClientStatisticsAuthoring components, see Benchmark example.

  • fix: NetworkClientSystem.OnTransportData now disconnects if it's called with an empty ArraySegment

  • Packages: Burst updated from 1.3.0 to 1.4.3 [verified]

V1.22 [2020-12-12]

  • perf: Unity Server Build doesn't update ClientWorld anymore, but still creates it for convenience and to avoid #if UNITY_SERVER checks all over DOTSNET. (https://github.com/vis2k/DOTSNET/issues/33)

  • perf: KcpTransport: use 'turbo mode' configuration as recommended by original kcp repository

  • breaking: automated NetworkMessage serialization reverted. Back to custom Serialize/Deserialize methods. We still keep <<messageId,amount,messages>> batching & bandwidth savings from Send(NativeArray). Prepares for Bitpacker and solves for Array serialization like https://github.com/vis2k/DOTSNET/issues/3 . Make sure to add Serialize/Deserialize methods to your NetworkMessages when upgrading.

V1.21 [2020-12-09]

  • kcp2k V1.2: smaller fixes, MaxMessageSize increased from 1200 bytes to 145KB

  • packages: Entities updated from 0.14.0 to 0.16.0

  • packages: Hybrid Renderer updated to 0.10.0

  • packages: Unity.Physics updated to 0.5.1

  • Upgraded to Unity 2020.1.16

  • fix: LiteNetLibServer/ClientTransport: IPv6 disabled again because it caused a SocketException when connecting

  • LiteNetLib updated to 0.9.4

V1.20 [2020-11-03]

  • kcp Transport

V1.19 [2020-10-09]

  • LiteNetLib Transport: enable IPv6

  • libuv2k V0.15: removed send/recv allocations, IL2CPP support, no more ConcurrentPool, fixed potential WriteRequest.Release deadlock

  • perf: BruteForceInterestManagement update time is now set in RebuildAll instead of Update. Avoids unnecessary updates if someone just called RebuildAll anyway

V1.18b [2020-09-25]

  • libuv2k V0.12: fixes, perf, libuv binaries bumped to V1.39.0, windows release build to fix DllNotFoundException

  • breaking: Apathy Transport replaced by libuv2k everywhere because it’s better in every single way (performance, stability, architecture, etc.)

  • Packages: Entities updated to 0.14.0

  • Packages: HybridRenderer updated to 0.8.0

  • LiteNetLib Transport: exposed latency simulation properties

V1.17 [2020-08-25]

  • Upgraded to Unity 2020.1.2f1 for ECS package updates

  • fix: NetworkServerSystem.StartServer starts transport before settings server to active to avoid potential race conditions

  • NetworkClientSystem: OnConnected/OnDisconnected virtual functions added for classes that inherit from NetworkClientSystem

  • NetworkServerSystem: OnConnected/OnDisconnected virtual functions added for classes that inherit from NetworkServerSystem

  • fix: ChatClientSystem uses OnDisconnected instead of OnStartRunning to reset state. fixes issue 25 (note: works with MemoryTransport, doesn't work with Apathy yet because OnDisconnect isn't called on client for some reason)

  • fix: Apathy updated to V1.16. Fixes a bug where calling client.Disconnect() voluntarily would never call Transport.OnDisconnected.

V1.16 [2020-08-12]

  • NetworkTransformAuthoring component instead of auto generated. Make sure to reassign it on your prefabs and reassign sync direction. This was needed for some workflows.

V1.15 [2020-08-08]

  • Upgraded to Unity 2020.1 for latest ECS package updates

  • Packages: Entities updated to 0.13.0

  • Packages: HybridRenderer updated to 0.7.0 to fix errors

  • Packages: Unity.Physics updated to 0.4.1

  • sharp_uv updated to 0.5 to fix Unsafe is now internal error introduced by HybridRenderer 0.7.0

V1.14 [2020-07-27]

  • Quaternion compression to significantly reduce bandwidth. Apathy can now send 20k networked entities to a single connection easily without buffers getting full

  • Upgraded to Unity 2019.4.4f1

  • fix: HybridRenderer V2 can only be added to one world, otherwise we get 'material registered twice' errors. Bootstrap now only adds it to the client world.

  • fix: Bootstrap adds Companion systems to unitySystems

  • fix: DestroyAllNetworkEntities now works for Entities with LinkedEntityGroups too

  • fix: Apathy updated to V1.15. fixes iOS XCode build errors

V1.13 [2020-07-21]

  • New server->client message protocol to optimize bandwidth/performance

  • Message Packing for giant performance improvements for all transports:

    • NetworkServerSystem.Send(connectionId, NativeList) for high performance message sending with automated chunking to respect Transport MaxMessageSize

    • NetworkTransformServerSystem uses Send(NativeList) for high performance

    • InterestManagementSystem uses Send(NativeList) for high performance

    • Apathy Server Transport: send queueing removed because DOTSNET handles it

    • Libuv Server Transport: send queueing removed because DOTSNET handles it

  • fix: LiteNetLib Transport uses correct MTU to avoid TooBigPacketException when packing messages

  • Apathy Transport: NoDelay = true by default because Apathy is buffer size limited, and we want to empty it out asap

V1.12 [2020-07-20]

  • libuv Transport added

V1.11 [2020-07-12]

  • LiteNetLib Transport added

  • Apathy updated to V1.13 (deterministic send/recv buffer behaviour. fixes the Linux bug)

  • NetworkServer/ClientSystem.Send(): added Channel parameter

  • NetworkTransformServerSystem uses Unreliable channel now

V1.10 [2020-06-25]

  • breaking: NetworkTransformClient/ServerSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient/Server GameObject

  • breaking: TransformClient/ServerMessageSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient/Server GameObject

  • breaking: Spawn/UnspawnMessageSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient GameObject

  • feature: DependencyInjection now runs before OnCreate

  • fix: ClientConnectedSimulationSystemGroup: client null check for cases where there is no NetworkClientAuthoring component in the scene

  • fix: ServerActiveSimulationSystemGroup: client null check for cases where there is no NetworkClientAuthoring component in the scene

V1.9 [2020-06-23]

  • fix: TransformClientMessageSystem overwrites OnCreate/OnDestroy but didn't call ClientMessageSystem's base.OnCreate/OnDestroy, causing bugs if we actually use OnCreate/OnDestroy in ClientMessageSystem

  • fix: NetworkClient/ServerMessageSystem uses OnCreate to register messages. Fixes a bug where a message would come in before the handler was registered, because we are in ConnectedGroup/ActiveGroup, so it only registered after connected and after the message was already received.

  • Range slider is now only shown while server is running (and not on client anymore)

V1.8 [2020-06-20]

  • Extensions: NativeMultiHashMap.TryIterator for easier iterations

  • InterestManagementSystem: removed obsolete SendUn/SpawnMessage functions

  • NetworkClientSystem.Send(NativeList) for Burst/Job support added

  • perf: NetworkTransformClientSystem uses Burst. For 75k Entities it reduces system time from 11ms to 0.33ms. So it's 30x faster.

  • SegmentReader.ReadBytes4094 added

  • SegmentWriter.WriteBytes4094 added

  • breaking: NetworkServerSystem.Send parameters switched for consistency and ease of use

  • fix: TransportServer/ClientSystems are now updated in LateSimulationSystemGroup after all other systems. Fixes a bug where the Chat demo wouldn't work because Transport.OnStartRunning would set apathy's OnConnected/OnData hooks before Client.OnStartRunning would set the Transport hooks, causing them to be not set. Also avoids similar bugs in the future because update order is now deterministic.

V1.7 [2020-06-15]

  • Apathy updated to the latest version. Reduces memory usage per connection from around 2GB to 64KB and removes the 1-3s allocation freeze when clicking the client connect button.

  • Benchmark Example: fix MonsterMovementSystem seed is never zero anymore to avoid ArgumentException in Unity.Mathematics

V1.6 [2020-06-11]

  • Upgraded to Unity 2019.4 LTS

  • perf: NetworkTransformServerSystem Burst compiled. For 10k Entities with interval=0, it required 20-22ms without Burst and 5-6ms with Burst now.

  • perf: InterestManagement uses NativeMultiMaps to buffer Spawn/Unspawn messages instead of using DynamicBuffers. With 10k Entities at interval=0, it reduces system time from 8ms to 1ms.

  • Chat Example: added interest management to avoid DependencyInjection warning.

  • fix: NetworkTransform interpolation on clients is applied in main thread instead of Job. Movement is smooth again, especially noticeable in the Pong demo.

V1.5 [2020-06-08]

  • fix: Bootstrap.Initialize calls TypeManager.Initialize before using types. Fixes a bug where development builds on some platforms would throw a "The TypeManager must be initialized before the TypeManager can be used" Assertion failure.

  • perf: TransformClientMessageSystem batch processes all new TransformMessages with an Entities.ForEach call in each Update. This is a lot better than calling TryGetValue and SetComponentData 10k times.

  • perf: TransformClientMessageSystem runs in a Job. Applying TransformMessages on the client for 50k Entities reduced from originally 200ms for OnMessage SetComponentData to 0.05ms with Job/Burst.

  • NetworkServerSystem.Send NativeMultiHashMap function added for Jobs

  • Extensions: DynamicBuffer.Contains modified for Job support

  • InterestManagement restructured for Burst support. When rebuilding every frame with 10k Entities, the system time was reduced from 339ms per Update to 5.89ms per Update.

  • 10k Example renamed to Benchmark with configurable spawn amount in the new SpawnSystemAuthoring component.

  • Benchmark Example: added Slider to modify visibility radius at runtime.

V1.4 [2020-06-01]

  • NetworkMessage serialization automated, and it’s faster now.

  • Increased test coverage internally

  • NetworkServer/Client message handlers use generic message delegates so that NetworkServer/ClientMessageSystem don’t need the OnMessageInternal workaround anymore.

  • perf: SegmentWriter.WriteBytes: use UnsafeUtility.MemCpy instead of Array.Copy because it's 25% faster

  • perf: Entities.ForEach queries read-only parameters are now marked as ‘in’ everywhere

V1.3 [2020-06-01]

  • Unity updated to 2019.3.14

  • Entities/Burst Packages updated to latest versions

  • fix: SegmentReader.Remaining calculation now works with ArraySegments that start at an offset

  • fix: ApathyTransportServer/ClientSystem now applies configuration in OnStartRunning instead of OnCreate so that Authoring settings are actually applied

  • performance: Apathy uncorked. Apathy performance is now on par with MemoryTransport. At least 20x faster than before. Try the 10k Demo with max visibility.

  • usability: NetworkServer/ClientMessageSystem: OnMessage parameter is the actual message type instead of NetworkMessage now

V1.2 [2020-05-25]

  • SegmentReader made 5x faster: 1mio x ReadFloat3 down from 2765ms to 538ms

  • SegmentWriter made 3x faster: 1mio x WriteFloat3 down from 922ms to 345ms

V1.1 [2020-05-25]

  • Unity.Physics support

  • (Job)ComponentSystems converted to SystemBase

  • Pong/Chat/Physics demos added

  • Fixed clients not despawning other disconnected client’s players

  • Smaller fixes & improvements

V1.0 [2020-05-25]

  • Initial release.

Last updated