リリースノート
3.0.8
Stable
Build 1858 (Oct 08, 2025)
Changes
CollisionChecksin Physics2D and Physics3D namespaces are now static classes
Bug Fixes
- Fixed: An issue in 2D and 3D hinge joints causing non optimal constraint resolution when using motor or angle limits and both connected entities have a dynamic body
 - Fixed: An issue in 3D CCD algorithm that could make it less accurate and in some cases produce wrong contact points
 - Fixed: An issue that caused warning logs due to usage of an obsolete 
TreeViewtype in Unity 6 
3.0.7
Stable
Build 1808 (Sep 01, 2025)
What's New
- Added an overload to 
DeterministicSession.ResetReplay()that receives a raw byte array instead of a frame instance - Added a 
QuantumUnityDBproxy for the simulation to support the use of static methods in the assetsOnValidate()method when enclosed in#if QUANTUM_UNITY && UNITY_EDITOR, use the context menu on theQuantumUnityDB(inside the Inspector window) to trigger 
Changes
- Upgraded Photon Realtime to version 
5.1.9 - Changed the graph profiler base classes to 
QuantumMonoBehaviour - Automatically set 
_enableOnAwaketotrueafter adding graph profilers to the scene using the Quantum toolbar menu 
Bug Fixes
- Fixed: An issue introduced in version 3.0.6 that caused an exception when deserializing an external frame
 - Fixed: An issue introduced in version 3.0.6 that caused an exception when copying a frame (e.g. instant replays)
 - Fixed: An issue that could cause the Physics Engine to crash when calling 
DeterministicSession.ResetReplay() - Fixed: An issue that prevented Quantum profiler prefabs from being instantiated using 
PrefabUtilitywhen created them via the Tools menu - Fixed: Issues that caused problems when using the local UPM export
 
3.0.6
Stable
Build 1792 (Aug 20, 2025)
Breaking Changes
- CodeGen: imported 
Enumtypes are always emit asQEnumin prototypes now, which may affect serialization of existing prototypes - apply[PreserveInPrototype]to affected importedEnumto restore the old behavior 
What's New
- 2D and 3D 
CollisionInfostructs available in collision callbacks now allow contact points and normals to be modified - Exposed 
Quantum.Physics2D.CollisionChecksandQuantum.Physics3D.CollisionChecksAPIs with discrete overlap checks between shapes Heap.AllocateandDisposemethod to help creating Frame Heaps outside of a Simulation context (e.g. for unit tests)- QCollections now have a static 
Resolvemethod that can be used to resolve a collectionPtrwithout necessarily going through the Frame API 
Changes
- Upgrading Photon Realtime to version 5.1.7
 - Improved the response time when getting Photon regions by making pinging optional (e.g. from the StartUI)
 - Polishing StartUI prefab and code
 
Bug Fixes
- Fixed: An issue that could cause 
MatchmakingExtensions.ReconnectToRoomAsync()to fail silently - Fixed: An issue in 
AsyncExtensions.ReconnectAndRejoinAsync()that could cause an undesired timeout on error - Fixed: An issue with fast-reconnecting the Realtime connection that left the reconnected player in spectating mode (fast reconnect can now be disabled by toggling 
MatchmakingArguments.FastReconnectDisabled) - Fixed: An issue in the StartUI that could prevent 
Tasksfrom being canceled when the Editor stops - Fixed: An issue in the StartUI that could cause the pop-up to appear when stopping the Editor
 - Fixed: An issue that could cause a 
NullReferenceExceptionduringOnGameResyncif at least one physics engine (2D or 3D) was disabled - Fixed: An issue in 2D and 3D Joint component prototypes that showed warnings in inspector re. collections needing to be manually disposed, even though they are automatically disposed when the component is removed
 - Fixed: An issue that caused an assert exception in Debug configuration when trying to materialize a 2D or 3D compound shape prototype with no shapes in it
 - Fixed: An issue that caused non active navmesh agents without avoidance to create unnecessary overhead in the CreateEntries task
 - Fixed: An issue in CodeGen that caused imported 
Enumtypes to not be emitted asQEnumin prototypes - Fixed: An issue in the StateInspector that was greying out connected remote players
 - Fixed: Cases where null coalescing and null propagation was used on Unity objects (UNT0007, UNT0008)
 
3.0.5
Stable
Build 1759 (Jul 21, 2025)
Bug Fixes
- Fixed: An issue in the inspector that was still drawing the 
Preserveattribute warning for system types 
Build 1749 (Jul 11, 2025)
Bug Fixes
- Fixed: An issue that caused the 
SystemConfiginspector to not display the system names correctly 
Build 1748 (Jul 11, 2025)
Bug Fixes
- Fixed: An issue that caused the 
FPVector3swizzles (XYO,XOZ,OYZ) to disappear - Fixed: An issue that caused the script compilation to fail with Multiplayer Playmode enabled in Unity 6 (
QuantumStartUIMppmConnectCommand) 
Build 1740 (Jul 08, 2025)
What's New
- Added a new and simpler graphical connection menu UI, select 
Tools > Quantum > Setup > Add Start UI To Scene - Added a unique to checkout id generator asset called 
QuantumMachineIdto the SDK to be used forAppVersionduring development for example - Added 
CollisionInfo2D.TimeOfImpact(and 3D) accessible during physics callbacks when CCD is enabled - Added a replacement for the required 
[Preserve]attribute on Quantum systems:QuantumSystemsLinkerProcessoris an implementation ofIUnityLinkerProcessorthat ensures all the system types used in any ofSystemsConfigasset get preserved, it can be disabled with theQUANTUM_DISABLE_SYSTEM_LINKER_PROCESSORdefine - Added a static delegate to name Quantum entities: 
EntityRef.GetEntityNameUsercan return a customEntityRefstring representation otherwise the defaultEntityRef.ToStringis used. The entity name is displayed inFramePrinter,QuantumStateInspectorandEntityViewUpdater - Added an option to split the generated code into multiple files: 
GeneratorOptions.MaxLinesPerFilesets the intended maximum number of lines per file (int.MaxValueby default). If a file goes above the limit, additional files with.Part<N>suffix will be created. Actual files may be slightly longer or shorter then intended max line count because it estimates line counts ahead of time. Use partialQuantumCodeGenSettings.GetOptionsUsermethod to override the default value - Added 
Key,ValueandKeyPtrUnsafeproperties toQDictionary<,>.Enumerator, allowing for a non-copying access to the underlying entry - Added the new flag 
ChecksumErrorDumpOptions.SceneMesh3Dto dump the 3D Physics Scene Mesh metadata - Added the new flag 
QuantumGameFlags.DisableMemoryIntegrityCheckto disable the initial memory integrity check - Added support to run the SDK as a local UPM package, use 
Tools > Quantum > Export > Convert SDK to local UPM packagesto move the SDK source code outside theAssetsfolder - Added 
Frame.TryGetPlayerCommand()to simplify checking for an explicit command type - Added the 
DeterministicCommandscript template to the Unity Editor asset menu - Added a setter to 
Frame.IsVerified 
Changes
- Updated to Photon Realtime version 
5.1.6 - Code-generated properties and methods are marked 
readonlyto avoid defensive copies wherever possible - API methods and properties are marked as 
readonlywherever possible - Systems no longer need to be marked with 
[Preserve]attribute AssetObjectscan now be fully qualified in.qtn(e.g.asset_ref<Quantum.SomeNamespace.AssetName>)- Improved the 
QuantumUnityDBimport speed when there aren't any packages specified inAssetSearchPaths - Unity-provided packages are ignored when looking for assets, to override, define 
QUANTUM_ENABLE_SEARCH_IN_UNITY_PACKAGES - 2D and 3D type-specific joint prototypes (e.g. 
DistanceJointConfig) are now obsolete, use the respective general joint prototype (e.g.Joint2DConfig) instead Heap.Stats.PagesFullnow better reflects the number of frame heap pages with all blocks allocated- The State Inspector "Create Entity..." context menu item creates an empty entity now, to add components use 
Add/Override Componentsbutton - Removed all remaining references to unused native physics library (which will be released in Quantum 3.1)
 - Added a warning log when the debug input script still runs while already creating custom input
 
