This document is about: QUANTUM 2

Release Notes 2.0



Build 1146 (Mar 20, 2023)

  • Fixed code-gen issue that could cause an IndexOutOfRangeException if a large enough number of GetHashCode instances were emitted
  • Fixed issue in the 2D and 3D Physics engines when creating physics entries for a compound shape and the entries buffer had to be expanded, which could cause an access to memory that had already been disposed
  • Changed Upgrading Photon Realtime to version



Build 1114 (Sep 13, 2022)

  • Fixed Frame.FreeUser being called after FrameBase.Free, which disposes the Heap memory
  • Fixed an exception during directory creation when using a config file for the codegen_unity tool to change the path of RelativeLinkDrawerFilePath
  • Fixed correcting the custom plugin code sample that sends snapshots
  • Fixed issue that caused the clients to send input messages more frequently than necessary, increasing the output bandwidth usage
  • Fixed missing call to DumpFrameUser on Frame.DumpFrame
  • Changed Removing explicit use of Newtonsoft Json TypeNameHandling.Auto which is not needed and poses a security thread when loading data from an untrusted source
  • Changed The client now sends non-reliable messages as Unsequenced which will slightly reduce the bandwith and improve the network performance



Build 982 (Feb 11, 2022)

  • Added warning message when setting a 2D or 3D Physics Collider physics material to an invalid asset
  • Fixed FP.FromString returning wrong values when providing strings with more than 14 digits of precision of the fraction part
  • Fixed an issue on 2D and 3D KCCs that could cause the penetration correction to push the character further inside the collider in case the contact point was past the character center in the normal direction
  • Fixed an issue on the client simulator that would cause the input polling for a given frame to be skipped or polled in duplication when the input offset increased or decreased, respectively
  • Fixed an issue on the de-serialization of multiple Commands of the same type on the same frame
  • Fixed Arrays not being displayed correctly in Unity 2020.3.24+ and 2021.2
  • Fixed issues on the 2D and 3D Physics engines when the session is initialized with RuntimeConfig.Map as default or invalid
  • Fixed issues when enabling toggleable mesh colliders that were initialized as disabled, expanding internal buffers in the process, which could corrupt memory and cause crashes



Build 903 (Sep 29, 2021)

  • Added ChecksumErrorFrameDumpContext - a way to include user data in case of a checksum error
  • Added DumpFlag_AssetDBChecksums - print asset db checksums in the frame dump
  • Added Frame.DumpFlag_AssetDBChecksum - a flag that, if passed to Frame.DumpFrame, prints out checksums of all the assets in the AssetDB
  • Added QuantumRunnerLocalDebug.PreloadAddressables - demonstrates a way to preload to preload addressable assets, if Sync Addressables are not an option
  • Added SimulationConfig.ChecksumErrorFrameDumpOptions
  • Added SimulationConfig.ChecksumErrorFrameDumpOptions - if set to SendAssetDBChecksums, checksum error frame dumps will contain checksums for each asset in the AssetDB
  • Added support for subclassing non-abstract asset types.
  • Added the option to configure the server input buffer and history sizes when running a custom plugin
  • Fixed an issue whit Filters of a single component type returning entities that had said component removed while the removal was not committed in memory
  • Fixed FPQuaternion.Lerp and LerpUnclamped are now equivalent to Unity's Quaternion counterparts, i.e. interpolate towards negative 'target' if the dot product between the quaternions is negative
  • Fixed fully disabled legacy server support on the Quantum custom plugin SDK
  • Fixed missing FPMatrix2x2 serialization code
  • Fixed Quantum simulation trying to advance even if the runner was Paused (e.g. waiting for a snapshot), which caused callbacks like UpdateView and PollInput and SimulateFinished to get called
  • Fixed QuantumStats prefab displaying the outgoing traffic in the 'Network In' field, instead of the incoming, and no value in the 'Network Out' field
  • Fixed StackOverflowException when using cyclic references in DSL. Name of the reentered type is printed in the error message instead
  • Fixed type mismatch between BitStream.WriteStringGZip and .ReadStringGZip serialization code that could corrupt the de-serialized data
  • Fixed Unity codegen issue: generic asset types can be derived from
  • Fixed Unity codegen issue: generic asset types no longer require [AssetObjectConfig(GenerateLinkingScripts = false)] attribute
  • Changed logging meaningful errors during LUT initialization and asset db loading on the custom plugin SDK
  • Changed upgraded Photon Realtime to version, please read Assets/Photon/PhotonLibs/changes-library.txt and Assets/Photon/PhotonRealtime/Code/changes-realtime.txt for changes
  • Removed Assets/Photon/PhotonLibs/WebSocket folder please delete it manually, websockets are included in the netstandard libraries
  • Removed old Realtime sample Assets/Photon/PhotonRealtime/Demos
  • Removed old Realtime changelog Assets/Photon/PhotonLibs/release_history.txt



Build 857 (Aug 05, 2021)

  • Fixed fully disabled legacy server support on the Quantum custom plugin SDK


Build 777 (May 20, 2021)

  • Fixed 2D and 3D physics bodies not having their linear and angular velocities reset when put in a sleeping state
  • Fixed 3D Broad-phase Shape Overlaps missing hits on static mesh triangles
  • Fixed 3D Physics colliders that have a shape with position offset sometimes missing collisions with triangles in a mesh
  • Fixed always initializing the SessionContainer Log for console even when running it from the plugin (now optional)
  • Fixed an issue in FPCollision.CircleIntersectsAABB that would cause circles with radius 0 (point) inside boxes to not be considered as overlapping
  • Fixed an issue when destroying entities during OnExit physics callbacks and the destroyed entity is the owner of the callback flag (info.Entity)
  • Fixed an issue where memory had to be over-allocated to avoid crash on Android running on ARMv7
  • Fixed an issue with the normal and penetration computations on 3D Box-Box collisions
  • Fixed an issue with the view interpolation on lockstep simulations (e.g. replays), where the previous verified state was not provided
  • Fixed ArgumentNullException on console runner if no checksum file is provided
  • Fixed AssetRef drawers don't fallback to Asset Base when an abstract asset is used
  • Fixed generated code for BitSets with a size that is greater than and not multiple of 64 not having a correctly sized fixed buffer
  • Fixed BitSet.ClearAll methods for sets greater than 64 bits not resetting the entire buffer
  • Fixed Custom Plugin sample now disposing the session container in OnCloseGame instead of in BeforeCloseGame, so the simulation is still available during EmptyRoomTTL
  • Fixed custom plugin simulation stalling if the session tried to advance the clock more than it had inputs for
  • Fixed debug log of duplicated asset paths
  • Fixed events not being pooled and allocating with each raise
  • Fixed false-positive component override message and a subsequent crash when materializing a prototype that forces entity pool to grow
  • Fixed Frame Differ dumping the local Session/Runtime configs when a checksum error occurred, instead of the instances received from the server and actually used on the simulation
  • Fixed Frame.Heap.AllocateAndClearPtr returning non-null Ptr values in case it failed to allocate the requested size on the frame heap
  • Fixed InvalidOperationException on the Frame Differ when trying to differ the dump of a single frame, which can also happen while other clients' dumps have not been received yet
  • Fixed Issues in the serialization of FPBounds2 and FPBounds3 structs
  • Fixed Lacking of support to FPBounds3 in the code-gen interpreter and BitStream serialization
  • Fixed issues when Physics HitCollection internal buffer needed to be expanded when using Broad Phase Queries
  • Fixed missing MemoryLayoutVerifier.Platform initialization (MemoryLayoutVerifier.DefaultPlatform()) inside SessionContainer.Start()
  • Fixed missing Task Runner for simulation processing on the plugin and console runner, now using DotNetTaskRunner
  • Fixed NullReferenceExceptions when a client gets disconnected by the server after his local session is created and before it is started
  • Fixed printing a QList<T> could result in an error if an element has been removed
  • Fixed QuantumStaticMeshCollider3D & QuantumStaticTerrainCollider3D are now properly marked dirty after a bake
  • Fixed Triangles in QuantumStaticMeshCollider3D are now marked as non-serializable to avoid resource files bigger than necessary. Gizmos for static meshes are now drawn from the map triangle data
  • Fixed StateInspector error occurring when a removed component type was used in a filter
  • Fixed systems inside SystemMainThreadGroup or SystemGroup not having OnInit/OnEnabled callbacks called
  • Fixed unresolved pointers error when de-serializing a frame with compound shape buffers tracked for disposal
  • Changed AssetDB is now exposed in the Frame Context
  • Changed Increased component limit from 192 to 256



