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.
=> 10k Benchmark is now running at 130 FPS on a Laptop
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