Bug Fixes
- Fixed: An issue in 
ComponentSet.Removemethods that could cause bits to be flipped - Fixed: An issue in 
SystemThreadedFilterthat could cause to mistakenly early-exit when an entire slice was rejected by the iterator (e.g. due to an Any/Without requirement) - Fixed: An issue that caused 
IntVector2.GetHashCode()andIntVector3.GetHashCode()to be non-deterministic - Fixed: An issue that caused restarting online games with a snapshot to fail with exceptions
 - Fixed: An issue that caused the 
Draw.Shape()to be stripped in Quantum release dlls - Fixed: An issue in 
QuantumDemoInputShooter3Dthat would cause part of the input (e.g. Yaw and Pitch) to be reset when polled - Fixed: An issue in 
FPQuaternion.LookRotationwhen the forward direction was zeroed or was collinear to the up direction - Fixed: An issue in 
FPVector3.Slerpwhen working with opposite vectors, which caused it to return different values from Unity'sVector3.Slerp - Fixed: An issue in 
FPVector3.Slerpwhen the from vector was zeroed - Fixed: An issue in 
FPMatrix4x4.InverseLookAtand.FPMatrix4x4LookAtwhen working with opposite vectors that caused it to return values either wrong or not equivalent to Unity's counterpart - Fixed: An issue in 
FPQuaternion.FromToRotationthat caused it to return a wrong result when from and to directions were opposite to each other - Fixed: An issue in the 3D sphere-mesh collisions where 
SmoothSphereMeshCollisionswas not used when CCD is enabled - Fixed: An issue that could cause a desync if all toggleable 3D collider triangles in a given cell were disabled before a late-join
 - Fixed: An issue that caused non-serializable simulation types being emit by component/struct prototypes for 
Joint,Joint3D,Shape2DandShape3D - Fixed: An issue in 2D and 3D Physics that caused OnTriggerExit callbacks to not be called if the non-trigger collider was a sleeping body
 - Fixed: An issue in 3D Physics Scene Mesh serialization that could cause desyncs
 - Fixed: An issue in 3D Shape Cast broadphase queries with first-hit-only that caused them to ignore 
DetectOverlapsAtCastOriginquery option when querying mesh colliders - Fixed: An issue in 3D Physics that could cause invalid memory access when triangles were dynamically added to the Scene Mesh and queries were performed on the same frame
 - Fixed: An issue that could cause memory leaks in the frame heap is multiple compound shapes had their buffers expanded on the same frame
 - Fixed: An issue that could cause a desync if a mutable mesh collider was enabled/disabled while being edited, attempting to do so will now throw an exception
 - Fixed: An issue in navmesh importing and baking that could cause the links target triangles to be offset by the number of ignored degenerate triangles
 - Fixed: An issue with navmesh links during importing when using 
QUANTUM_XY - Fixed: An issue with gizmo transform handles being hidden when clicking a different game object
 - Fixed: An issue that caused the navmesh gizmo text colors (vertex ids, triangle ids) to not be used correctly
 - Fixed: An issue that could break navmeshes during importing when using a larger 
FixTrianglesOnEdgesEpsilon(0.001or more), its default value was changed fromfloat.epsilonto1e-6f - Fixed: An issue that could caused 
SessionRunner.ShutdownAsync()to assert on subsequent calls - Fixed: An issue that caused the 
SessionRunnerto not wait for the connection to shutdown before returning while not handling theShutdownConnectionOptionscorrectly - Fixed: An issue that could cause a 
ViewComponentto be initialized twice - Fixed: An issue that caused the 
LayerMatrixinspector to be not working in Unity 6+ - Fixed: An issue in 
RangeExattribute applied toFPthat was overwriting exiting values during multi-selecting - Fixed: An issue that caused an error when importing Quantum in Unity 6 related to 
Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValuePersistent.prefab - Fixed: An issue with the readability of 
AssetObjectnames in the dark mode when logged withQuantum.Logclass - Fixed: An issue that caused an hiccup when opening the Quantum Gizmo Overlay
 - Fixed: An issue that caused the Quantum menu to display a connection error stating the map could not be found if 
SimulationConfig.AutoLoadSceneFromMapis set toDisabled - Fixed: An issue that caused the 
QuatumGameto keep references to replay recording data structures after being destroyed which makes leaking their memory more likely - Fixed: An issue that caused the Hub install button to create new sample scenes if a 
Quantum.Mapasset resides outside theQuantumUserfolder - Fixed: An issue that caused the workspace user scripts to have random script GUIDS (e.g. 
SimulationConfig.User.cs) when being installed causing them to be recreated when pressingInstallagain after moving them to a different folder, their meta files have to be replaced by the ones from a clean SDK installation to fix for upgrading projects - Fixed: An issue that could cause the assertion 
Old predicted command for player.. - Fixed: An issue that caused the 
ViewComponentscripts to not be multi-editable - Fixed: An issue in the state inspector that adding/overriding components not use the default field values
 
3.0.4
Stable
Build 1707 (May 20, 2025)
What's New
- Added the flag 
ChecksumErrorDumpOptions.SceneMesh3Dto dump 3D Physics scene mesh metadata 
Bug Fixes
- Fixed: An issue that could cause assertions 
Old predicted command for player..for application that are under severe performance problems - Fixed: An issue that could cause a desync in the 3D physics scene mesh serialization
 - Fixed: An issue that caused the Quantum menu to display a connection error stating the map could not be found if 
SimulationConfig.AutoLoadSceneFromMapis set toDisabled 
3.0.3
Stable
Build 1683 (Apr 24, 2025)
Breaking Changes
- Inconsistencies of the system API have been cleaned up: it is possible to add multiple systems of the same type but toggling was only affecting the first one in the list
 - All systems of a type are now enabled or disabled when using 
Frame.SystemEnable(Type)orFrame.SystemDisable<T>() Frame.SystemIsEnabledSelf(Type)andFrame.SystemIsEnabledInHierarchy(Type)are deprecated and instead methods that apply toAnyandAllare introduced e.g.SystemAllEnabledSelf(Type)andSystemAnyEnabledSelf(Type)
What's New
- The ability to draw text gizmos directly from the simulation using 
Draw.Text() - Improved 
Draw.Sphere()wire mode by using circles instead of a mesh - Improved debug 
Draw()gizmo rendering with shading for the debug material - Support for negative for the physics shapes scale in Unity Editor
 - 3D and 2D Capsule shape prototypes now support all direction axes from Unity Capsule colliders used as source
 - New Random utility methods 