Build 684 (Feb 18, 2021)

  • Added FrameSerializer.PointerResolve(Ptr*, int) that can be used to resolve pointers used in components
  • Fixed an issue where having singleton components on scenes would raise occasional exceptions. Singletons can be removed/destroyed and then created again without committing frame commands
  • Fixed displaying of 2D and 3D Shape Type as flags on Unity 2020.2+ Inspector
  • Fixed Frame dumps differing between different culture variants (this would not cause a desync)
  • Fixed issue on the trigger detection between physics colliders with compound shapes and trigger static meshes
  • Fixed issues with using cached physics static data when starting an online game from a local snapshot that uses a different Map than the one the simulation starts with
  • Fixed occasional unresolved pointers error when using compound shapes made of more than 4 shapes
  • Fixed possible DivideByZeroException on raycast-sphere checks when the ray length is too small
  • Fixed wrong info on physics callbacks when an entity was involved in multiple OnEnter/OnExit conditions in the same frame
  • Changed Generated Asset scripts fully qualify the type of their Settings field to avoid possible conflicts
  • Changed There's an implicit limit of max allocation (64kB), regardless of the page size. Improved exception message if that error is reached


Quantum 2.0 is a brand new engine, so we recommend the developer to start by reading this document (also included in the SDK):

Because the internal the sub-systems (navigation, physics, etc) and its components were either kept or evolved from the versions found in 1.2.4.x, all release notes from previous versions are included bellow.

Breaking Changes:

We merged the code and systems project into a single csproj called quantum.code :o

Migrate your project by copying the quantum.code folder from the SDK and copy all of your custom files (from state and systems) into that project: Add the new code project to your Visual Studio solution and drag drop the files there. Also copy your *.User files and CommandSetup.cs and SystemSetup.cs. Afterwards you can delete the state and systems projects completely.

We combined all source code provided with the SDK that is inside quantum code solution into a single file called Core.cs to make the upgrade more managable in the future (e.g. adding and removing files).

Build 634 (Jan 18, 2021)

  • Changed SDK marked as stable (F) release


Build 631 (Jan 15, 2021)

  • Fixed the PhotonServerSettings Editor setting Port to 0 when using the Cloud App Settings button

Build 630 (Jan 14, 2021)

  • Fixed raycast-sphere accuracy issue when the ray length was very large relative to the sphere radius

  • Fixed an issue with the deserialization of the Frame metadata that could cause checksum errors

Build 627 (Jan 13, 2021)

  • Fixed Custom Plugin package missing 'CustomQuantumServer.cs' file

Build 624 (Jan 08, 2021)

  • Fixed OnExit callbacks being called even if the entity was destroyed in another OnExit callback

Build 620 (Jan 06, 2021)

  • Fixed access to PathFinder data via the Navitation API by adding GetPathFinderData(frame)

Build 599 (Dec 21, 2020)

  • Fixed an issue with navmesh baking when using non-square grid sizes and the FindClosestTriangleCalculation.SpiralOut setting

Build 596 (Dec 19, 2020)

  • Added to FrameThreadSafe API: GetPointerSingleton<T> and TryGetPointerSingleton<T>
  • Added to FrameThreadSafe API: Number, IsPredicted, IsVerified and TryGet<T>
  • Fixed An error where Quantum.FramePrinter.PrimitivePrinter<T> was missing with some AOT builds. (Cherry picked 4f4fb82ff7cfb07f7d61e381a35aef955f86a9f0)
  • Fixed thread-safety of FilterStruct<T> and ComponentGetter<T> methods
  • Changed the EntityViewUpdater to optinally parent views under ViewParentTransform

Build 593 (Dec 17, 2020)

  • Fixed QDictionary failing to remove an entry if its hash code was negative

Build 591 (Dec 16, 2020)

  • Removed the docs folder and the quickstart guide. Please refer to the online docs. Moved the API doc CHM file to the root folder

Build 590 (Dec 15, 2020)

  • Fixed memory leak when running the simulation on the server with the custom plugin sample

Build 588 (Dec 14, 2020)

  • Fixed desync when initializing multiple sessions with different layer configs or when receiving a different SimulationConfig from the server
  • Changed OnGameStart callback, now called before system's OnInit

Build 586 (Dec 11, 2020)

  • Added read-only access to EntityViewUpdater members for derived classes
  • Fixed an issue where migrated assets where net set dirty during the 2.0 migration

Build 584 (Dec 10, 2020)

  • Fixed FilterStruct attempt to iterate through entities that were destroyed, but have data still lingering in component buffers

  • Exposed Filter, FilterStruct and ComponentGetter in FrameThreadSafe API

Build 581 (Dec 08, 2020)

  • Fixed issues when a 2D or 3D KCC center was inside a box, which could produce zeroed penetration correction

Build 579 (Dec 04, 2020)

  • Fixed issue in the Task System, when in a multithreaded context, that could cause tasks to be skipped and/or worker threads to get stuck in loops

Build 577 (Dec 03, 2020)

  • Fixed issue when starting a local game from a snapshot and having Min Input Offset greater than zero
  • Fixed issue when starting an online game from a local snapshot that could cause the simulation to halt

Build 575 (Dec 02, 2020)

  • Fixed inlined prototype components have correct header color when dark theme is enabled in Unity < 2019.3
  • Changed locale dependent <auto-generated> section is removed from CodeGen.cs

Build 574 (Dec 01, 2020)

  • Fixed an issue in Quantum Auto Baker that caused generated data being lost by setting MapData itself dirty after running the BakeMap step

Build 572 (Nov 30, 2020)

  • Fixed the default capacity of some internal buffers not being compatible with the default managed heap size, giving "Allocation too large" errors

Build 570 (Nov 27, 2020)

  • Added configurable modes on Simulation Config for commiting destroy/remove commands on memory
  • Fixed checksum errors when removing a component from and destroying an entity in the same frame
  • Fixed issue with Instant Replays when having Min Input Offset greater than zero
  • Fixed issues when deserializing a frame data into another, which could cause memory leaks in the frame's managed heap
  • Fixed possible DivideByZeroException on ray-triangle narrow check

Build 567 (Nov 20, 2020)

  • Fixed dynamically added Assets not being retrieved when searched from tasks running in a multithreaded context
  • Fixed physics bodies being awakened rigth after being put to sleep in some collision configurations

Build 566 (Nov 19, 2020)

  • Fixed a bug where prototype's EntityRefs were not fully assigned if it had a struct containing an array
  • Fixed an issue with navmesh Unity import introduced in build 533 by providing an explicit epsilon for FixTrianglesOnEdges. Default should be float.Epsilon
  • Fixed physics broadphase queries missing trigger colliders when callbacks are being called
  • Changed AssetDB constructor is now public, allowing for custom IResourceManager implementations

Build 565 (Nov 18, 2020)

  • Fixed an issue with navmesh agent config settings DynamicLineOfSightWaypointRange where the set units were not triggering the line of sight test
  • Changed LocalInput subscribes to CallbackPollInput in OnEnable instead of start

Build 563 (Nov 17, 2020)

  • Fixed an issue in navmesh agent that could cause agents with MovementType DynamicBody to circle around waypoints
  • Fixed unnecessary predicted frame simulation when running on Local mode
  • Changed ResourceManagerStatic & ResourceManagerStaticPreloaded allow for null or empty paths

Build 562 (Nov 16, 2020)

  • Added AssetGuid.None const field (equals Invalid)
  • Fixed Asking the user for scene save confirmation when opening a scene through the Quantum toolbar
  • Fixed issues when performing queries after changing the frame Map asset
  • Changed EntityViewEditor so it will excecute for derived EntityView classes as well

Build 560 (Nov 12, 2020)

  • Added shapes' UserTag field to 2D and 3D shape configs, configurable on entity prototype
  • Added shapes' UserTag field to the query Hit, CollisionInfo and TriggerInfo APIs

Build 556 (Nov 11, 2020)

  • Fixed 2D and 3D PhysicsBody's Inertia being reset before Center of Mass if both flags are set, inducing a deslocated CoM on shapes with position offset

Build 554 (Nov 09, 2020)

  • Fixed 2D and 3D CompoundShape.RemoveShapes infinity looping when not passing any UserTag parameter
  • Fixed 3D Physics bucketing and sorting in the (X, Y) instead of the (X, Z) axes in the broad phase and hurting performance

Build 551 (Nov 05, 2020)

  • Fixed 2D and 3D KCCs missing collisions with circles and sphere, respectively

Build 548 (Nov 04, 2020)

  • Fixed glitchy behavior on Entity Views when playing online and having Input Offset Min greater than 0
  • Fixed simulation stalling when playing a local game with Input Offset Min greater than 0

Build 546 (Nov 02, 2020)

  • Fixed Unity 2020.1 nested assets not being visible on starting Unity
  • Changed enumeration value of DefaultAssetGuids.Max to 256

Build 543 (Oct 29, 2020)

  • Fixed 2D and 3D KCC raw movement's GroundedNormal not being set
  • Fixed Assets being detected as nested in Unity 2020.1

Build 540 (Oct 27, 2020)

  • Fixed an issue that caused the Quantum debug gizmos to flicker under Unity 2019
  • Fixed and issue when changing the frame Map that could cause 3D meshes not to be loaded
  • Fixed issues on OnEnter/OnExit collision callbacks that could cause misbehaviors when using prediction culling or changing map assets

Build 537 (Oct 23, 2020)

  • Fixed crash when pathfinding with NavMesh Agents on iOS builds

Build 536 (Oct 22, 2020)

  • Fixed 2D and 3D queries done outside of the valid physics region causing errors. Common case: KCC falling infinitely
  • Fixed QDictionary serialization

Build 535 (Oct 21, 2020)

  • Fixed wrong collision normal computations on sphere-box collisions when the sphere center was inside the box

Build 533 (Oct 20, 2020)

  • Fixed an issue that the navmesh edit mode gizmo was not rendered in some reload cases
  • Fixed an issue where the ClosestTriangleCalculation navmesh settings was not used after importing the Unity navmesh
  • Fixed an issue where wrong navmesh borders could be generated due to accuracy with 3D navmeshes

Build 532 (Oct 19, 2020)

  • Fixed AssetDB not refreshing properly on Unity 2020
  • Fixed AssetResourceContainer.Groups being initialized in OnEnable
  • Fixed issue when baking entity colliders from Unity circle and sphere colliders: making a prefab out of the Entity prototype will no longer zero the baked radius

Build 529 (Oct 13, 2020)

  • Fixed a precision issue in the 2D Solver that could cause wrong tangent impulses in almost-frontal collisions

Build 528 (Oct 12, 2020)

  • Fixed 'EntityView.OnEntityInstantiated' callback now is called after the instance is added to EntityViewUpdater active views
  • Fixed ambiguous reference when using Optional attribute in DSL
  • Fixed parse error when using DrawIfCompareOperator and DrawIfHideType parameters with DrawIfAttribute in DSL

Build 525 (Oct 07, 2020)

  • Added API documentation from the Quantum code solution to PhotonQuantum-Documentation.chm
  • Fixed 3D physics queries performed before the first Update corrupting memory when checking the scene mesh triangles

Build 524 (Oct 06, 2020)

  • Fixed issue with compound colliders triggering OnEnter/OnExit callbacks if some shapes were overlapping and some were not
  • Exposed HitCollection and HitCollection3D .Add methods

Build 519 (Oct 05, 2020)

  • Fixed an issue where the first waypoint of the navmesh agent pathfinder was corrupted which affected the agent behaviour only marginally but was visible when debugging the waypoints

Build 517 (Oct 01, 2020)

  • Fixed "Quantum/Open Quantum Project" not working with solution paths containing spaces

Build 514 (Sep 30, 2020)

  • Fixed callbacks from Events raised on systems' OnInit having a Game with null frames

Build 509 (Sep 28, 2020)

  • Fixed static mesh baking: degenerate triangles with zeroed normals are now removed

Build 507 (Sep 25, 2020)

  • Fixed an issue in the penetration correction of physics bodies that could cause slight miscorrections

Build 506 (Sep 24, 2020)

  • Fixed systems' OnInit now being called if session started from a locally saved snapshot

Build 504 (Sep 23, 2020)

  • Fixed 3D Physics assertion error when having 3D compound colliders and collision callbacks are called

Build 500 (Sep 18, 2020)

  • Exposed a default Layer Mask in the 2D and 3D KCC config assets that can also be overhauled through code

  • Fixed an issue in the physics callbacks when starting a game from a locally-saved snapshot

  • Changed Frame Events are now invoked after OnUpdateView

Build 497 (Sep 17, 2020)

  • Fixed 'Command without RPC data' issue when predicting inputs for a remote player that had sent a command
  • Fixed 2D and 3D Physics collision callbacks, so that any modification done during callbacks have immediate effect
  • Fixed an issue when initializing a physics scene map with no colliders and a null static colliders array
  • Fixed Auto Build feature not handling 'Generate Asset DB' flag

Build 496 (Sep 16, 2020)

  • Fixed issues when the default static colliders capacity of the physics engines was not enough and had to be expanded

Build 493 (Sep 15, 2020)

  • Fixed Bug where TryGet and TryGetPointer would return true if component had been removed but not deleted from internal data buffer
  • Fixed local runner "Save And Reload" exception for scene prototypes

Build 489 (Sep 12, 2020)

  • Fixed 2D and 3D KCC thread-safety issues
  • Fixed memory leaks when temp-allocating through the FrameContext from multiple threads
  • Fixed NavMeshAgent thread-safety issue when using Character Controller movement type

Build 488 (Sep 11, 2020)

  • Fixed 3D box-triangle narrow collision check edge case that could generate a collision without contact points
  • Fixed [ExcludeFromPrototype] when applied on EntityRef field sometimes caused a compile error in CodeGen.cs


Build 481 (Sep 09, 2020)

  • Fixed an issue when destroying entities with OnEnter/OnExit collision callback flags set during physics callbacks
  • Fixed null pointer exceptions when pathfinding with a NavMeshAgent

Build 479 (Sep 08, 2020)

  • Added 'Button' (with capital B) as a supported type in the DSL, in addition to 'button'
  • Added FPQuaternion.FromToRotationSkipNormalize, a faster version of FromToRotation that skips the normalization of the input parameters
  • Fixed Menu asked for AppIdRealtime even if the PhotonServerSettings was set to use LocalMasterServer
  • Fixed QuantumJsonSerializer.cs was not included in the CustomPlugin zip
  • Changed FPQuaternion.FromToRotation to normalize the input parameters by default, avoiding precision issues


Build 476 (Sep 07, 2020)

  • Added an overload to the contact point iterator on collision callbacks that exposes the contact normal

  • Fixed an issue where scene prototypes didn't show up in replays

  • Fixed an issue with the Input Provider used in replays when not initialized from the simulation starting frame

  • Fixed an issue where NavMeshSteeringAgent_Prototype overrides were ignored

Build 471 (Sep 04, 2020)

  • Added FP now has % and / operators for FPHighPrecisionDividers Tests: added FPHighPrecisionTests

  • Added FPMath.SinHighPrecision and FPMath.CosHighPrecision. Internal: Added FPHighPrecisionDivisor Tests: Added FPMath trig absolute error tests

  • Fixed FP._1_33 and FP._1_99 are fixed to be in line with FP._0_33 and FP._0_99

  • Added HeapExtraCount added to StartParameters

  • Added Log LoaderExceptions in case ReflectionTypeLoadException happens in

  • Added QuantumGame.GetInstantReplaySnapshots - a way to get a range of instant replay snapshots

  • Added QuantumInstantReplay is now rewindable (depending on parameters)

Build 468 (Sep 03, 2020)

  • Fixed HitDynamics and HitKinematic query options being swapped for regular queries resolution

  • Added IsCulled method to the Frame thread safe API

Build 465 (Sep 02, 2020)

  • Fixed Quantum/Generate Math Lookup Tables used an invalid path

Build 463 (Sep 01, 2020)

  • Fixed an issue in 3D Physics Bodies with compound colliders that overlapped with each other that could cause cyclic references

  • Fixed Replay buffer is now cleaned up on resync

  • Removed obsolete fields from 2D and 3D PhysicsBody prototypes

  • Changed Moved QuantumGame into Quantum namespace

  • Added enumerator to QDictionary<K, V>

  • Added QtnWatcher prints error if fails to compile qtn

  • Added quantum.codegen prints errors in VisualStudio/MSBuild friendly way

  • Fixed An issue where Addressable assets used AssetPath instead of address in UnityResourceLoader

  • Fixed An issue where resyncing caused simulation to halt

  • Fixed Frame can now be copied between runners

  • Fixed Quantum in release mode is now fully non-alloc, including DeterministicSession and networking

  • Fixed quantum.codegen prints error to stderr

  • Fixed Resync memory leak

  • Changed removed 'Send Rate' configuration option, renamed 'Send Staggering' to 'Send Redundancy'