RNGSession.InUnitCircle(),OnUnitCircle(),InUnitSphere(),OnUnitSphere(),Rotation()andColorHSV() QuantumLookupTables- a global SO that aggregates LUTs. By default it is created in user Resources, but can be moved around and be made addressable. To fully take advantage of that, consider addingQUANTUM_ENABLE_ASYNC_LUT_LOADINGdefineUnityJsonUtilityConvert.SerializeObjectsupport for[SerializeReference]attribute, enabling standalone/plugin build to Unity assets serialization- Any Quantum system types now supports a system hierarchy and 
SystemGroupandSystemMainThreadGroupdo not have to be explicitly used or derived - Toggling systems using the 
SystemBase.RuntimeIndex, which is used by the Quantum State Inspector Windows to toggle individual systems - Physics 
QueryOptions.HitSolidsflag to have queries checking all non-trigger colliders - Added an overload for 
NavMesh.FindRandomPointOnNavmesh()that includes the frame and makes the result much more reliable - An alternative method to find a random position on the navmesh 
FindAnyRandomPointOnNavmesh(), it will be more reliable but imprecise at is considers the entire triangles inside the radius - Added the culling interface 
IQuantumEntityViewCullingthat can be added to theEntityViewUpdaterto custom cull entity views - Shape handles drawing API in 
QuantumColliderHandlescan now also be used in user scripts - Upgraded to Photon Realtime 
5.1.5, read thechanges-realtime.txtfor more details 
Changes
- LUTs moved from the 
Photon/Quantum/Resources/LUTfolder toPhoton/Quantum/Runtime/RuntimeAssets/LUT, please move the files by hand after upgrading QuantumMapDatano longer statically referencesMapassetQuantumMapData.Assetwas made obsolete - useQuantumMapData.GetAssetorQuantumMapData.AssetRefinstead- The 
[FormerlyNamed]DSL attribute now also works with component names without theQPrototypeprefix: to rename componentFootoBaradd the attribute[FormerlyNamed("Foo")] - Renamed 
Frame.PlayerCounttoFrame.MaxPlayerCountfor more clarity that this property does not represent the number of connected players - Searching 
EntityViewComponentson an entity view now usesincludeInactive: trueas default which can be disabled by setting the flagQuantumEntityViewFlags.DisableSearchInactiveForEntityViewComponents - Removing 
QuantumAsyncOperationExtensionfrom Unity 6 as they rolled out their ownAsyncOperationAwaitableExtensions Frame.Culledmethod was renamed toIsPredictionCulledto avoid confusion with the existingIsCulledmethod. The old method is kept as an obsolete API- Optimized the API that uses 
NavMeshRegionMaskby adding theinkeyword to the parameter - The Quantum Hub will not show a completed checkmark if the 
QuantumUnityDBasset is missing - Marked 
UnmanagedTriangleArray.UsedCountas obsolete - Renamed 
StateInspector > SystemOptions > Hide DisabledtoShow Disabled 
Bug Fixes
- Fixed: An issue that caused the 
QuantumHubto generate memory leaks in Unity 6 - Fixed: An issue that caused the party room creation to get stuck during "Fetching Regions" in Unity 6 and 
WebGL - Fixed: An issue that caused the Party UI screen copy party code button to not work in 
WebGL - Fixed: An issue that could cause view objects of hijacked entities to be created a frame a later
 - Fixed: An issue that caused the debug version of 
Quantum.Deterministic.dllto not throw assertions - Fixed: An issue that caused the 
StateInspectorsystem hierarchy to not collapse properly - Fixed: An issue that caused the Quantum game gizmos to reference a random 
MapDataandEntityViewUpdaterto access theGameObject-selected state for example - Fixed: Issues during migration from Q2 by adding redundant namespaces
 - Fixed: An issue that cause cause extensive object searching every frame inside 
InvokeGizmoUser() - Fixed: An issue that caused the 
InputDirectionMagnitudetype to have a wrong magnitude - Fixed: An issue that caused 
SystemMainThreadGroupandSystemGroupto be stripped from builds and now marks them as [Preserve] - Fixed: An issue that could cause desyncs when using DynamicMap with toggleable static colliders during late-join
 - Fixed: An issue in 
DynamicMapmesh serialization when there were pockets of unused triangles in the all-triangles buffer - Fixed: An issue that caused 
FindFirstObjectByType()to be called excessively in the menu scene - Fixed: An issue that could caused exceptions when switching inspector windows and using collider handles
 - Fixed: Am issue that caused toggleable 3D static mesh colliders to be re-injected into physics engine during reset regardless of its toggleable state
 - Fixed: An issue in 2D Physics engine when using 
HJGSsolver that could potentially cause a crash due to an internal buffer overflowing - Fixed: An issue that caused the 2D capsule missed the pseudo height property in the editor
 - Fixed: An issue that could cause 2D Capsule-Box collisions to be incorrect on rotated box colliders
 - Fixed: An issue that caused the contact point between the capsule and the circle overlap to be on the surface of the wrong shape
 - Fixed: An issue that caused 2D collider prototypes with scaled source colliders without 
QUANTUM_XYto scale the wrong axis on their shape prototypes - Fixed: An issue that caused 2D static polygon colliders to use local scale instead of use the GameObject lossy scale
 - Fixed: An issue that caused GC allocations 3D physics queries
 - Fixed: An issue that caused compile errors when removing physics or physics 2D modules from the Unity project
 - Fixed: An issue that caused the scene mesh to not be updated when resizing triangles
 - Fixed: An issue that caused imported 
NavMeshLinksto not beMainAreawhenImportRegionModeis set toAdvancedmode and not specifying aQuantumNavMeshRegionscript for the link - Fixed: An issue that caused imported 
NavMeshLinksto not beMainAreawhenImportRegionModeis set toDisabled - Fixed: An issue that caused the 
NavMeshAreaandNavMeshGridgizmo to not be drawn correctly, now selected navmesh gizmos are drawn when selecting the relatedQuantumMapNavMeshUnityscript - Fixed: An issue that caused the 
SessionRunnerto fail withParameter name: schedulerwhen usingShutdownAsync() without prior usingStartAsync() - Fixed: An issue that caused the multi runner sample to create a different 
AppVersionon every start which could lead to the Photon cloud triggering security measurements and blocking connecting attempts - Fixed: An issue that caused the plugin to throw an exception when trying to dump contents of an array of Enums
 - Fixed: An issue that caused an 
AuthOncewarning when connecting to a local server after loading the local server app settings on thePhotonServerSettingsinspector 
3.0.2
Stable
Build 1639 (Feb 25, 2025)
Breaking Changes
- The 
FrameTimerAPI has been revised (too verbose and complicated to use): the concept ofIsExpiredwas replaced byIsRunning, other property names were renamed to be more compact e.g.TimeInFramesSinceStart()toFramesSinceStart(), all return values are notnullableanymore and theValuefield was renamed toTargetFrame.Obsoletetags help to quickly migrate. 
What's New
- Added player and system hierarchies to the StateInspector (toggle the StateInspector using 
CTRL+T) - Added prediction culled status icons to entities in the StateInspector
 - Added 
Edit Collidercontrols for Quantum colliders to the Unity inspector - Added center of mass gizmos
 - Added 
IntVector2andIntVector3property drawers - Added enable-CRC option to 
PhotonServerSettingsandMatchmakingArguments - Added 
LocalActorNumberto Quantum replays which can be assigned to aIDeterministicReplayProviderto makeDeterministicSession.IsLocalPlayer(PlayerRef)-checks work as the original recordings - Added support for loading Addressable scenes, which need to be marked with the 
QuantumSceneslabel (inside theAddressables Groupswindow) - Stepping the Unity Editor during pause mode now only progresses one frame at the time in local mode
 - Added virtual user callbacks 
OnConnect(),OnConnected(),OnStart(),OnStarted()andOnCleanup()to theQuantumMenuConnectionBehaviourSDKclass - Added properties to overwrite the 
RoomOptionsand set initialIsVisibleorIsOpenusing the Photon Realtime MatchmakingExtensions API - The 
QuantumDotnetBuildSettingsasset can optionally specify the dotnet command path used to create and compile the project - Added 
MoveTowards(FP, FP, FP)method toFPMath - Added 
GetSetCount()andIsAnySet()methods to the generatedBitSetclasses - Added new built-in types for input: 
InputDirection,InputDirectionMagnitudeandInputPitchYaw - Added 
Contains()methods to bothFPBoundsclasses - Added an optional 
TransformSpaceparameter toTransform3D.Rotate(defaults toLocalspace as before) - Added CodeGen support for multiple newline-separated attributes for fields
 - Added CodeGen support for decimal literals in attributes (e.g. 
[RangeEx(0, 0.25)]) 
Changes
- Increased the max navmesh region count from 
128to512, navmesh assets have to be re-baked to enable more regions - The demo inputs reuses built-in input types now
 - Frame dumps no longer print 