Build 458 (Aug 31, 2020)

  • Added enumerator to QDictionary<K, V>
  • Fixed An issue where Addressable assets used AssetPath instead of address in UnityResourceLoader
  • Fixed An issue where resyncing caused simulation to halt
  • Fixed Quantum in release mode is now fully non-alloc, including DeterministicSession and networking
  • Changed removed 'Send Rate' configuration option, renamed 'Send Staggering' to 'Send Redundancy'
  • Renamed ChecksumFrameBufferSize to ChecksumSnapshotHistoryLengthSeconds (in SimulationConfig)
  • Added InstantReplaySettings to QuantumRunner.StartParameters and all local runners - a new way to configure instant replay.
  • Removed BufferSizeSec from QuantumInstantReplayDemo, as instant replays are now configured with QuantumRunner.StartParameters

Build 455 (Aug 28, 2020)

  • Breaking Change: Asset Resource Container format has changed, it needs to be rebuilt (Quantum -> Generate Asset Resources)
  • Fixed an issue that could corrupt 3D mesh and triangle collision manifolds in frames where the internal buffers needed to be expanded
  • Fixed FilterStruct 'without' and 'any' component sets being swapped
  • Changed UnityResourceLoader implementation to a more extensible one (composite). See AssetResourceContainer_Resources.cs for a sample.
  • Added Addressables support (experimental). Enabled in Quantum Editor Settings. Since Quantum requires assets to be readily available, assets need to be either preloaded or Sync Addressables ( need to be used.
  • Fixed an issue where QuantumRunner used UnityDB to load SimulationConfig instead of a passed IResourceManager

Build 452 (Aug 26, 2020)

  • Fixed an issue with the sleeping detection of entities that did not collide with other colliders

Build 448 (Aug 25, 2020)

  • Fixed 2D Linecast queries not using specified vertical position and height
  • Fixed a bug in UnityResourceLoader causing undefined behavior if there were multiple Unity resources with the same name

Build 447 (Aug 24, 2020)

  • Fixed 2D Raycast queries not using specified vertical position and height
  • Fixed Task runner being destroyed when scene changes

Build 438 (Aug 22, 2020)

  • Improved Physics engines will no longer move entity Transforms outside the FP usable range or give errors when entities move outside the valid physics area

Build 437 (Aug 21, 2020)

  • Improved 2D and 3D collision solver stability when using minimum linear/angular velocities

Build 436 (Aug 20, 2020)

  • Fixed DivideByZero exception in FPVector2.Angle and FPVector3.Angle when using very small vectors

Build 435 (Aug 19, 2020)

  • Fixed a DivideByZero Exception on FPCollision.LineIntersectsCircle if the line start and end points are the same or slightly different

  • Fixed a NullReferenceException in the Map Gizmos if the 3D Physics system was disabled

  • Added GetInertia method to 2D and 3D Physics bodies

  • Fixed an issue where PrototypeMaterializationContext used ComponentTypeIndex incorrectly

Build 432 (Aug 18, 2020)

  • Fixed build events on platforms other than Windows use mono explicitly

Build 431 (Aug 17, 2020)

  • Fixed when ENABLE_VSTU is not defined, QuantumEditorSettings.MergeWithVisualStudioSolution is no longer ignored

Build 429 (Aug 15, 2020)

  • Fixed an issue with the penetration correction of 3D box-triangle collisions

Build 428 (Aug 14, 2020)

  • Added QuantumEditorSettings.FPDisplayPrecision - an ability to control FP rounding in the inspector

Build 427 (Aug 13, 2020)

  • Fixed an issue in the narrow phase resolution of trigger mesh collisions that could cause a null pointer in the sphere-triangle check
  • Improved body-mesh collision solving

Build 426 (Aug 12, 2020)

  • Added HostProfiler.StartDebug HostProfiler.EndDebug Merge branch '2.0/feature/entity-prototype-ref-unity' into 2.0/develop

Build 425 (Aug 11, 2020)

  • Fixed an issue with the expansion of static components buffers in the physics engines
  • Fixed an issue with trigger mesh collision checks that could result in other non-trigger meshes not being checked
  • Changed experimental smoothed sphere-mesh collision option: removed from Simulation Config and now available per-collider in static meshes and terrains
  • Changed Quantums task system now uses unity job system native threads instead of mono threads

Build 422 (Aug 06, 2020)

  • Added a Jumped property to 2D and 3D KCC APIs, true when Jump is called and consumed in the default steering method

Build 421 (Aug 05, 2020)

  • Fixed an issue in the Frame Printer (state inspector) that could cause invalid pointers de-referencing in union-like structs
  • Fixed ComponentPrototypeRef array index mismatch for deserialized frames

Build 418 (Aug 04, 2020)

  • Added AddForceAtPosition and AddLinearImpulseAtPosition to 2D and 3D physics body APIs

  • Fixed regular queries with HitDynamics flag disabled checking against entries with disabled physics bodies

  • Improved physics entry creation task performance

Build 414 (Jul 31, 2020)

  • Changed the 2D collision info contact points API, now consistent with its 3D counterpart. Check the API docs for details

Build 410 (Jul 30, 2020)

  • Changed the 3D collision info API, better adapting to the new internal structure of the mesh triangle collisions. Check the API docs for details

Build 407 (Jul 28, 2020)

  • Fixed an issue with FPVector3.Angle that could result in a wrong angle if the vectors were equal or opposite to each other
  • Fixed DivideByZeroException when resolving 3D raycast broad phase queries with shallow angles

Build 406 (Jul 27, 2020)

  • Fixed an issue with FPVector2.Angle that could result in a wrong value if the vectors are opposite to each other
  • Fixed ArgumentOutOfRange is no longer thrown in EntityViewUpdater if MapEntityLink has an out of range index; error message is logged instead

Build 404 (Jul 24, 2020)

  • Added 'OnBeforeBakeNavMesh' and 'OnBakeNavMesh' to the map data baking callbacks
  • Added QDictionary indexer
  • Fixed an issue with sphere-box collisions when the sphere center was inside the box
  • Fixed QDictionary error when adding a key-value pair after removing another
  • Fixed Upon deserializing, DynamicAssetDB sets _nextGuid correctly

Build 403 (Jul 23, 2020)

  • Added smoothed sphere-mesh collisions mode, available under SimulationConfig.Physics.Experimental section

  • Fixed error when trying to deserialize remote player's command without RPC data in predicted frames

  • Fixed FPVector2, FPVector3 & FPQuaternion drawers now support narrow mode

  • Fixed Labels for AssetRefs restored

  • Added Applying [ExcludeFromPrototype] on a component in qtn will prevent a prototype for this component from being generated

Build 401 (Jul 22, 2020)

  • Added Transform2D.Create, for API consistency

  • Improved 3D mesh collision solving

  • Changed Map physics settings gizmos to a more pleasant scale

  • Deprecated 2D and 3D CollisionInfo.ContactPoint, use ContactPointAvg or ContactPoints instead

  • Fixed No more "using UnityEditor;" in EntityComponentBase.cs

Build 398 (Jul 21, 2020)

  • Added DumpFlag_NoDynamicDB & DumpFlag_NoRuntimePlayers frame dump flags
  • Added Frame.FrameDump dumps dynamic db bytes FrameDiff: Binary diff up and working
  • Added RepalceTypeHintAttribute - a new way of replacing a specific field/type on Unity's side for prototypes Merge branch '2.0/feature/frame-diff-binary' into 2.0/develop
  • Changed the order in which the map baking steps are performed when baking all: map static colliders are baked first, followed by the Nav Meshes
  • Exposed utility methods for importing a Unity NavMesh, accessible through MapNavMesh.ImportUtils Merge branch '2.0/feature/replace-type-hint' into 2.0/develop

Build 397 (Jul 20, 2020)

  • Fixed Dynamic Asset DB deserialization preserves guids
  • Fixed Dynamic Assets can be inspected in the State Inspector
  • Fixed static collider gizmos not matching the baked values when a parent of the GO has a non-uniform scale
  • Fixed Unity 2020 PrefabStage.prefabAssetPath warning removed

Build 395 (Jul 17, 2020)

  • Fixed PhysicsBody3D prototype version number on EntityPrototype not being correctly updated after upgrade
  • Fixed Qtn syntax array<asset_ref<EntityPrototype>>N doesn't emit a duplicate AssetRefEntityPrototype struct

Build 394 (Jul 16, 2020)

  • Added implicit operator from QDictionary to QDictionaryPtr
  • Added New entity component inspector mode: InlineInEntityPrototypeAndHideMonoBehaviours (accessible with EntityComponentInspectorMode property, formerly UseInlineEntityComponents)
  • Added Single-line drawers for FPVector2, FPVector3 and FPQuaternion
  • Fixed inline EntityPrototype editor glitches got rid of for Unity >= 2019.3
  • Fixed serialization of LayerMask utility struct

Build 393 (Jul 15, 2020)

  • Added a flag in the Physics Body config that signalizes if a sleeping body can be awakened by added forces (true by default)
  • Added A new way of extending EntityComponent* editor - implement OnInspectorGUI, guarded by #if UNITY_EDITOR block
  • Added Added UseInlineEntityComponents to editor settings: enables experimental inlined view for entity components in EntityPrototype
  • Added CallbackPollInput.IsFirstInThisUpdate property added Merge branch '2.0/feature/inline-component-prototypes-editor' into 2.0/develop
  • Fixed Baking maps can be performed and is consistent with multiple scenes open
  • Fixed Physics queries missing hits when performed outside of the world size, in the sorting axis
  • Removed optional parameter for awakening sleeping bodies when adding forces. Use the IsAwakenedByForces flag in the body config

Build 392 (Jul 14, 2020)

  • Fixed QuantumTaskProfiler binary save (".dat") restored

Build 391 (Jul 13, 2020)

  • Fixed editing a prefab variant in the prefab stage doesn't raise an error

  • Fixed error when disabling physics bodies during a Trigger callback

  • Added optional boolean parameter to wake physics bodies up when adding impulses, force or torque to it

  • Added QBoolean.ToString() that prints true or false

  • Fixed arrays of empty components are now serialized by Unity

  • Fixed DrawIf now works for arrays

  • Fixed EntityViews are correctly reassigned on map restart


Build 384 (Jul 08, 2020)

  • Added Frame.DumpFrame accepts flags, at the moment one is supported: DumpFlag_NoHeap (used by ChecksumErrorFrameDump)

Build 383 (Jul 07, 2020)

  • Removed deprecated 2D and 3D PhysicsBody Create methods, replaced with CreateKinematic and CreateDynamic
  • Removed deprecated 2D and 3D PhysicsCollider compound API, replaced by compound Shape API
  • Removed deprecated 2D and 3D PhysicsCollider Create methods, replaced by overload with Frame parameter
  • Removed deprecated Shape3DConfig.CreateShape method, replaced by overload with Frame parameter

Build 378 (Jul 03, 2020)

  • Fixed added Obsolete attribute to LocalInput to get rid of a warning
  • Fixed an issue in the Physics Callbacks that was causing Dynamic/Trigger Static Exit callbacks not to be called

Build 375 (Jul 01, 2020)

  • Fixed bitsets can now be used in qtn without [ExcludeFromPrototype]

Build 373 (Jun 29, 2020)

  • Fixed an issue with the Quantum simulator that was causing prediction error interpolation not to be applied in the EntityView

Build 371 (Jun 26, 2020)

  • Added SetInertia to 2D and 3D Physics Bodies API

Build 369 (Jun 25, 2020)

  • Fixed 2D peemptive raycast first-hit-only query now correctly returns only the closest hit in the resultant collection

  • Fixed a racing condition on the multithreaded resolution of preemptive compound shape overlaps

  • Added ClearForce and ClearTorque API to 2D and 3D Physics Bodies

  • Map grid config has been split between Physics and NavMesh settings, which also have separate gizmos that can be toggled in the map draw mode

  • Physics scenes default capacities are now exposed in the Simulation Config, with more settings also available in the Map assets

Build 367 (Jun 24, 2020)

  • Fixed QuantumGameGizmos no longer throw an exception if not using NavigationSystem

Build 366 (Jun 23, 2020)

  • Added a Penetration field to 2D Hits, filled when a shape overlap has the ComputeDetailedInfo flag set
  • Fixed an issue in the box-edge collision check that could cause the box to get stuck
  • Fixed double lookup in UnityResourceLoader.FindAssetBase got rid of
  • Improved EntityView now considers any Transform2DVertical components the entities might have on 2.5D
  • Improved the computation of angular impulses by the 2D Physics Solver

Build 364 (Jun 22, 2020)

  • Fixed Not calling AssetBase.OnInspectorGUIAfter fixed
  • Improved 2D Physics Solver impulses computation

Build 362 (Jun 20, 2020)

  • Added 2D and 3D compound shapes, which can be created both through code or Editor and used on physics colliders
  • Added support for performing regular and preemptive overlap queries with 2D and 3D compound shapes
  • Fixed ResourceManagerStatic won't go into infinite when an asset attempts to load itself in AssetObject.Loaded
  • Changed 2D and 3D Physics Body configs, wrapping them into a single flag enum. Old body prototype fields are deprecated and all configs are translated into flags upon upgrading
  • Changed 2D and 3D Physics Collider Create method. Previously existing one is deprecated and replaced by an overload that receives a Frame object as parameter in order to support creating colliders from compound shapes

Build 358 (Jun 18, 2020)

  • Fixed migration tool from 1.2.4.x to 2.0 not creating the default assets with the expected Guids
  • Improved 1.2.4.x to 2.0 migration tool filtering of old scripts and handling serialization of nested arrays and lists

Build 351 (Jun 16, 2020)

  • Added QuantumEditorSetting.AutoRunQtnCodeGen - set it to true to have the codegen run as soon as .qtn files change
  • Fixed Nullable properties look right in 2019 now
  • Fixed Physics Body 2D and 3D allowing to set a body without mass as non-kinematic

Build 350 (Jun 15, 2020)

  • Fixed Transform2D_Prototype now stores rotation as degrees Renamed: EulerAnglesAttribute -> DegreesAttribute DegreesAttribute put on built-in rotation Unity-visible fields & codegen Drawers/inspector for shapes updated to take offsets into account

Build 348 (Jun 12, 2020)

  • Added Post-build codegen raises an error if an asset is not declared in qtn

  • Added Automatic, server-side handling of client-based snapshots (late-joins and reconnects only require client to join room, and start QuantumRunner)

Build 346 (Jun 11, 2020)

  • Added non-generic System methods on Frame
  • Fixed an issue with the component buffer's memory allocation when removing all instances of a component after adding at least one

Build 345 (Jun 10, 2020)

  • Fixed EntityViewUpdater correctly actives inactive scene entities
  • Improved ray-triangle intersection point accuracy for 3D raycast queries

Build 344 (Jun 09, 2020)

  • Added a 'IgnoreCollision' property to the 2D and 3D collision callbacks info

Build 342 (Jun 08, 2020)

  • Fixed DivideByZeroException when resolving 3D raycast queries with small rays relative to the map cell size

Build 340 (Jun 05, 2020)

  • Fixed a deallocation issue that could happen when loading a map without 2D or 3D static colliders
  • Fixed angular velocity being integrated into an entity rotation with freeze rotation flags if the velocity was manually set
  • Changed setting a dynamic physics body IsAwakenedByKinematics property now only takes effect if the body is first allowed to sleep

Build 338 (Jun 04, 2020)

  • Fixed an issue in the 3D broad phase that could cause a collision between two dynamic bodies to be computer as a trigger collision

  • Fixed an issue with 3D elongated boxes sometimes missing collisions with triangles

  • Fixed assertion in the 2D and 3D Physics broad phases that could occur when having a trigger collider with static trigger callback flags set

  • Improved 3D collision solver impulses computations

  • Improved the inertia computation of 3D boxes

  • Fixed empty list containing entity_refs no longer triggers an assertion

  • Fixed null pointer de-allocation in the 3D Physics disposal

  • Changed Allowed invalid entity ref/components on a lot of methods entity methods without throwing exceptions

Build 336 (Jun 03, 2020)

  • Fixed preemptive physics queries with 'HitTriggers' flag set not checking trigger entries
  • Improved 2D and 3D physics performance by avoiding trigger checks when entries don't have respective callback flags set

Build 334 (Jun 02, 2020)

  • Added AssetBase now has two virtual methods OnInspectorGUIBefore and OnInspectorGUIAfter to hook into quantum asset editor GUI for quick inspector tooling
  • Added FP raw constants made public and grouped in FP.Raw static class
  • Added FPQuaternion.IsIdentity and FPQuaternion.IsZero
  • Added Prototypes can be extended with partial classes and MaterializeUser partial method
  • Fixed disable entity views for map entities that never existed
  • Fixed don't check for orphaned map entity views every frame
  • Improved the performance of the 3D broad phase collision check in the triangle soup
  • Changed AssetBase is now partial

Build 331 (Jun 01, 2020)

  • Fixed 3D sphere-shaped bodies inertia computation
  • Improved 2D bodies and 3D sphere bodies inertia computation

Build 329 (May 28, 2020)

  • Added UseCulling property on SystemMainThreadFilter<T>

  • Fixed AssetRefDrawer doesn't use ResourceManager to show AssetRefs

Build 325 (May 27, 2020)

  • Added a IsAwakenByKinematics field to 2D and 3D physics bodies that determines if a sleeping dynamic body can be awakened by other kinematic bodies or colliders
  • Added a Mass property to the 2D and 3D physics bodies, which can be changed in runtime after a body is created
  • Added back support to 2D and 3D kinematic physics bodies. Use CreateDynamic/Kinematic instead of Create (obsolete) and/or set the body IsKinematic flag for changing the body stats
  • Added SystemMainThreadFilter<T> that takes a filter struct an allows you to implement Update(Frame f, ref T filter)
  • Fixed Ptr.Serialize method now has the proper void* argument

Build 324 (May 26, 2020)

  • Fixed Destroy and Remove commands not being commited in between systems' OnInit and OnEnabled
  • Fixed GetAsset from worker thread needs to wait for Disposing state as well
  • Fixed invalid Ptr de-referencing by the physics callbacks
  • Fixed physics colliders not awakening sleeping bodies if colliding with them in some cases
  • Improved 2D and 3D physics penetration correction, specially noticeable in 3D collisions with triangle mesh
  • Improved box-triangle narrow collision detection for small scale entries
  • Changed When an EntityRef is used as input it will now only serializes itself if there's an entity specified to save bandwidth

Build 323 (May 25, 2020)

  • Fixed upgrade issue by restoring TerrainColliderData.cs as an empty file

Build 321 (May 23, 2020)

  • Fixed GameObjectNameIsEntityRef is now applied properly to entities baked into the map also
  • Changed QantumGame.Frames.Current is now obsolete

Build 319 (May 22, 2020)

  • Fixed an issue in the narrow collision check between 3D trigger entities and mesh triangles
  • Fixed heap will now correctly detect when an invalid Ptr is being de-referenced
  • Fixed task context will now detect invalid scheduled tasks and report errors
  • Fixed 2D and 3D shapes not updating their broad radius when fields were changed
  • Fixed an issue in the collision exit callbacks where it could still be called if the other entity was destroyed in a previous frame
  • Fixed an issue where a 3D Physics body could still rotate even if having rotation freeze flags enabled
  • Fixed an issue where regular queries could return hits with entities that have been destroyed after the physics update and before the current system
  • Changed 2D and 3D Physics Collider's shape to be a readonly property. To set a new shape to a collider, use the SetShape method in the collider API

Build 317 (May 21, 2020)

  • Changed 2D and 3D KCC raw movement computation to use the config radius extent for grounded state detection. This doesn't affect the default steering, but, if using a reasonably small extent value, can help stabilizing the KCC Grounded state.

Build 316 (May 20, 2020)

  • Added a first-hit-only parameter to 2D and 3D preemptive raycast API (AddRaycastQuery/AddLinecastQuery), false by default

Build 314 (May 19, 2020)

  • Fixed an issue with 2D and 3D shape overlaps where, in some situations, the hit EntityRef could be None even in overlapping a dynamic entity

Build 313 (May 18, 2020)

  • Fixed memory alignment for DSL unions

  • Fixed sort order on fields in generated Serialize method

  • Changed 2D and 3D KCCs raw accumulated correction computation, fixing an issue specially noticeable when steering over 3D meshes

  • Added RequireComponent attribute can now be used on entity_ref fields in qtn; unlike when used on a type, it only works when one type is specified

  • Added RequireComponent attribute: gets translated to Unity's RequireComponent for Unity prototype components. Also attributes are copied in much simpler (and correct) way during Unity's codegen, but they don't support nested types, which are kind of wrong if made public to begin with. So DrawIf enums got evicted from DrawIfAttribute and live in the namespace now

  • Fixed Unions support "(None)" choice

Build 310 (May 17, 2020)

  • Fixed an issue with the 2D and 3D KCCs that could cause position correction overshooting. More noticeable in the 3D KCC when using a higher count of contact points
  • Changed the default number of max contact points in the 3D KCC config default asset from 2 to 4

Build 308 (May 15, 2020)

  • Added a GetAllQueriesHits method for getting all preemptive queries results. Check the API documentation in the docs folder for more details
  • Added a UserTag integer field for 2D and 3D Joints
  • Fixed a name mismatching issue with the map data baker if using QUANTUM_XY directive
  • Fixed a very rare bug where player data would be overwritten locally on one client as the session was starting
  • Fixed Prototypes with entity_refs now have custom attribute support
  • Changed the 2D and 3D Joints API. Check the API documentation in the docs folder for details and examples on how to use it

Build 304 (May 14, 2020)

  • Added a penetration correction factor to the 2D and 3D KCC config assets
  • Added Asset Database can be deserialized in replay/save game runners
  • Fixed an issue with the default KCC steering method that was clamping the vertical velocity of the character if it was moving and then jumped
  • Fixed an issue with the default KCC steering method that was making the character jump with a slightly lower impulse than the one set in the jump
  • Changed 2D and 3D Character Controller APIs. Check the API documentation in the docs folder for details and examples on how to use it
  • Changed 2D and 3D HitCollections .Reset methods accessibility to public, useful when reusing permanent collections

Build 301 (May 13, 2020)

  • Added Implemented a new frame dumper which provides complete printing of all frame state

Build 298 (May 12, 2020)

  • Added Added f.Unsafe.ComponentGetter<T>() which is the single target version of f.Unsafe.FilterStruct
  • Added EntityView now sets the name of the spawned gameobject to EntityRef.ToString()
  • Added Log.Debug with [Conditional("DEBUG")] attribute for use in user code
  • Added support to querying the 2D and 3D physics scenes from systems' OnInit that are scheduled to run after the physics systems initialization (only statics are loaded at this point)
  • Fixed another overflow exception when running the Asset Migration tool after running the play mode in 1.2.4 projects caused by not respecting the NonSerialized field attribute
  • Fixed the Import From Unity button on the NavMeshDefinition inspector, the Unity navmesh import was not saved to the definition members
  • Improved the navmesh gizmo rendering performance by creating and caching the draw data (for edit and play mode)
  • Removed the Bake Unity Navmesh button from the MapNavMeshUnity script inspector because it was confusing: the button was only triggering the unity navmesh baking and not the Quantum baking

Build 297 (May 11, 2020)

  • Added support to 2D static edges, also possible to bake from a polygon asset
  • Fixed an issue in the 2.0 Asset Migration scripts that could cause an Overflow Exception due to cyclic dependencies in attached Unity Objects
  • Fixed an issue that could cause an unhandled exception in the Quantum.Navigation.ActiveVertex class
  • Fixed an issue where avoidance was applied to agents that are traversing a link, now they are ingored by avoidance and do not cause other to avoid them

Build 295 (May 09, 2020)

  • Fixed an issue with agents starting off the navmesh and creating a non-optimal waypoint on the nearest active triangle
  • Fixed PathQuality Good uses Euclidean distance calculation
  • Changed PathQuality Good uses less computations for path-finding

Build 294 (May 08, 2020)

  • Added 2D and 3D Physics callbacks prototypes with standalone components and also integrated into Entity Prototype collider
  • Added another NavMeshPathfinder.SetConfig() signature using an asset ref
  • Added AutomaticTargetCorrection option to the navmesh agent config, disabling this will fail the path search when selecting a target outside the navmesh
  • Added support to minimum angular velocity integration to 2D and 3D Physics, customizable through the SimulationConfig.MinAngularIntegration field
  • Fixed 2D and 3D queries throwing errors if the query boundaries were outside the map area
  • Fixed an issue that agents are not being avoided when SetTarget has not been called yet
  • Fixed an issue that the agent would not fail the pathfinding permanently when the target is outside the navmesh
  • Fixed an issue with Navmesh.MovePositionIntoNavmesh and target correction when the agent is inside disabled regions where a disabled border was used
  • Changed the NavigationAPI.FindPath() to use the new AutomaticTargetCorrection option as well
  • Removed Legacy physics material restitution and friction combine function. Default physics material combine function is now Max
  • Removed the ASSET_DATABASE.txt from the Unity Resources folder, it's not needed anymore

Build 292 (May 07, 2020)

  • Fixed 3D bodies rotation flags enum not allowing multiple flags selection on the editor
  • Fixed an issue with 3D shapes initialized from a shape config or prototype where the shape rotation offset could be initialized as a zeroed quaternion
  • Fixed the static collider data not displaying the correct layer of the object, although the collider itself would be baked and behave as in the correct layer

A1 (Alpha)

Build 289 (May 06, 2020)

  • Added Partial support for qtn attributes in prototypes (components with entity_refs ignore most custom attributes)

  • Added support to 3D shapes with position and rotation offset and 3D colliders with compound shapes. Check PhysicsCollider3D.AddShape, RemoveShape and GetShapes

  • Added a global setting disable avoidance completely (SimulationConfig.Navigation.EnableAvoidance, enabled by default)

  • Fixed EntityComponentTransformEditor property path fixed

  • Changed Changed the way the resync mechanism works

  • Implemented KCC3D movement type for steering agents

  • Removed avoidance callbacks

  • Removed legacy avoidance type

  • Renamed NavMeshAgentConfig.WaypointCount to CachedWaypointCount

  • Renamed NavMeshAgentConfig.WaypointDetectionDistance to DefaultWaypointDetectionDistance

Build 286 (May 05, 2020)

  • Fixed removing custom navmesh areas from the Unity project in the SDK

  • Added a Stop() method to the pathfinder component

  • Added configuration option to create extra heaps on the frame context

  • Added new memory stats that shows entity memory used in addition to heap memory used

  • Added properly implemented Frame.Free method that releases the Heap back to the Heap group

  • Fixed an issue that could cause link regions being omitted from the map link list

  • Fixed an issue with the computation of 2D compound shape collider broad radius when the collider root shape has a local transform

  • Fixed Changing map while iterating over components doesn't raise an exception

  • Changed NavMeshAgentSystem is now named NavigationSystem

  • Changed Physics2D, Physics3D and Navigation can now be completely disabled by not having the corresponding system in the system list

  • Changed the demo menu code slightly to give better debug output when connecting to a predefined master server and hide the region dropdown in that case

Build 282 (May 04, 2020)

  • Fixed an issue with agents overshooting the target position when stopping distance is too small

  • Fixed an issue that MapNavMeshDebugDrawer did not invalidate the cached navmeshes after baking

  • Fixed Better handling of lockstep mode in new simualtor

  • Fixed free null pointer on 3D Physics

  • Fixed free null pointer on physics2d

  • Changed inverted the navmesh agent ttl handling, MaxRepathTimeout can now be set to 0 ti disable

Build 279 (May 03, 2020)

  • Fixed calling OnSimulateFinished again
  • Fixed InputProviderExtensions.CopyFrom spelling and logic

Build 276 (May 02, 2020)

  • Added Implement foreach support on ComponentIterator<T> and ComponentBlockIterator<T> via duck-typing interface

Build 275 (May 01, 2020)

Breaking Changes:

IAssetDB and Shape2D are no longer necessary on PhysicsBody2D.Create overloads' signatures. Also, make sure the entity has a 2D collider before adding a body component.

  • Added support to 2D shapes with position and rotation offset and colliders with compound shapes. Check PhysicsCollider2D.AddShape, .RemoveShape and .GetShapes.

Build 274 (Apr 30, 2020)

  • Added BitStream extensions for serializing all asset refs
  • Added Exposed configuration options for entity memory management on SimulationConfig.Entities
  • Added f.Unsafe.GetComponentBlockIterator now accepts slicing start index + count
  • Added FrameBase.ComponentCount<T>() to get global count for a component type
  • Added FrameBase.Create overloads that take entity prototype containers
  • Fixed an issue that could cause an exception during the creation of navmesh steering agent component
  • Fixed the QUANTUM_ XY handling on the refactored navmesh baking
  • Removed all mdb files from the Unity project in the SDK
  • Removed Public Create API on EntityPrototypeContainer
  • Changed the Navigation.FindPath signature to be more simple
  • Changed all Unity meta files and stripped out the inconsistent licenseType information
  • SimulationConfig.PenetrationCorrection is now clamped between 0-1 when the asset is loaded, as higher values will cause glitchy behaviors
  • Upgraded Photon Photon3Unity3D dll to version v4.1.4.1
  • Upgraded Photon Realtime SDK to version

Build 269 (Apr 29, 2020)

  • Fixed an issue with the OnGameDestroyed callback that caused errors due to the order of QuantumCallbacks

  • Added a debug visualization for the binary Quantum navmesh MapNavMeshDebugDrawer

  • Added gizmos for the new navmesh agents (enable in QuantumEditorSettings.DrawNavMeshAgent)

  • Added new simplified script to define an imported Navmesh MapNavMeshUnity as replacement for MapNavMeshDefinition and it will not save intermediate data anymore

  • Fixed an issue with preemptive queries where some hits could be missed if not selecting all types on query options

  • Depricated some methods and classes from the old navmesh baking process (both ways will still work though)

Build 266 (Apr 28, 2020)

  • Added Added IEquatable<T> and == and != operator overloads to asset refs
  • Added Added IEquatable<T> and == and != to all asset refs
  • Added avoidance obstacle component
  • Added Command serializer now available on FrameContext
  • Added ComponentFilter<T0> for just one component
  • Added f.Assets.View() overload for AssetRefEntityView
  • Added Support for C#-style field attributes in .qtn DSL files
  • Added TaskProfiler now has "fit" button (above vertical scroll bar)
  • Fixed A few visual bugs of TaskProfiler in Unity 2019.3 fixed
  • Fixed an issue where sleeping dynamic bodies would not be awakened if being pushed due to position correction
  • Fixed an issue with 2.5D Physics where dynamic bodies could collide even if not overlapping vertically if one of them did not have a Transform2DVertical component
  • Fixed Baking a new MapAsset for the first time no longer throws an exception
  • Fixed Generated assets scripts' new lines are now consistent
  • Fixed navmesh definition inspector performance issues
  • Fixed navmesh pathfinding waypoint bug randomly sending agents to (0/0) when creating new agents
  • Removed old SimulationConfig.Physics.IsMultithreaded, use SimulationConfig.ThreadCount to override the number of threads used

Build 263 (Apr 27, 2020)

Breaking Changes:

Bake all navmeshes again.

The NavMeshAgent component has been split up into different parts. We noticed that developers working with navmesh and steering want to control quite a lot of the final movement result, which makes sense, because it is often so vital to the game experience. The new navmesh agent parts should help developers to easily pick a combination of navmesh support without losing multi-threaded performance and without executing unneeded parts.

NavMeshPathfinder has a target position, perfors the actual path-finding, stores a user-defined number of waypoints and detects the waypoint progression.

NavMeshSteeringAgent (requires a NavMeshPathfinder component) has max speed, acceleration and rotation speed and steers the entity along the path. Apart from not using this component developers can change the MovementType to Callback and inject their own movement while having to date avoidance data. The speed integration has been changed slightly to work more reliable when angular speed is used. Disable rotation speed and acceleration by setting them to 0.

NavMeshAvoidanceAgent (requires both the NavMeshPathfinder and the NavMeshSteeringAgent components) integrates HRVO agent avoidance. Avoidance priorities work now the same way as in Unity. Additionally type and masks can be defined to filter out who can avoid whom.


// new agent component creation
var entity = f.Create();
f.Set(c, NavMeshPathfinder.Create(frame, entity, navMeshAgentConfig));
f.Set(entity, new NavMeshSteeringAgent()); // optional
f.Set(entity, new NavMeshAvoidanceAgent()); // optional
  • The NavMeshAgentConfig asset has not changed much and it still includes data for all navigation components
  • The pathfinder is the only component that requires an explict config asset during the creation. The config file, though, is applied to both other components.
  • The config can be updated during run-time using NavMeshPathfinder.SetConfig() on the pathfinder component
  • The number of waypoints stored with the pathfinder can be set under NavMeshAgentConfig.WaypointCount
  • NavMeshAgentConfig.AvoidanceRadius is now only used when OverrideAvoidanceRadius is enabled
  • NavMeshAgentConfig.WaypointDetectionDistance was changed into EnableWaypointDetectionand two subsequent values (see API docs or tooltips for more information)
  • NavMeshAgentConfig.SteeringCallback has been removed. Instead the ISignalOnNavMeshMoveAgent signal should be used to advance the agent position
  • Merged SimulationConfig.AvoidanceCallbacks and SteeringCallbacks into NavigationCallbacks. Reset the value when you are using the callbacks
  • Importantly all navigation callbacks are now called from the main-thread and are secure for developers to use


// simplified movement callback
public void OnNavMeshMoveAgent(Frame f, EntityRef entity, FPVector2 desiredDirection) {
var agent = f.Unsafe.GetPointer<NavMeshSteeringAgent>(entity);
var transform = f.Unsafe.GetPointer<Transform2D>(entity);
transform->Position = transform->Position + desiredDirection * f.DeltaTime*
transform->Rotation = FPVector2.RadiansSignedSkipNormalize(FPVector2.Up, desiredDirection);
  • Added a navmesh utility method to generate a random position on the navmesh (FindRandomPointOnNavmesh)
  • Added navmesh baking parameter object (MapNavMeshBakeData) to enable custom raw navmesh input data
  • Fixed all navigation callbacks to be called from the main thread
  • Fixed an issue with navmesh agent start position glitches by using a more elaborate nearest triangle search algorithm
  • Fixed compilation errors in the QuantumToolbarUtilities class when using with Unity 2020
  • Fixed Scene prototypes can now have views set to assets
  • Navmesh links utilize the region system to be toggled on and off on the map level as well for agents. Add a MapNavMeshRegion script to the OffMeshLink Unity script.
  • Removed INavMeshRegionMask interface and replaced it with a NavMeshRegionMask struct that is saved in globals and on the PathfinderAgent


// old
f.Map.SetNavMeshRegionActive(f, "secret", false);
// new
var secret = f.Map.RegionMap["secret"];
f.NavMeshRegionMask->ToggleRegion(secret, false);

Build 261 (Apr 24, 2020)

  • Fixed an issue with 2D and 3D dynamic trigger callbacks that was making it not to be called in some cases
  • Fixed an Unity error pop up when the demo menu is started and the QuantumEditorSettings asset is tried to be loaded
  • Fixed dll import settings to always use AOT version for any build to mitigate the broken Unity DllImport.defineConstraints
  • Fixed TaskProfiler graph initial scale fixed
  • Fixed warnings send by Photon Realtime when the QuantumCommunicator tries to leave a room when it has not entered yet
  • Removed FrameBase from 2D and 3D Physics Joints and Callbacks API signature

Build 256 (Apr 23, 2020)

  • Added concrete RotationFreezeFlags.None as default flag (it was implicit before)
  • Added TaskProfiler shift+wheel increases/decreases graph's maximum value
  • Added TaskProfiler source client selection
  • Fixed an issue with 3D static colliders data without collider ID and trigger state assigned
  • The Core.PhysicsSystem has been split into PhysicsSystem2D and PhysicsSystem3D, and we now have a CullingSystem2D and 3D. All of these can be enabled/disabled at will now.

Breaking Changes:

  • Renamed Frame.EntityExists() to Frame.Exists()
  • Delete quantum\_unity\Assets\Photon\Quantum\Assemblies\quantum.state*
  • Delete quantum\_unity\Assets\Photon\Quantum\Assemblies\*
  • Delete quantum\_unity\Assets\Photon\Quantum\Editor\TaskProfiler\QuantumTaskProfilerWindow.Data.cs
  • The 2D and 3D physics callbacks systems have been reworked. To upgrade, make sure you:
  1. Update the callback flags used:
  • The FrameBase.Physics2D.SetCallbacks(CallbackFlags) API (as the correspondent on the Physics3D) is still available, but the overload with booleans has been removed.
  • Make sure you set the flag for the callbacks you want to receive with bitwise operations.
  • All previous flags (Collision, Static, OnEnter, etc) have been replaced by a set of 12 new flags: 3 flags for dynamic collisions (OnDynamicCollision, OnDynamicCollisionEnter, OnDynamicCollisionExit), and, analogously, 3 for static collisions, dynamic triggers and static triggers.
  1. Update the callback signals used:
  • All previous collisions signals have been replaced by 6 for each physics engine.
  • For 2D Physics collisions, for example, you now have: ISignalOnCollision2D, ISignalOnCollisionEnter2D and ISignalOnCollisionExit2D. Analogously, you have 3 signals for 2D trigger collisions (OnTrigger2D), and the respective signals on the 3D Physics (just replace 2D for 3D).
  • Notice that ISignalOnCollision2D will be called if the entity has the OnDynamicCollision AND/OR the OnStaticCollision flag. Use the IsStatic property on the collision info to differentiate between them. This is also true for the trigger signals.
  • Last but not least, the generic CollisionInfo struct has been replaced by CollisionInfo2D (collision and enter signals), TriggerInfo2D (trigger and enter signals), ExitInfo2D (exit signals) and their 3D physics respectives.

Build 253 (Apr 21, 2020)

  • Added Added Assets/Create/Quantum/EntityView menu item
  • Fixed an issue with the mesh baking process that was causing FPVector3 overflows
  • Fixed Assets/Create/Quatum/EntityPrototype menu item now creates a prototype correctly

Build 249 (Apr 20, 2020)

  • Fixed quantum.state.csproj and quantum.core.csproj no longer use $(SolutionDir) in their build events - changed to "$(ProjectDir).."

Build 247 (Apr 18, 2020)

  • Fixed issues with the serialization of 2D and 3D Joints

Build 245 (Apr 16, 2020)

  • Added missing SimulationConfig.Physics documentation
  • Fixed 2D and 3D PhysicsBody component serialization

Build 243 (Apr 15, 2020)

  • Added a Use Manifold Normal option to 2D and 3D KCC config assets and an optional parameter to kcc methods
  • Added configurable waypoint count for navmesh agents
  • Added Scene context menu items for creating basic entity types Added QuantumShapes2D resource with basic 2D shapes
  • Added search assembly settings to QuantumEditorSettings to remove hard-coded assembly names like Assembly-CSharp from the scripts
  • Fixed 3D queries not returning the hit penetration
  • Fixed issues with the computation of sphere-sphere narrow collision check and its penetration
  • Fixed static sphere gizmos drawing when attached to GameObjects with scale different than 1
  • Removed unused ReflectionInspector scripts

Build 242 (Apr 14, 2020)

  • Fixed Solution patcher works without Visual Studio Tools for Unity installed
  • Fixed an issue where MapNavMeshDefinition import settings where not saved when modified
  • Fixed EntityComponentPhysicsCollider2D & EntityComponentPhysicsCollider2D inspector sync with source collider properly
  • Removed the map link property from the navmesh asset
  • Removed ReplayPlaybackSpeed property from QuantumRunner. Use OverrideUpdateSession as in the InstantReplayDemo

Build 239 (Apr 11, 2020)

  • Added 3D Physics regular and preemptive queries API documentation

Build 238 (Apr 10, 2020)

  • Fixed issue with the error-based rotation interpolation that was causing rotation teleports even with no errors
  • Fixed recorded checksum verification issue when checksum interval was different than 1

Build 237 (Apr 09, 2020)

  • Added 2D Physics regular and preemptive queries API documentation
  • Fixed all useages of navmesh agent priority to use the same Unity-like logic (Most important = 0. Least important = 99)
  • Fixed an issue that generated navmesh regions in a random order
  • Removed GetQueryHitCount from 2D and 3D Physics API, use GetQueryHits instead
  • Removed support for region control per navmesh object (UseLegacyRegionOffsets)

Build 235 (Apr 07, 2020)

  • Added PhotonNicknamePlusGuid option to ClientIdProvider to mitigate duplicate client id errors when running multiple stand-alone clients that have the same name (read from PlayerPrefs)
  • Fixed an issue with NavMeshAgent.IsOnLink() that could cause an exception

Build 231 (Apr 06, 2020)

  • Fixed an issue in AOT file generation when members of different assets have identical names

Build 227 (Apr 03, 2020)

  • Fixed incorrect start and end detection of NavMesh links

Build 223 (Apr 02, 2020)

  • Fixed connecting to local Photon server via the demo menu by supporting older JoinRandom API
  • Added Transform3D Unity-like methods More Unity equivalence tests
  • Fixed an issue with consecutive navmesh links where the first waypoint was skipped
  • Fixed Quaternion multiplication bug fix
  • Added automatic changelog generation and publishing for nightly builds
Back to top