Ptr.Offsetfields, which are not guaranteed nor required to be the same in all clients and could cause false-positive diffs LiteNetLibintegrated as a merged.csfile, which simplifies toggling profiling on and off, at a possible cost of increased compile times whenQUANTUM_ENABLE_REMOTE_PROFILERis enabled- Gravity is now fully integrated at the beginning of the Physics Engine update, instead of in two steps, preventing residual velocity when the object is still
 SimulationConfig.MinContactInverseMassnow also applies to 3D Legacy Gauss-Seidel solver, helping prevent impulse spikes when perceived mass is out of usable rangeSimulationConfig.ThreadCountwill now display an error on Editor if smaller than 1 and the value is clamped when the asset is loaded- Quantum asset shortcuts in the 
Global Configswindow now iterate over multiple instances on each click Transform3D.RotateAround()now considers the axis parameter as being defined in World space (same as in Unity'sRotateAround) instead ofLocalspace- Changed the Quantum Hub shortcut on Mac to 
Ctrl-Hto avoid clashing with the MacOSHideshortcut 
Removed
- Removed the method 
CreateProfiler()from theIRunnerFactoryinterface FPQuaternion.SimpleLookAt()is now marked as obsolete, useLookRotation()insteadQUANTUM_REMOTE_PROFILERis obsolete, useQUANTUM_ENABLE_REMOTE_PROFILERinsteadAssets/Photon/Quantum/Assemblies/LiteNetLib.dllcan be deleted from the project
Bug Fixes
- Fixed: An issue that could cause an 
ArgumentOutOfRangeExceptionduringDeterministicNetwork.GetRpc()when using multiple local players - Fixed: An issue that could cause a 
NotSupportedExceptionthrown byDummyPropertyDrawerif custom property drawing system is used (e.g. Odin, but withQUANTUM_ODIN_DISABLEDdefined), a one-time warning is logged now instead - Fixed: An issue that could cause a 
DivideByZeroExceptionin 2D and 3D Physics Engines when CCD is enabled - Fixed: An issue that caused a 
QuantumEntityViewComponent.EntityRefif the entity view isnull - Fixed: An issue that could cause an 
IndexOutOfRangeExceptionexception is thrown when using a wrong triangleUsedCountinDynamicMap - Fixed: An issue that caused exceptions when 
SceneViewComponentswere destroyed before theEntityViewUpdaterhad a chance to add them properly - Fixed: An issue that could cause a 
NullReferenceExceptioninsideComponentPrototypeSetduringInitialize() - Fixed: An issue that caused a 
NullReferenceExceptioninside 2D PhysicsCheckOverlap()API when the Hit argument referenced a static polygon collider - Fixed: An issue that caused a UnityEditor crash on 
Create->Undo->Redowhen creating a 3D Character Controller Entity - Fixed: An issue that could cause a crash when undoing & redoing Quantum gameObject creation in the editor for a Quantum gameObject with a parent
 - Fixed: An issue that caused errors during instantiating systems that have a 
nameparameter inside their constructors but were no setting the name in theSystemsConfig - Fixed: An issue that caused compiler errors when using 
IntVector2orIntVector3as dictionary keys - Fixed: An issue that caused jitter on entity view interpolation when the simulation 
Frame.DeltaTimewas set to a different value than the inverse of the simulationUpdateRate - Fixed: An issue that caused the 
QuantumUnityComponentPrototypereferences not being properly baked on maps - Fixed: An issue that caused the 
.qprototypeassets not being refreshed occasionally on prefab changes - Fixed: An issue that caused 2D static capsules to be added to the wrong list in 
StaticColliderinQuantumMapData - Fixed: An issue in 3D Raycasts resolved against Capsule colliders that would cause hit normals to be incorrect
 - Fixed: An issue that caused the StaticMesh 
SmoothSphereMeshCollisionoption to be disregarded - Fixed: An issue with Physics Queries resolved against 2D and 3D Capsules that would cause the hit 
Pointto not always be at the surface of the collider hit - Fixed: An issue that caused the 2D and 3D Physics Query hit point to not be computed against Capsule colliders unless the 
ComputeDetailedInfooption was set - Fixed: An issue that could cause 3D Capsule-Capsule collision to be missed on rotated colliders
 - Fixed: An issue that caused 
DynamicMapstatic colliders to not properly be rendered as gizmos - Fixed: An issue in 
DynamicMapthat caused moved colliders to not update theStaticData.ColliderIndex - Fixed: An issue in 
DynamicMapthat caused the triangle capacity to not be updated when callingReserveCapacity() - Fixed: An issue that caused 
GetPlayerData()to not return player data for the new local player during theOnLocalPlayerAddConfirmedcallback - Fixed: An issue in 
FrameTimerPrototypethat materialized frame counters with0leading to an unexpected state - Fixed: An issue that caused multiple navmesh regions encoded on triangles to be missed under certain conditions when performing 
LineOfSight(),FindClosestTriangle()or similar methods - Fixed: An issue that caused the 
Draw.Shape2Dbox to be incorrectly drawn - Fixed: An issue that caused nested assets with AssetBundles to be not loaded correctly
 - Fixed: An issue to support new and legacy InputSystem by introducing the 
QuantumUnityInputSystemWithLegacyFallbackscript - Fixed: An issue in 
FP.FromString()that parsed.1correctly but-.1incorrectly - Fixed: An issue that caused the CodeGen to crash if a 
.qtnfile contains the/character - Fixed: An issue that caused the TMP text to be invisible after installing the menu scene from the Hub
 - Fixed: An issue that caused exceptions and broken Unity input for projects migrating to the new Unity input systems package due to a Unity bug
 - Fixed: Added missing 
Sirenix.Odinreference - Fixed: An issue that could cause multiple 
[DrawIf]attributes to occasionally be ignored 
3.0.1
Stable
Build 1609 (Jan 14, 2025)
Bug Fixes
- Fixed: An issue that could caused late joiners to desync after toggling systems on or off
 
Build 1599 (Dec 05, 2024)
Bug Fixes
- Fixed: An issue that caused exceptions when 
SceneViewComponentswere destroyed before theEntityViewUpdaterhad a chance to add them properly - Fixed: An issue with supporting new and legacy InputSystem by introducing the 
QuantumUnityInputSystemWithLegacyFallbackscript - Fixed: 
DynamicMap.RemoveCollider2Dnow properly updatesStaticData.ColliderIndexof moved colliders 
Build 1595 (Dec 03, 2024)
Bug Fixes
- Fixed: A warning shown in Unity about using obsolete API (
EnableTaskProfiler) - Fixed: An issue that the 
QuantumStatsprefab was using a Quantum logo from the menu package - Fixed: 
QuantumDotnetProjectSettings- support forPackages/paths 
Build 1594 (Nov 29, 2024)
What's New
- Added a text viewer for Quantum QTN assets in the Unity inspector
 - Added support for the 
[OnlyInPrototype]attribute - applied to a field will not include the field in the state object, only in its prototype, an alternative approach is to apply it to a type in[OnlyInPrototype("fieldType", "fieldName")] - Added support for 
refparameters in Quantum signal arguments - Added support for using 
inputin DSLstructsand components - Added 
Frame.AddAsset(AssetObject, AssetGuid)andDynamicAssetDB.AddAsset(AssetObject, AssetGuid)- a way of adding dynamic assets with a GUID known ahead of time, the GUID needs to be ofAssetGuidType.DynamicExplicittype - Added support for multithreading in WebGL if enabled in Unity Editor 6+
 - The Add-Entity-Component menu on 
QuantumEntityPrototypeis now sorted alphabetically and searchable - Added a demo input unitypackage that can be used to quickly setup Quantum input for most common game genres
 QuantumEditorSettings"Enable Task Profiler" build feature - enables task profiler in builds. Behind the scenes, all it does is it addsQUANTUM_REMOTE_PROFILERdefineQuantumTaskProfilerWindowwill now displayQUANTUM_REMOTE_PROFILER not definedmessage in source selection dropdown, if the define is not enabled for the current platform- The demo menu now listens to session shutdown events to be able to react on unexpected errors
 - The Quantum graph profiler and the Quantum stats prefabs can now be added to scene using the Quantum menu
 - Added a simple navmesh region import option that directly maps Unity navmesh regions to Quantum navmesh regions, this mode is easy to set up, but the maximum number of regions is limited to 30. Toggle the 
ImportRegionModeon the navmesh script. TheImportRegionfield is marked as obsolete and will automatically be converted toAdvancedmode for projects that are upgraded - Added new 
structsIntVector2andIntVector3to the Quantum math libraries which can also be used inside the DSL - Added an optional 
maxLengthparam toBitStream.SerializeArray()andSerializeArrayLength, it can be used to secure for example command deserialization against unwanted large buffer allocations - Decoding and encoding can now be done using 
DeterministicCommandSerializer.TryDecodeCommand()andEncodeCommand()methods - Added 
RotateAround()method to theTransform3D - Added 
GetIterator()method to theRingBuffer<T>class - Added 
CreateRuntimeDeterministicGuid()method to theQuantumUnityDBclass to be able to create deterministic Asset GUIDS used by static assets added at runtime to the DB QuantumUnityDB.AddAsset()will now generate a deterministic GUID if none was provided- Added the 
Capacityproperty to 2D and 3D compound shapes - Added 
RemoveAllColliders3D()andRemoveAllColliders2D()toDynamicMapto remove all colliders in one shot - Added Gizmo toggle for debug draw calls (i.e. Draw.Box)
 - Added 
TriangleCCW.VertexHashMapper, a helper class that can be used to serialize triangles with shared vertices to aByteStreammore efficiently - Added 
ByteSerializerHashMapper<T>, a helper class that can be used in combination with aByteSerializerto avoid fully serializing multiple instances of the same value - Added 
DynamicMap.SerializeRuntimeTrianglesand.DeserializeRuntimeTrianglesvirtual methods for custom (de-)serialization of runtime triangles - Added 
DynamicMap.TriangleCcwSerializertype, an improved triangle serializer for built-in or custom serialization - Added 
DynamicMap.TriangleSerializermember, an improved triangle serializer for built-in or custom serialization - Added an API to 
DynamicMapto mass reserve colliders and remove triangles 
Changes
QuantumGame.ProfilerSampleGeneratedis now obsolete and no longer functional. Use the new callback (CallbackTaskProfilerReportGenerated) instead- The 
QuantumEntityViewComponentdoes not receive update callbacks anymore when theGameObjectorBehavioris disabled - Upgraded to Photon Realtime version 
5.1.2, seechanges-realtime.txtfor more details, the updates introduces debug and release dlls and it's best to delete thePhoton\PhotonLibsfolder before upgrading - Systems in 
SystemsConfignow display system type and name instead ofElement <index> - Removing 
TRACEdefines from release dLLs QuantumMapDataBaker.UpdateManagedReferenceIds()method is now public, allowing the creation of new entity prototypes during custom map-baking callbacksQEnumsare now drawn with Odin-style drop-downQuantumUnityLoggermoved toQuantum.Logassembly, use partialQuantumLogInitializer.InitializeUnityLoggerUserto customize- Added 
QUANTUM_LOGLEVEL_*conditional attributes toLogstatic methods, which means that logs below the current log level will be compiled out completely QUANTUM_LOGLEVEL_TRACEis now obsolete. To enabled trace logs, addQUANTUM_TRACE_*defines or useQuantumEditorSettingseditor- The 
QuantumStatsUI got a visual upgrade - Debug draw (e.g. 
Draw.Sphere()now respects the scene and game view gizmo toggles - Clicking 
QuickMatchin the sample menu now opens a popup when missing the Photon AppId - Unity navmesh import now ignores disabled or deactivated 
NavMeshLinksandOffmeshLinks - Improved the Quantum navmesh baking performance, for example FallbackTriangle generation is now optional by setting 
NavMeshBakeDataFindClosestTriangle.None - The Quantum Hub is now data-driven and can be used by Quantum sample projects
 QuantumEditorMenuDllTogglenow has key methods and properties exposed as public- Increased the size of a button on the in-game menu to be more usable on mobile devices
 - Reduced the serialization size of triangles in a DynamicMap
 
Bug Fixes
- Fixed: Dotnet generate project and build on Mac
 - Fixed: An issue that caused the 
ActorIdof clients displayed as0on frame snapshots when using sever simulation - Fixed: An issue that caused the layer import buttons to not be visible
 - Fixed: An issue that caused creating BinaryAsset spams log with errors, until the file is saved
 - Fixed: An issue that caused the 
FrameTimer.IsRunning()returningtruewhen it's invalid - Fixed: An issue that caused the predicted frames to be used for initial entity view placement and 
Activate(Frame)callbacks when verified bind behavior was selected - Fixed: An issue that caused an error log flood when deleting an entity view controlled by the EntityViewUpdater even when setting 
ManualDisposal - Fixed: An issue that spammed error logs when a disconnect was not detected and the online simulation kept running
 - Fixed: Performance of 
ShapeConfigDrawer,QuantumEntityPrototypeEditorandQuantumEntityViewEditorimproved - Fixed: The Asteroids demo now works correctly with HDRP and URP
 - Fixed: Ensure that Asteroids renders correctly in builds for all render pipelines
 - Fixed: An issue in the instant replay demo with the order of cleanup steps that caused the view to dispose before the 
OnReplayStoppedcallback - Fixed: 
EntityPrototype had unsorted componentstrace message when loading prototypes and maps - Fixed: 
QDictionaryandQHashSetno longer throwOverflowExceptionin case their respective Key and Value types have a negative hash code and numeric casts arecheckedby default - Fixed: An issue in the 2.1 migration for upgrading AssetObjects to only consider paths from 
QuantumEditorSettings.AssetSearchPaths - Fixed: 2D Edge-Edge false-positive collisions and wrong de-penetration
 - Fixed: Exceptions in the 2D Physics Engine when using polygons inside compound shapes
 - Fixed: An issue in 
PhysicsEngine2D.Api.CheckOverlap()that modified the rotation of its argument if the shape had a rotation offset - Fixed: An issue in the collision detection of two 3D capsules that resulted in different 
Extentsto be used - Fixed: An issue that could cause incorrect normal vector computation for capsule-box collision 2D
 - Fixed: An issue that was accepting negative values for capsule 2D
 - Fixed: The drawing of capsules 2D when the extent is greater than the radius
 - Fixed: The penetration computation between two capsules 2D using the radius of the two capsules
 - Fixed: The penetration between the circle and polygon shapes when the contact points are the vertices of the polygon
 - Fixed: An issue in collision detection capsule 3D vs. triangle
 - Fixed: An issue in 
PhysicsEngine3D.Linecast()vs shapes that was returning the incorrect UserTag - Fixed: An issue that could cause 
FPoverflow exceptions on 2D and 3D shape casts with larger objects - Fixed: An issue that could cause 
FPoverflow exceptions on raycasts by increasing the range of usable sphere radii and ray lengths - Fixed: Issue on 
DynamicMap.AddCollider2Dthat was causing 2D Physics Engine to not be properly reset - Fixed: DynamicMap.FromStaticMap is now generic
 - Fixed: DynamicMap crashing builds when editing a disabled collider
 - Fixed: 
DynamicMap.RemoveMeshCollidernot updating collider indices correctly - Fixed: Invalid 3D collider rotations are automatically set to  
Identitywhen being added to theDynamicMapusingAddCollider3D() - Fixed: An issue in the Unity scripts with 
QuantumEntityViewUpdater.AddViewComponent()that caused view components to not get added after toggling them on/off - Fixed: Preloading Addressables in 
QuantumRunnerLocalDebugcorrectly attempts to loadAssetObjectinstead ofUnityEngine.Object, only loading the latter will make sure assets are properly preloaded - Fixed: Unity scripts leak into dotnet simulation project generation
 - Fixed: Re-exposed the 
DrawShape2DGizmoandDrawShape3DGizmomethods for usage in user code - Fixed: 
LayerMaskinspector overriding property values in multi-select mode - Fixed: An issue that caused a stack overflow when baking a scene prototype with 
EntityReffields if Quantum 2 migration is enabled - Fixed: Incorrect Unity version check for 
UnityEngine.AI.NavMesh.GetAreaNames - Fixed: A typo of field 
DeltaTimeTypeinside theQuantumRunnerLocalDebugandQuantumRunnerLocalReplayscripts - Fixed: 3D Shape prototypes not displaying Rotation offset field in the Editor
 - Fixed: An issue in the demo menu party screen that failed to connect to party codes
 - Fixed: An issue in the replay menu that prevented replays to be exported when only 
RecordingFlags.Inputwere selected - Fixed: 
QuantumMenuConnectionBehaviour.RequestAvailableOnlineRegionsAsync()properly returns a faulted task on errors - Fixed: An issue that caused a wrong rotation on the 2D variant of 
Draw.Rectangle() - Fixed: 2D and 3D Collider Prototypes applying scale twice when using a child Source Collider
 - Fixed: An issue that caused changing the scene in the QuantumMenu not to be saved to PlayerPrefs
 - Fixed: An issue in the Quantum menu that caused the preferred region to not be previewed correctly in the main menu
 - Fixed: An issues that caused Frame Heap errors when late-joining with a snapshot when a CompoundShape buffer had been expanded
 - Fixed: Removed debug assertion that expected all inputs to be polled exactly once on the clients, which might not be the case in extreme conditions
 
3.0.0
Breaking Changes
- The Quantum SDK is now a unitypackage.
 - Renamed PhotonDeterministic.dll to 
Quantum.Deterministic.dlland QuantumCore.dll toQuantum.Engine.dll. - Upgraded network libraries to Photon Realtime 5 (see Realtime changelog separately).
 - All Unity-only scripts have been put in 
Quantumnamespace and have been givenQuantumprefix (e.g.MapData->QuantumMapData,EntityPrototype->QuantumEntityPrototype). - The 
PhysicsCollider2D and 3D components now have a field calledLayer Sourcewhich defines where the layer info should come from. This might require colliders layers to be set again; - The 
AssetBaseclass is no longer functional. AssetObjectnow derive fromUnityEngine.ScriptableObject. This means that there is no longer the need forAssetBasewrapper and all the partialAssetBaseextensions need to be moved toAssetObjectdefinitions. Tools that migrate asset data without data loss are provided on our website.AssetObjectsneed to be created withAssetObject.Create<T>orT.Create.- To add a new list of assets (e.g. with Addressables), mark a method with 
[QuantumGlobalScriptableObjectLoaderMethod]attribute. IAssetSerializerinterface changed, it also deals withRuntimePlayerandRuntimeConfigserializationAssetObjectsreferencing otherAssetObjectsdirectly (not byAssetRef<T>) are supported, but will no longer be fully serializable by the defaultIAssetSerializer. This should be a concern for when any non-Unity runner is used or such assets are used in theDynamicDB.- More consistent 
DynamicAssetDBbehavior - assets can be added and disposed only during verified frames. Also,AssetObject.Disposedis called whenever a dynamic asset is disposed. Previous behavior can be restored withQuantumGameFlags.EnableLegacyDynamicDBModegame flag - Unless 
QuantumGameFlags.EnableLegacyDynamicDBModeis used, all assets in theDynamicAssetDBwill get disposed upon shutting down simulation. - Removed "standalone assets" / 
QPrefabs. They have been fully replaced with standalone prototypes. All_datafiles should be removed. - Removed built-in support for AssetBundles.
 RuntimeConfigandRuntimePlayerare serialized with Json when send to the server.- Added the 
$typeproperty to Json serializedRuntimeConfigandRuntimePlayerto be able to deserialize the file outside of Unity, useQuantumUnityJsonSerializer.SerializeConfig(Stream stream, IRuntimeConfig config)to export RuntimePlayer and RuntimeConfig or add"$type":"Quantum.RuntimeConfig, Quantum.Simulation"or"$type":"Quantum.RuntimePlayer, Quantum.Simulation"to the respective Jsons. MapDataBakeCallbacksimplemented in a custom assembly it has to be made known by adding this[assembly: QuantumMapBakeAssembly]to the script.- Changed the timing around the 
GameStartedcallback. It is now only called once per started Quantum session and, when waiting for a snapshot, it will be called after the snapshot has arrived withisResync= true. - Collections used in events are now passed by their appropriate pointer type (e.g. 
list<T>->QListPtr<T>). Was:Ptr Frame.Heapis no longer aHeap*but instead a reference to a managedFrameHeapinstance, which shares the same API and adds allocation tracking capabilities. Direct usages offrame.Heap->can be replaced byframe.Heap.instead.- The default backing type for 
flagsin DSL is now Int32 (was: Int64) - Added  the 
isResyncparameter to theGameStartedcallback (which is true, when the callback is invoked after the game has been re-synced for example after a late-join). - Changed 
QuantumNavMesh.ImportSettings.LinkErrorCorrectiontype frombooltofloat(representing a distance). NavMeshRegionMask.HasValidRegions()now returnstruefor the "MainArea", useHasValidNoneMainRegioninstead to only query for non-MainArea regions- AppSettings.RealtimeAppId was replaced by AppSettings.QuantumAppId, the Unity inspector will automatically swap them when the PhotonServerSettings asset is inspected.
 - Changed the replay file format and renamed it to 
QuantumReplayFile, marking the old name obsolete. Asset DB, RuntimeConfig and InputHistory are now saved with a Json friendly wrapper that works around how verbose the Unity Json tool saves byte arrays, reducing the replay file size when saved in Unity a lot, - The Quantum3 server will automatically block all non-protocol messages and all Photon Realtime player properties. Unblock them using the Photon dashboard and set 
BlockNonProtocolMessagesandBlockPlayerPropertiestofalse. - Removed 
DeterministicGameMode.Spectating(useMultiplay) because all online Quantum simulation are started in spectating mode by default until a player is added. - Also check out other references
- Migration Guide: 
https://doc.photonengine.com/quantum/v3/getting-started/migration-guide - What's New: 
https://doc.photonengine.com/quantum/v3/getting-started/whats-new - Photon Realtime 5 changelogs (
Assets\Photon\PhotonLibs\changes-library.txt,Assets\Photon\PhotonRealtime\Code\changes-realtime.txt) 
 - Migration Guide: 
 
What's New
- Added input delta compression.
 - Increasing minimum Unity version to 2021 LTS.
 - New start online protocol to support adding and removing players at runtime.
 - Added Quantum webhooks for the Photon Public Cloud.
 - Increased maximum player count to 128.
 - Added support for up to 512 components (use 
#pragma max_components 512to enable) - Added predicted commands.
 - Added support for capsule shapes.
 - Added snapshot interpolation mode for entities.
 - Added 
QuantumHudwindow that displays onboarding information and installs Quantum user scripts, assets and demos. - Added a new graphical demo menu that can be installed with the QuantumHub and includes MPPM support for Unity 6.
 - Added the Asteroid game sample that can be installed with the QuantumHub.
 - Added a new GUI to toggle Quantum gizmos.
 - Added async support for connection handling.
 - Added support for assets that are neither a Resource nor Addressable. Direct references to such assets are stored in 
QuantumUnityDB. QuantumUnityDB.Get[Global]AssetGuids- ability to iterate over GUIDs, based on asset types.- Added support for 
netstandard2.1. - Added full support for Odin inspector.
 - Polished Quantum Unity inspector and added code documentation foldouts.
 - Added a Newtonsoft-powered Json deserializer can now read 
[SerializeReferences](uses theQuantum.Json.dlldependency for non-Unity platforms). - Added a data-driven way of adding systems (see 
SystemsConfig.asset). - Added 
AllowedLobbyPropertiesdashboard variable to restrict lobby property usage for Photon matchmaking. - Added 
Quantum.Log.dlldependency, which introduces theQuantum.LogTypeand can clash withUnityEngine.LogTypewhen migrating. - Added Quantum debug dll toggle to switch between Debug and Release Quantum dlls in Unity
 - Added position and rotation teleport support for Transform2D, Transform3D and QuantumEntityView.
 - Increased max navmesh region count to 128.
 - Added 
Frame.PlayerConnectedCount. - Added 
FrameThreadSafe.GetGlobal()extension method. - Added 
EntityViewComponents, a quick way to add view logic to the Quantum entity views. - Added entity view pooling (add 
QuantumEntityViewPoolto theEntityViewUpdatergame object) - Added dotnet Quantum dll build (see 
QuantumDotnetBuildSettingsasset). - Added a dotnet console replay runner app project that is generated to the non-Unity simulation project.
 - Added a tool to quickly convert Unity colliders to Quantum colliders 
GameObject/Quantum/Convert Colliders. - Added Quantum Unity script templates.
 - Added 
DynamicMapcore type, a specialization of Map as a Dynamic Asset capable of triggering internal updates when modifying static colliders and of serializing runtime mesh data. 
Changes
- Unified CodeGen tools into one that is used from the UnityEditor.
 - Unified QuantumRunner and SessionContainer into the 
SessionRunnerclass and moved it to theQuantumGameproject. - Component prototype suffix has been changed from 
_PrototypetoPrototype. - Component prototype wrapper prefix changed from 
EntityComponenttoQPrototype(e.g.EntityComponentTransform2D->QPrototypeTransform2D). Frame.Assetsis now obsolete. UseFrame.FindAsset<T>instead.AssetObjectConfigAttributeis obsoleted and no longer functional.AssetObjectis no longer restricted to being in the same assembly as Quantum simulation code. If the simulation code needs to access such assets, it can either use a base class or an interface. This allowsAssetObjectsto be extended with any Unity-specific data.AssetRefTgenerated types are now obsolete, useAssetRef<T>instead.asset T;andimport asset T;are no longer needed in .qtn files. Any type derived fromAssetObjectis already a fully functional Quantum asset now and can be used withAssetRef<T>fields.AssetObject.Guidis now deterministic by default, based on Unity's GUID andfileId. When needed can be overridden (e.g. for assets imported from Quantum 2.1) - such overrides are stored inQuantumEditorSettings. TurningAssetGuidsdeterministic speeds upQuantumUnityDBby an order of magnitude.UnityDBhas been obsoleted andAssetResourceContainerhas been removed.QuantumUnityDBreplaced both and uses more consistent method naming.- Prototype assets for new prefabs are created as standalone assets, with 
EntityPrototypesuffix andqprototypeextension. This fully decouples loading prototypes during simulation from their source prefab, improving asset load times and avoiding deadlock issues with Unity's job system. - All Quantum assets located in asset search paths are now marked with 
QuantumAssetlabel. - Moved NavMesh baking to the 
Quantum Simulationproject to bake parts deterministically (not the Unity navmesh export). - Removed the 
MovementType.DynamicBodyandMovementType.CharacterController2Dfrom the NavmeshAgentConfig. SelectMovementType.Callbackinstead and perform movement during theISignalOnNavMeshMoveAgentcallback. The removed options were only good for prototyping and led to a lot of questions. - Changed 
QuantumNavMesh.BakeDataand related data structures to only use fixed point vectors. - Replaced non-deterministic code (Triangle Normal Computation) in 
BakeNavMesh()with fixed point math. - Moved navmesh link detection and error correction from 
BakeNavMesh()toImportFromUnity(),StartTriangleandEndTrianglenow are set onBakeData.Links. - The MainArea of the navmesh now has its own valid navmesh region (always index 0) and can be toggled on/off and can be properly used for navmesh queries like 
LineOfSight()orFindClosestTriangle(). - Changed 
BakeNavMeshsignature to only use relevant data types. - Replaced the signal 
OnPlayerDataSet(PlayerRef player)withOnPlayerAdded(PlayerRef player, bool firstTime)wherefirstTimesignals this is the first time that this player was assigned.. - Added 
OnPlayerRemoved(PlayerRef player)signal. - Added a parameter to the 
GameStartedcallback (isResync: true, when the callback is invoked after the game has been re-synced for example after a late-join). - Removed the 
ReleaseProfilerconfiguration from the code solutions and replacing it with a flag inStartParameters.GameFlagscalledQuantumGameFlags.EnableTaskProfiler. - Removed API that was deprecated in Quantum 2.1.
 - All Quantum Unity MonoBehaviours now derive from 
QuantumMonoBehaviour. - All Quantum Unity ScriptableObjects now derive from 
QuantumScriptableObject. - The state inspector now shows all relevant configs when selecting the Runner.
 - Restructured the Quantum Unity menus.
 Navigation.Raycast2D()provides information about the border index that generated the closest hit.- Reduced the navmesh binary asset size, control the serialization options under 
NavMesh.SerializeType. By default meta data is now recomputed during runtime, set toNavMeshSerializeType.FullWithMetaDatato disable it. - Drawing debug shapes for development builds must now be opted in by defining the 
QUANTUM_DRAW_SHAPESdefine (QuantumEditorSettingshas a shortcut to toggle it). - Quantum runtime logging can now be toggled by a 
LogLevelinside theEditorSettings, the default isWARN. - The context 
LayerInfois now exposed inFrameThreadSafe.Layersproperty, similarly toFrame.Layers. Quantum.TypeUtilsis now obsolete
Stable
Build 1548 (Aug 20, 2024)
- Initial stable release
 
RC
Build 1547 (Aug 15, 2024)
What's New
- Added a unity event callback to the 
QuantumDebugRunnerstart sequence - DynamicMap can expand existing mesh collider
 - Added a 
LogLeveltoggle button to the main Quantum Hub screen 
Improvements
- 2D and 3D Physics engines no longer integrate linear velocities that move the transform position out of the FP usable range
 - Instead, a warn will be logged in debug and the velocity will be reset
 
Changes
- Map 
TriangleMeshCellSizeis now calledSceneMeshCellSizeand is an FP value instead of Int32 
Removed
- Obsolete 
QuantumEditorSettings.QuantumSolutionPathproperty, we have not decided if and how we introduce split solution tooling like in Quantum 2 
Bug Fixes
- Fixed: Update used count when removing mesh collider
 - Fixed: Mark free triangles as serializable
 - Fixed: Apply rotations to navmesh links
 - Fixed: The contact point from edge shapes collision in 2D. It was not being converted to the world space
 - Fixed: Refactor MeshTriangleVerticesCcw to allow for simulation baking
 - Fixed: Static box collider rotation offset was calculated incorrectly
 - Fixed: Script compilation errors for Unity 2022.1
 - Fixed: An issue that prevented the frame differ to work during checksum errors
 - Fixed: The collision between capsule 2D and edges when they are parallel
 
Build 1543 (Aug 05, 2024)
Bug Fixes
- Fixed: 
Exception: MemoryIntegrity Check Failed: globals.PlayerConnectedCount overlaps previous field globals.PhysicsSettings on type Quantum.globalserror - Fixed: 
The type or namespace name 'IntPtr' could not be founderror when making a il2cpp build 
Build 1542 (Aug 02, 2024)
What's New
- Physics 
ShapeCastMinIterationssetting to Simulation Config - Add QoL methods to FrameTimer
 - Added XY Toggle to Hub
 - AddMeshCollider() include for pos and rot
 - 2D and 3D JointPrototype.Materialize overloads that receive anchor references instead of a PrototypeMaterializationContext
 - Support to physics QueryOptions and CallbackFlags in the DSL and generated prototypes
 
Improvements
- Physics Shape Cast accuracy when very close to a collider at the cast origin
 FrameTimerhelper methods and properties, along with improvements to the API doc
Changes
- CodeGen - an error is raised if a struct nested in 
inputdefinition hasbuttonfield.buttonfields are only meant to be used directly - Assemblies added to the 
QuantumDotnetProjectSettings.IncludePathsor marked withQuantumDotnetIncludeare added as references to the exported project [RangeEx]attribute supports FP properties- When removing a component T or destroying an entity that 
Has<T>,ComponentCount<T>is now reduced after component-remove signals are invoked instead of before - Changing the coding conventions of script templates to a more common C# style
 - Renamed 
PrototypeMaterializationContext.ComponentTypeIndextoComponentTypeId - Terrain Collider now detects degenerate triangles, logs a warning and does not bake them into the serialized mesh
 
Bug Fixes
- Fixed: 3D Shape Cast queries with DetectOverlapsAtCastOrigin option not working correctly for 3D mesh hits
 - Fixed: AsteroidsWaveSpawnerSystem
 - Fixed: Removed halfHeight from Draw2DCapsuleShape when QUANTUM_XY
 - Fixed: The LineIntersectsAABB function was setting the Y size of AABB as the same values as X
 - Fixed: The size of capsules and circles when using the function Debug.Draw
 - Fixed: Issue with component Filters that caused the 'any' filter rule to be disregarded and the 'without' rule be used in its place
 - Fixed: Using 
entity_refininputcausing "Fixed size input (size: X) is enabled but input size we got was Y" errors - Fixed: Warnings in 
SimulationConfigin standalone project - Fixed: Using unions in 
inputcausing "Fixed size input (size: X) is enabled but input size we got was Y" errors - Fixed: The penetration correction when an object collides with multiple triangles
 - Fixed: 
QuantumGameFlags.EnableTaskProfilerflag having an opposite effect: not passing it inSessionRunner.Arguments.GameFlagsenabled the profiler, passing it in - disabled - Fixed: Inconsistent naming of parameters in 
GetEventTypeCodeGen - Fixed: GC allocs on entering each task profiler section, if task profiler is enabled
 - Fixed: Prototype assets of variant prefabs not being updated if base prefab adds/removes component prototypes
 - Fixed: Quantum Task Profiler data is saved as .dat,json and cannot be loaded without manually renaming it
 - Fixed: Quantum DB Window does not respect the ‘Sync Selection’ option and always syncs selection
 - Fixed: Making the Asteriods sample work in 
QUANTUM_XYmode - Fixed: Added 
Preserveattribute to all Asteroids systems - Fixed: QuantumEditorSettings now has a toggle for Quantum XY
 - Fixed: The collision between capsule 2D and polygon generates normal vectors to the opposite side to the closest edge
 - Fixed: An issue that caused 
SceneViewComponentsto be initialized twice when located as a child ofEntityViewUpdaterand theUpdater field was set - Fixed: Adding the 
Preserveattribute to system templates 
Build 1523 (Jul 10, 2024)
Breaking Changes
- FP multiplication is now rounded instead of being truncated, i.e. rounded towards negative infinity
 
What's New
FP.FromRoundedFloat_UNSAFE- Extension methods 
ToRoundedFP,ToRoundedFPVector2andToRoundedFPVector3 - 2D and 3D Compound Shape method to 
ReserveCapacity HostProfiler.CreateMarker- allows for a lower overhead profiling by creating markers ahead of time
Changes
- Upgraded Photon Realtime to version 
5.0.10 HostProfiler.Init- pass an implementation ofIHostProfilerrather than a set of delegates
Removed
HostProfiler.Start/EndThread- 2D and 3D 
CollisionResultInfo.InvertResultis now internal. The.Normalfield already takes the inverted flag into account 
Bug Fixes
- Fixed: An issue with 
QuantumEntityViewthat caused the error correction to initially glitch in some situations - Fixed: StateInspector - adding components crashing the editor
 - Fixed: DynamicMap.FromStaticMap() does not maintain AllRuntimeTriangles key
 - Fixed: Typo in 
InstantReplayConfig.LengthSeconds - Fixed: 2D and 3D Spring Joint damping ratio not being configurable on the editor
 - Fixed: Migration: initial CodeGen not emitting AssetObject stubs correctly
 - Fixed: Migration: prefab variants occasionally left unaffected by guid transfer / restoring asset data
 
Build 1519 (Jul 02, 2024)
Breaking Changes
- FP constant values have been updated to be closer to their target values 
PiInv,PiTimes2,PiOver2,PiOver2Inv,PiOver4,Pi3Over4,Pi4Over3,Deg2Rad,_0_02,_0_03,_0_04,_0_05,_0_10,Rad_360,Rad_90,Rad_45,Rad_22_50,_1_02,_1_05,_1_10,EN1,EN3,EN4,EN5,Epsilon,Log2_10 
Changes
- Upgraded Photon Realtime to version 5.0.9 (26. June 2024)
 DebugMeshis obsolete now, useQuantumMeshCollider.GlobalinsteadUnlit/Quantum Debug Drawrenamed toUnlit/Quantum Debug- Moved the shader file 
QuantumDebugDraw.shadertoAssets/Photon/Quantum/Runtime/RuntimeAssets - The Quantum Hub installation button is no longer disabled when the installation is detected as complete
 - Iterating 
DynamicAssetDBis much more performant, but still allocates IResourceManagerextensions now use generics to avoid virtual callsQuantum.Jsonand standalone projects now supportISerializationCallbackReceiverinterface- Added 
Odin.SerializationandOdin.Attributesassembly references to Quantum.Simulation. As all assembly references are optional (unless there are compile errors), a project does not need to have Odin installed Photon.Deterministic.PersistentMaprefactored. It is no longerIEquatable, implements visitor pattern and enumeration is much more performant, thought it still allocates a bit- Assets in 
DynamicAssetDBare now reference-counted. Counters are shared by DB instances that are linked to each other due to copy constructor orDynamicAssetDB.CopyFrom. Assets are disposed when their reference count drops to zero, due toDynamicAssetDB.ReplaceAsset,DynamicAssetDB.DisposeAsset,DynamicAssetDB.Dispose(entire db disposal) orDynamicAssetDB.CopyFrom(due to releasing the old state). Note that none of this applies if legacy mode is used 
Removed
- The folder 
Assets/Photon/Quantum/Resources/Gizmoscan be deleted as well as the assetAssets/Photon/Quantum/Resources/QuantumShapes2D.fbx - Unused code from 
Native QuantumGameFlags.EnableLegacyDynamicDBMode- pass in a dynamic DB constructed with legacy mode instead
Bug Fixes
- Fixed: The contact point position in the collision check between capsule and polygon 2D
 - Fixed: The normal direction of the shape cast when the flag DetectOverlapsAtCastOrigin is enabled
 - Fixed: DynamicMap FromStaticMap not binding Entity Views
 - Fixed: SetTriangleUnchecked updates collider index
 - Fixed: The capsule 2D penetration in the corner of then box when the capsule rotation is frozen
 - Fixed: Mesh removal includes AllRuntimeTriangles
 - Fixed: An issue that caused the Quantum graph shaders to not work for VR
 - Fixed: An issue that caused to close the connection at the end of the Quantum online session, although 
ShutdownConnectionOptions.Nonewas selected - Fixed: Made the menu config scene info entries work without setting an explicit 
Name - Fixed: An issue how switching to a 
DynamicMapaffected the scene entities and views of the source map. Now they are left intact and are only removed when switching to a regular map - Fixed: BitStream missing 
ushortextension method - Fixed: An issue in the InstantReplayDemo that prevented the replay from successfully restarting/looping etc
 - Fixed: A compilation error when scripting define 
QUANTUM_REMOTE_PROFILERis enabled - Fixed: NavMesh Gizmos throwing null when starting Quantum
 
Build 1514 (Jun 18, 2024)
- Initial release