This document is about: QUANTUM 2
SWITCH TO

Release Notes 2.1

2.1.7

Stable

Build 1164 (Jun 14, 2023)

Changes

  • Map.StaticColliders3DTriangles is now a SortedDictionary instead of a Dictionary, so triangle sets are inserted already sorted by their mesh collider ID
  • Upgraded to Photon Realtime 4.1.6.25 (05. June 2023)

Bug Fixes

  • Fixed: An issue that could cause allocation-too-large exceptions when a large number of entities were destroyed or had components removed on a single frame
  • Fixed: An issue that could cause Instant Replays to be initialized with the current state of the colliders instead of the state they had when the frame copy was created
  • Fixed: An issue that broke the compilation of the UIRoom.cs script when creating a component named Player. To apply the fix also import quantum_demo.unitypackage
  • Fixed: An issue on the plugin that sent outdated input to connecting clients when running a very low simulation time
  • Fixed: An issue on the plugin that could cause PlayerConnected signals to be missed on the clients when disconnecting and joining a new player at the exact same tick
  • Fixed: Serialization issue on QDictionary and QHashCollection (introduced on v2.1.6)
  • Fixed: Multi-object editing of EntityPrototype components when Entity Component Inspector Mode is set to a value different than Show Mono Behaviours

2.1.6

Stable

Build 1155 (May 11, 2023)

What's New

  • QuantumEditorSettings.MaxArraySizeForInspector - if an array's length exceeds the value (1000 by default), it will not be expandable in the Inspector
  • Memory allocation tracking tool for the Frame Heap, which can detect memory leaks and trace allocations. The tool can be enabled in the Simulation Config (Debug mode only, disabled by default)
  • Debug assertions to check if 2D and 3D Linecast queries have squared magnitude in the FP useable range, logging parameters if an overflow happens
  • Profiling samples when performing Frame copies (Host Profiler only)

Bug Fixes

  • Fixed: Inaccuracies in the 3D EntityView rotation error computation that could cause jitter in the resultant view rotation values
  • Fixed: Issue in CCD collisions against 3D mesh colliders that would cause the body velocity to not be partially integrated up to the first time-of-impact
  • Fixed: QuantumPrefabAsset not unloading properly
  • Fixed: Issue when enabling or disabling toggleable static colliders that could cause multiple colliders to be (en/dis)abled when modifying the state of one (bug introduced on v2.1.5)
  • Fixed: RNGSession.NextInclusive(FP, FP) resolution being always 16 bits
  • Fixed: Support for generic assets with unmanaged, Enum constraints
  • Fixed: Multiple simultaneous calls loading the same Addressable asset ending up in exceptions
  • Fixed: Enforce Windows-style slashes in auto-generated nuget.config when code integration is used
  • Fixed: Physics OnExit trigger callback not being called if the entity had a trigger collider and the static was not trigger

2.1.5

Stable

Build 1144 (Mar 14, 2023)

What's New

  • UnityDB.FindAssetForInspector(string path)

Improvements

  • Reduced the stack frame size used by the 3D box-box narrow collision check

Changes

  • When baking 2D static edges, if the edge is degenerate (zero length), a warning will be logged and the edge will not be baked

Bug Fixes

  • Fixed: 3D broad-phase shape cast API AddShapeCastQuery query options parameter (optional) having ComputeDetailedInfo as default value instead of HitAll
  • Fixed: Desync when resetting to a snapshot with disabled static colliders from a map that is different from the map initially loaded by the resyncing client
  • Fixed: Soft memory leak inside the Frame heap when allocating new QLists
  • Fixed: Resolve PluginDisconnect callbacks when using the MultiClient scripts
  • Fixed: Typo in Map.StaticColliders2D and .StaticColliders3D tooltips
  • Fixed: Debug assertion checks for null QBuffer Ptr fields
  • Fixed: Fixing obsolete warning when using Unity 2022

2.1.4

Stable

Build 1137 (Jan 25, 2023)

What's New

  • AssetObjectConfigAttribute.GenerateAsMainScript - setting to false will add ".Partial" suffix to the generated file and remove inheriting from the base class. User needs to provide their own script matching the AssetBase script's name
  • EntityComponentConfigAttribute.GenerateAsMainScript - setting to false will add ".Partial" suffix to the generated file and remove inheriting from the base class. User needs to provide their own script matching the EntityComponentBase script's name
  • Component type name to exception thrown from ComponentDataBuffer
  • Component type info to exception thrown from component block iterator
  • QUANTUM_VSINTEGRATION_ENFORCE_RELEASE_CONFIGURATION - defining it while using MergeWithVisualStudioSolution option will add Release configuration to the generated solution, if missing
  • EndOfLineCharacters option to quantum.codegen.host.exe.config: an ability to control EOL characters for the codegen. If unspecified, uses whatever TextWriter's default is. See documentation for details
  • QuantumCodeIntegration: ability to override paths to mono/dotnet with QUANTUM_CODE_INTEGRATION_MONO_PATH and QUANTUM_CODE_INTEGRATION_DOTNET_PATH env variables

Improvements

  • QuantumTaskRunnerJobs now implement IDisposable, which is called when the Frame Context is disposed, preventing the task runner from holding references to the disposed session's delegates
  • Improved the accuracy of the inertia tensor of 2D and 3D physics bodies with compound shapes that only have a single primitive shape

Changes

  • QuantumCodeIntegration: For MacOS and when .NET Core is in use, dotnet command line tool will be used to run Unity code generation

Bug Fixes

  • Fixed: AssetBase generated for SimulationConfig is now suffixed with ".Partial" to avoid name clashes in Unity 2022.2.x
  • Fixed: EntityComponent scripts for some built-in components are now merged into AssetTypes.Partial.cs to avoid name clashes in Unity 2022.2.x
  • Fixed: Missing serialization of component data buffers' pending removal count.
    This issue could cause assertion exceptions in Debug and a desync in the Frame.ComponentCount if Commit Commands Mode is set to OnFrameSimulationBegin in the Simulation Config and Remove or Destroy commands were issued during the frame being serialized

2.1.3

Stable

Build 1134 (Dec 19, 2022)

What's New

  • API documentation module for culling-related methods and systems

Improvements

  • Increased the maximum size supported for the total frame heap memory from 2GB to 4GB
  • A warning message is logged in Debug mode if allocating more than 2GB (previously would crash Unity) and an ArgumentOutOfRangeException is thrown if attempting to allocate more than 4GB
  • Default CustomQuantumServer now wraps the session container servicing logic in a try-catch and destroys the container if an exception is thrown
  • Transform3D.Rotate methods now normalize the resultant quaternion by default, avoiding rounding towards zero over multiple operations. An optional parameter can be used to disable the normalization
  • Improved the API documentation of culling methods
  • Map's Physics World Size is now ensured to be in a valid range also when the asset is loaded and not only on the Editor
  • Assertion exception message when the 3D Physics tries to initialize an entry with zeroed quaternion as rotation now states the entity ref or the static collider index of the offending entry

Bug Fixes

  • Fixed: Inability to edit layer 31 in SimulationConfigAsset editor
  • Fixed: "Do not use ReadObjectThreaded on scene objects!" error when importing scenes (.unity) in any of AssetSearchPaths locations
  • Fixed: Unity crash due to size overflow in allocator when trying to allocate or clear more than int.MaxValue bytes (usually when trying to allocate a very large number of frame heaps)
  • Fixed: Serialization issue on collision info structure used to track OnEnter/OnExit physics callbacks, which could cause desyncs
  • Fixed: An issue that caused the NavMeshAvoidanceObstacle velocity not to be recognized for avoidance calculations in some cases
  • Fixed: Assertion exception in the 2D and 3D physics when initializing the simulation with disabled AllowCCD and enabling it in runtime
  • Fixed: An issue on QuantumRunner that caused it to not be accessible by ShutdownAll() after getting disconnected by the plugin (e.g. Snapshot request timed out). Removing the runner from the static registry was moved from Dispose() to OnDisable(). This changed the runner shutdown handling slightly and can be disabled by adding QUANTUM_DISABLE_RUNNER_FIX to the Unity scripting defines (to all required platforms)
  • Fixed: An issue that caused the runner to shutdow twice when stopping a QuantumInstantReplayDemo
  • Fixed: An issue that caused a NullReferenceException when updating a destroyed session

2.1.2

Stable

Build 1129 (Nov 01, 2022)

  • Upgraded the version of Photon Realtime shipped with the Quantum SDK to 4.1.6.18f2 (23. September 2022 - rev6505)

What's New

  • RingBufferInputProvider, an Input Provider that reuses a fixed number of input sets to feed inputs to a simulation. Used by default in the custom Quantum plugin sample
  • QuantumGameFlag that can disable interpolatable states in the simulation, reducing memory allocation and frame copies when there is no use for interpolation (e.g. Spectator and Replay console runners and Server simulations)
  • 2D and 3D Physics Bodies MassInverse properties, a way to access and modify the value directly as it is stored on the component (inverse mass)

Improvements

  • The distribution of generated hash codes when a large number of GetHashCode methods must be code-generated
  • Reduced the allocation of frame heaps when the game mode does not need to allocate all frames instances (e.g. Replay, Server sim and console applications)

Changes

  • On Unity 2019 and newer, Quantum modules are no longer toggled in the Quantum Editor Settings, but are now defined in the PhotonQuantum and PhotonQuantumEditor assembly definitions.
    If these asmdefs are removed from the project, the following modules must be explicitly added to the Project Settings in order to be used: QUANTUM_ENABLE_PHYSICS2D, QUANTUM_ENABLE_PHYSICS3D, QUANTUM_ENABLE_AI and QUANTUM_ENABLE_TERRAIN
  • Unity 2018 - Addressables packages references are not automatically added when toggling QUANTUM_ADDRESSABLES define

Bug Fixes

  • 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
  • Fixed: Custom plugin sample not including the server flag in the game flags, which could cause server-only events to not be raised on the server simulation
  • Fixed: Missing Photon.Deterministic.DeterministicLog.InitForConsole() calls in the default console runners and session containers
  • Fixed: EntityViewUpdater not performing smooth prediction error correction in Spectator mode (rarely necessary) and wrongly performing this correction if the simulation was forced to run in Lockstep
  • Fixed: An issue in the 2D and 3D KCC clamping of MaxSpeed if the current Velocity is in the opposite direction of the intended movement
  • Fixed: TooltipAttribute being ignored for FPAnimationCurve fields
  • Fixed: Quantum shortcut Unity window error message spamming

2.1.1

Stable

Build 1122 (Sep 26, 2022)

What's New

  • Added USER_CODE.txt files to highlight directories inside the Quantum Unity scripts hierarchy that can be used for user generated code that has to be inside the Quantum assembly definition (partial asset classes for example)
  • Inspector tooltips on EntityView prediction error correction settings

Changes

  • PhotonQuantum.asmdef and PhotonQuantumEditor.asmdef now auto-detect the presence of Addressables and core modules for Unity 2019.1 and newer. Older version still need to use the toggles in QuantumEditorSettings and global defines

Bug Fixes

  • Fixed: Prototype/View assets of a new prefab not being referenceable without AssetDB refresh
  • Fixed: "Unreachable code detected" warning when physics modules are disabled
  • Fixed: 2D Quantum static polygon colliders marked to be baked as static edges now also have their gizmos drawn as static edges
  • Fixed: Potential DivideByZeroException on 2D Physics' Circle-Edge narrow check if the edge extent is small enough but not zero
  • Fixed: Static physics callbacks only being called if both the respective static and dynamic callback flags were set

2.1.0

Breaking Changes

  • Unity: Editor code has been refactored and, to simplify future updates, some files have been merged. That means that any changes made to the editor code will need to be reapplied, if necessary. That said, extending inspector and handling Quantum attributes is much simpler now and can be done with PropertyDrawers (check LayerAttributeDrawer or RangeAttributeDrawer).
  • Unity: Quantum scripts are now contained in PhotonQuantum and PhotonQuantumEditor assemblies using Assembly Definitions. This allows you to use Quantum in custom and test assemblies, but forces a different approach when it comes to extending Quantum itself: all partial classes need to be a part of PhotonQuantum assembly, types from global assembly can't be used and Assembly Definitions References list needs to be updated to access types defined in other assemblies. If the transition proves problematic, removing PhotonQuantum.asdef and PhotonQuantumEditor.asmdef will make Quantum global again. Note that the new assemblies have a missing reference to PhotonQuantumCode - this is a placeholder in case you go for full code integration (explained later on) and should not cause any issues.
  • Unity: Changed generated Editor scripts location to quantum_unity/Assets/Photon/Quantum/Editor/Generated. Old scripts (located in quantum_unity/Assets/Photon/Quantum/Generated) need to be removed by hand.
  • Unity: QuantumInstantReplay has been reworked and simplified. If your code depends on the old implementation, use Quantum.Legacy.QuantumInstantReplay instead.
  • Unity: Map and NavMesh assets no longer create extra binary files to be loaded with IFileLoader. They use BinaryData assets instead. Rebake all your maps with Quantum/All Scenes or Quantum/All Enabled Scenes. Old binary files will be removed in the process.
  • Unity: Removed QuantumEvent/QuantumCallback.Subscribe parameter excludeGameMode. Use gameMode and exclude parameters instead.
  • AssignEntityRefs prototype materialization phase has been removed. EntityRef fields are now resolved during the Materialize stage. This means that any changes to EntityRef fields performed in ISignalOnComponentAdded signal or in MaterializeUser partial method will no longer be overwritten. Remember that just like before, in case of map prototypes querying other entities' components is only safe after all prototypes have been materialized (ISignalOnEntityPrototypeMaterialized).
  • DrawIfAttribute now uses enum value instead of enum index, if it points to an enum property.
  • The navmesh binary data format has changed (pre-calculation of triangle normals for projection): Re-bake all your navmeshes.
  • The navmesh binary data file has been converted into a Quantum asset (BinaryDataAsset): Relink the new asset files in your debug MapNavMeshDebugDrawer instances (if you have any) and remove any leftover navmesh .bytes files from your project.
  • Removed the pathfinder radius feature: Different agent radii are nice but they were taking a lot of extra effort and in the end caused more trouble than we saw potential gain. It is still possible to achieve a similar effect by creating different navmeshes for different radii. This is also a much cleaner solution as it closes paths for bigger agents entirely, which was not possible with the radius feature before. Caveat: the avoidance radius needs to be set explicitly now because it does not have the Radius parameter to fall back to: Consider noting down the Radius values in this case before the upgrade or retrieve from a source control diff afterwards.
  • Navigation agents that are starting off the navmesh (due to a disabled region for example) are teleported to a valid (closest) position inside the navmesh when they begin their path. Previously they were trying to get out of the non-navmesh zone gracefully, but that was not possible all the time.
  • Some Navigation API changes will result in compilation errors and unfortunately need to be fixed by hand while other API changes are marked in code by the Obsolete attribute.
  • The new Realtime version restricts access to the auth token. As a guideline reconnecting after losing the connection object should always pass through the nameserver again.
  • The SessionContainer class has been refactored and will show obsolete warnings. Use the class from the Quantum.Legacy namespace if you are unable to adapt the changes. This change also reflects in the custom server plugin package, checkout the newest version to see how to set up the session container.
  • We upgraded Photon Realtime used by the client to version 4.1.5.1. The new Realtime version restricts access to the auth token. As a guideline reconnecting after losing the connection object should always pass through the nameserver again.
  • We upgraded the PhotonHivePlugin.dll used by the Quantum plugin to version 1.1.0.24499. For Quantum Cloud customers nothing changes but Enterprise customers that want to run this new version need to upgrade their private cloud to Photon Server v5 RC1 (https://doc.photonengine.com/en-us/server/current/plugins/plugins-whats-new#plugins_api_version_upgrade).

C#

NavMeshPathfinder {
    // OLD
    public FPVector2 Target
    public FPVector2 InternalTarget
    public FPVector2 GetWaypoint(FrameBase f, int index) { }
    public void SetTarget(FrameBase f, FPVector2 target, NavMesh navMesh) { }
    // NEW
    public FPVector3 Target
    public FPVector3 InternalTarget
    public FPVector3 GetWaypoint(FrameBase f, int index) { }
    public void SetTarget(FrameBase f, FPVector3 target, NavMesh navMesh) { }
}

OnNavMeshWaypointReached changed the waypoint parameter type from FPVector2 to FPVector3 inside the callback signature

What's New

  • Shape Casts (Regular and Broadphase Queries)
  • Inertia Tensors for 3D Physics Bodies
  • New Collision Solvers: improved performance and parallelism
  • Physics Colliders now have an Enabled property, so that disabling a collider does not need to incur in removing the component anymore.
  • We added proper 3D support for NavMeshes: When using a Transform3D component the navmesh agents will be able to fully move inside the 3D navigation mesh under and over bridges for example. The input target position is passed in 3D and will be projected onto the closest navmesh triangle vertically-wise. The navigation agent will move on the navmesh by default. But for better visual results there should be static Quantum colliders that the agent can use to vertically position itself on. The heightmap, which is generated alongside the Unity navmesh, can not be utilized (access is not exposed).
  • Room spectating support: the simulation can be joined with 0 local players to implement spectating clients that cannot influence the simulation
  • Quantum Asset Database can optionally be baked into quantum.code.dll to simplify custom server deployment. Export the AssetDB from Unity to quantum_code/quantum.code/db.json. The custom plugin project will prioritize loading from disk first and upon failing to find the db file will try to load internal one.
  • The multi client test runner similar to the DebugRunner can load multiple online clients into a scene controlled by one Unity Editor (QuantumMutliClientRunner)
  • Dynamic assets can now be searched by a path. Variants of Frame/FrameThreadSafe.FindAsset accepting a path now have an additional parameter: DatabaseType. Dynamic asset's path needs to be unique only among other dynamic assets.
  • Unity: Quantum State Inspector has been completely reworked. The look & feel is now much closer to Unity Hierarchy and Inspector windows. In addition to entities and globals you can now inspect session settings and dynamic assets. Entities and components can now be added and removed from within the inspector, provided quantum.code has been built in Debug mode.
  • Native Strings QString<N> and QStringUtf8<N> DSL types with N being the total size in bytes minus 2 bytes used for bookkeeping, e.g. QString<64> will use 64 bytes for a string with a max byte length of 62 bytes (up to 31 UTF-16 characters)
  • DSL: client & server event keywords added. Events marked with client are culled immediately when simulation is running as a server plug-in. Marking with server has the opposite effect.
  • DSL: FreeOnComponentRemoved attribute: a way to auto-free lists and dictionaries. Decorating a field with it will emit clean up code that gets ivoked when component gets removed, after ISignalOnComponentRemoved. If used on a struct's field, then the code will be emit and invoked for all components that use the struct.
  • Frame/FrameThreadBase.TryFindAsset - a way to look for an optional asset without polluting output logs with missing assets errors
  • quantum.code project source files can now be entirely moved to the Unity project. Read tools/codeintegration_unity/README.md for details.
  • BinaryData: an asset hosting binary data with a support for lazy decompression.
  • Math: FPMath.SinCos (much faster than calling FPMath.Sin and then FPMath.Cos).
  • Math: Logarithms (FPMath.Log2, FPMath.Log10, FPMath.Ln, FPMath.Log, FPMath.Log2FloorToInt and FPMath.Log2CeilingToInt).
  • Prototypes: Inspector support for dictionaries.
  • AssetGuid.TryParse
  • EntityRef.TryParse
  • RNGSession.NextInclusive and RNGSession.Peek.
  • FrameContextUser.ConstructUser and FrameContextUser.DisposeUser partial methods.
  • Frame.Serialize overload that takes an external byte array to avoid majority of internal allocs
  • DeterministicSession.MaxVerifiedTicksPerUpdate - a way to limit how many verified simulations are allowed to happen in a single Update.
  • JsonAssetSerializerBase, QuantumJsonSerializer and QuantumUnityJsonSerializer auto-compression of BinaryData (CompressBinaryDataOnSerializationThreshold and DecompressBinaryDataOnDeserialization properties)
  • Unity: BinaryDataAsset: a wrapper for BinaryData assets. Supports compression and can point to a TextAsset as their data source.
  • Unity: QuantumMapDataBakeFlags: BakeMapPrototypes and BakeMapColliders flags can be used to enable/disable baking of prototypes/colliders to speed up the auto-bake process.
  • Unity: QuantumEvent/Callback: an optional DispatchableFilter argument to SubscribeManual
  • Unity: QuantumEvent/Callback: an optional onlyIfEntityViewBound argument to Subscribe (makes sure the handler will only be invoked if EntityView on the listener has EntityRef assigned. GetComponentInParent is used to get the EntityView instance)
  • Added PositionOffset and RotationOffset to most of the Quantum static collider scripts (these offsets are baked into the map)
  • Added support for the Inspector.Reorderable attribute inside partial AssetObject implementations to display arrays as reorderable lists in the Unity inspector
  • Added an Asset Database Windows toggle inside Quantum shortcuts
  • New inspector attributes: DisplayName, ReadOnly, Range, ComponentTypeName
  • XML API documentation files alongside core and PhotonDeterministic dlls (assemblies folder). If you don't want them to be copied into the Unity Quantum assemblies folder add this line to each configuration property group (debug, release) in your quantum.code.csproj <AllowedReferenceRelatedFileExtensions>.pdb</AllowedReferenceRelatedFileExtensions>
  • Quantum Spectator project showcases a way to run the Quantum simulation online with Unity.

Changes

  • Unity: CustomEditorsHelper has been deprecated, use QuantumEditorGUI instead.
  • Math: FP.Sqrt, FPVector3.Normalize and FPVector2.Normalize speed up and precision increased
  • Physics: First-hit-only Raycasts' performance improvements
  • Synced events are culled immediately when a frame is predicted
  • quantum.codegen.unity now checks if a file needs an update instead of overwriting it each time
  • Unity: Addressables can now be enabled for all platforms only (in QuantumEditorSettings)
  • Unity: prototypes' lists and dictionares fields that have not been decorated with FreeOnComponentRemoved are decorated with a reminder that they need to be freed manually.
  • Removed IFileLoader and all its implementations
  • AssetGuid.ToString() format changed to 16 digit hexadecimal number in brackets, e.g. [0012345789ABCDEF]
  • EntityRef.ToString() format changed to E.IIIII.VVV format (I - index, V - version), e.g. E.00123.001
  • FPSinCos.bytes replaced both FPSin.bytes and FPCos.bytes; since Unity packages can't handle file removal, FPSin.bytes and FPCos.bytes are now 0-sized and can be safely removed
  • Removed PROFILER_REPORT define constant from the quantum.code project (QUANTUM_REMOTE_PROFILER on Unity's side remains)
  • Unity: Scene loading has been reworked and is now controlled with SimulationConfig.AutoLoadSceneFromMap enum. UnloadPreviousSceneThenLoad is the new default. The Legacy way of loading scenes can still be selected but due to bugs it is discouraged.
  • Unity: We added a new menu item Export Asset DB and kept the old way of exporting as Export Asset DB (Through UnityDB). The new export will properly locate all assets files using the same process as the Asset Resource object generation instead of locating the files through the UnityDB.
  • Unity: AssetBase has a new virtual member: PrepareAsset() which is called from Loaded(). The code from the Loaded method in EntityPrototypeAsset and MapAsset have been moved to PrepareAsset() because the latter is required to be called when exporting the Asset DB. Make sure to move your code into PrepareAsset() when you use the exported Asset DB.
  • Renamed FixedArrayAttribute to ArrayLengthAttribute
  • ComponentTypeSelector.QualifiedName and ComponentTypeSetSelector.QualifiedNames still work, but have been made obsolete. Use ComponentTypeName/ComponentTypeNames instead.
  • JsonAssetSerializeBase uses Assembly Qualified Names only for user assets defined outside of quantum.code; for all other assets it uses Type.FullName. This change is backwards-compatible.

Changes In Navigation

  • Improved quality and performance by updating the pivot point calculation for path-finding through triangles when Path Quality is set to Good or Best (toggle on DrawPathfinderRawPath in Editor Settings to observe)

  • Under some conditions it is preferable for avoidance agents to be able to reduce their speed to convey a more natural avoidance behavior. Of course, this is not advisable for most player controlled units and can be opted in inside NavMeshAgentConfig

  • The navmesh cost (weights) set under Unity Navigation Areas is exported and used by Quantum regions for heuristic calculations: check out Cost in the MapNavMeshRegion script

  • NavMeshAgentConfig

    • Removed Radius (not used anymore)
    • Removed ClampAgentToNavmeshRadiusThreshold (not needed anymore)
    • Renamed FindValidTargetCellRange (integer) into AutomaticTargetCorrectionRadius (FP) for hopefully more clarity. Convert by finding out how one navmesh cell width translates to absolute distance.
    • Added AvoidanceCanReduceSpeed toggle (default is off)
    • Added VerticalPositioning selection to the steering section
  • SimulationConfig.Navigation

    • Added HeightThresholdForAvoidance to filter out agents that are too far from each other (only required for 3D navigation)
    • Added HeightThresholdForWaypoints to support waypoint detection on different vertical layers (only required for 3D navigation)
  • API Old method signatures have been marked Obsolete. Please update them.

    • Navigation/PathFinder.FindPath()
      • Removed minDistanceToBorder parameter
      • Changed Int32 findValidTargetCellRange to FP automaticTargetCorrection
      • Now returns a FindPathResults object which gives more information about what went wrong (see below) or upon Success gives access to the calucalted path:

      C#

      public struct FindPathResult {
          public enum Code {
              Success,
              InvalidStartPosition,
              InvalidEndPosition,
              NoPathFound
          }
      
          public Code      Result;
          public FPVector3 CorrectedStartPosition;
          public FPVector3 CorrectedEndPosition;
      
          public int PathSize { get };
          public PathVertex[] Path { get };
      }
      
    • Navigation/NavMesh.LineOfSight()
      • Requires FPVector3 inputs
      • We changed the algorithm to use navmesh triangle funnelling instead of raycasting the borders, which conveniently also works for 3D and is faster.
      • Raycast2D() (new method) is the former LineOfSight() implementation which is practically a raycast against the navmesh borders. This only works in 2D!
    • NavMesh
      • MovePositionIntoNavmesh() removed agentRadius and removed radiusThreshold
      • FindTriangle() renamed method to FindTriangle2D()
      • FindClosestTriangle() has been completely changed to support 3D:

      C#

      bool FindClosestTriangle(FPVector3 sourcePosition, FP radius, NavMeshRegionMask regionMask, out Int32 triangle, out FPVector3 correctedPosition, MailboxSet8 mailbox = null)
      
      • (new) NavMesh.GetHeightAtTriangleRaw() use this to project the y-position onto a 3D triangle, the method expects that the 2D projection of the point is inside the 2D projection of the triangle.
      • (new) NavMesh.FindRandomPointOnTriangle() use this for an excellent randomization of a point inside one triangle.

Removed

  • Removed the obsolete quantum.systems project (since 2.0) from the quantum_code solution
  • Removed the docs folder and the quickstart guide while moving the API doc file into the root folder of the SDK, please refer to the online docs for starting guides
  • Removed the unnecessary PROFILER_REPORT define constant from the quantum.code project (QUANTUM_REMOTE_PROFILER on Unity's side remains)
  • Removed DebugGizmoSize from Navigation.Constants, the scaling is smartly matching the agent sizes

Bug Fixes

  • Replays now work for late-joiners
  • FixedArray<T> contents are used when calculating hash codes of owner structs (instead of just the pointer)
  • Fixed the UI rendering of the Quantum shortcuts to better accommodate a wider layout
  • Fixed the debug rendering of inactive navmesh region borders

Shape Casts Details

2D and 3D Shape Casts are now available as Regular and Broad-phase queries for all dynamic shapes supported. Internally, a custom GJK-based algorithm is used and new settings are available in the Physics.GJKConfig section in the Simulation Config. The new settings are intended to allow a trade-off between accuracy and performance, with the default values being a balanced compromise for regularly sized shapes:

  • Simplex Min/Max Bit Shift: Allows better precision for points in the Voronoy Simplex by progressively shifting their raw values, avoiding degenerate cases without compromising the valid range of positions in the Physics space. Consider increasing the values if the scale of the shapes involved and/or the distance between them is very small.

  • Shape Cast Max Iterations: The max number of iterations performed by the algorithm while searching for a solution below the hard tolerance. Increasing it might result in more accurate results, at the cost of performance in worst-case scenarios, and vice-versa.

  • Shape Cast Hard Tolerance: An iteration result (closest distance between the shapes) below this threshold is acceptable as a finishing condition. Decreasing it might result in more accurate results, at the cost of more iterations, and vice-versa.

  • Shape Cast Soft Tolerance: A shape cast resolution that fails to find an acceptable result below the defined Hard Tolerance within the Max Iterations allowed will still return positive if the best result found so far is below this soft threshold. In these cases, increasing this threshold enhances the probability of false-positives, while decreasing it enhances false-negatives.

F1

Build 1116 (Sep 14, 2022)

  • Marking 2.1.0 final

RC2N

Build 1115 (Sep 13, 2022)

What's New

  • Asset create shortcut to create a 3D>Character Controller Entity

Build 1112 (Sep 08, 2022)

Improvements

  • When playing on Editor, 2D Joints gizmos are now drawn by polling the frame state, similarly to how it is done for other components

Bug Fixes

  • Fixed: An issue with the construction of islands in the 3D Physics Engine when using joints (introduced on build 1097)

Build 1111 (Sep 07, 2022)

Changes

  • QuantumRunnerLocalDebug now hides the Save and Reload GUI button by default (toggle DisplaySaveAndReloadButton to change)

Bug Fixes

  • Fixed: The bake flag QuantumMapDataBakeFlags.ClearUnityNavMesh now actually clears the global navmesh (when NavmeshSurfaces are not used) after the baking
  • Fixed: "namespace modification was detected" warning for QuantumCustomEditors.cs

Build 1110 (Sep 05, 2022)

What's New

  • OnReleased overridable method to all Quantum Events, called when the event instance is released to its internal pool
  • The AssetDBInspector window got a search field (search for guid and filename) and improved its gui performance

Changes

  • The client now sends non-reliable messages as Unsequenced which will slightly reduce the bandwith and improve the network performance

Build 1109 (Sep 02, 2022)

Bug Fixes

  • Fixed: An issue in the navigation introduced with build 1100 that affected SetTarget() with AutomaticTargetCorrection disabled. For 3D always enable AutomaticTargetCorrection

Build 1108 (Sep 01, 2022)

What's New

  • Added feedback on the inspector when default Unity navmesh areas are selected for Quantum Region conversion

Bug Fixes

  • Fixed: "Failed To Load Script Object" message in the inspector for qprefabs

Build 1105 (Aug 30, 2022)

Bug Fixes

  • Fixed: Mismatched enum backing type
  • Fixed: Using imported types as dictionary keys

Build 1104 (Aug 30, 2022)

What's New

  • Alternative, on the Map asset, to serialize the static triangles metadata or to compute it during deserialization

Bug Fixes

  • Fixed: Quantum codegen tool parameter usage for the codeintegration_unity (introduced in build 1102)

Build 1103 (Aug 26, 2022)

What's New

  • 2D and 3D trigger callbacks can now be ignored through the IgnoreTrigger property in the callback info

Bug Fixes

  • Fixed: Physics OnExit callbacks being called even if all collisions were ignored

Build 1102 (Aug 25, 2022)

What's New

  • In Debug mode, the Quantum simulator now raises a warning when resetting the frame state to one whose number is smaller than the rollback window
  • Overloads to Photon.Deterministic.Log.Info, .Warn and Error methods that explicitly accept 1-3 arguments and can avoid the implict allocation of arguments' array
  • Quantum codegen tools now support --help command to list their usage and --version

Build 1101 (Aug 24, 2022)

What's New

  • Frame IsCullable method to check if an entity can be culled during predictions if out of a defined prediction area

Changes

  • FrameContext.InPredictionArea is now marked as virtual and can be overriden with a custom implementation
  • Schedule method overrides on built-in multi-threaded systems are no longer marked as sealed

Build 1100 (Aug 22, 2022)

Bug Fixes

  • Fixed: Changed Navmesh.FindClosestTriangle() to always prefer triangles that fit the x,z position while inside the provided radius. The fixes issues where agents get displaced on a 3D navmesh when starting a path. If automaticTargetCorrection is set to false no correction is attempted anymore., which not recommended for 3D navmeshes

Build 1099 (Aug 22, 2022)

Bug Fixes

  • Fixed: Static colliders' Settings field being null after AddComponent

Build 1097 (Aug 18, 2022)

Bug Fixes

  • Fixed: An issue on physics callbacks of CCD collisions where ignoring the first non-trigger collision would not allow subsequent ones to have their callbacks called
  • Fixed: QuantumJsonSerializer not recognizing NaN values for float and double fixed-size buffers

Build 1096 (Aug 17, 2022)

What's New

  • Float and double fixed-sized buffers support for QuantumJsonSerializer

Bug Fixes

  • Fixed: An issue that could cause an AssertException inside the AvoidanceBroadphase when using world positions > 500

Build 1095 (Aug 16, 2022)

What's New

  • Log.Info, .Warn and .Error overloads that accept a string format and an explicit number of parameters (1-3) and avoid implicit array allocations

Changes

  • The physics engines will now ignore and log a warning in Debug mode when an entity's physics collider has a None shape

Bug Fixes

  • Fixed: Local simulation (offline) stalling if feeding the simulator with a delta-time greater than rollback-window (usually triggered when using Default as SimulationConfig.DeltaTimeType )
  • Fixed: An issue that could cause errors on the navigation broadphase when AvoidanceRanges were 0 or less

Build 1094 (Aug 15, 2022)

What's New

  • Navmesh support for Transform2DVertical

Build 1093 (Aug 12, 2022)

Bug Fixes

  • Fixed: Fixing an issue with the navmesh agent using VerticalPositioning.Physics that caused the raycast always start with height 1 and now uses the navmesh MinAgentRadius

Build 1092 (Aug 11, 2022)

Bug Fixes

  • Fixed: An issue with 3D navmesh agents using MovementType.Transform and VerticalPositioning.None, where the y value of the agent position was occationally modified
  • Fixed: Correctly clear manually baked navmesh surfaces during BakeAll to avoid Unity namesh asset file duplications

Build 1091 (Aug 10, 2022)

Improvements

  • Reduced the upwards bandwidth usage on Quantum clients

Build 1089 (Aug 09, 2022)

What's New

  • QuantumEditorSettings.ColliderGizmosStyle, StaticColliderGizmoStyle and JointGizmosStyle

Changes

  • GizmoUtils.Draw() methods do not change the color alpha anymore, selected will add a brightness highlight effect instead which is configurable by QuantumEditorSettings.GizmoSelectedBrightness
  • Meaning of DeterministicSimulator.FramesPredicted changed from "How much is prediction ahead of verified state" to "How many predictd frames were simulated in last Unity update"
  • Circle gizmos no longer displays wireframe

Bug Fixes

  • Fixed: Interpolation jitter when simulation IsStalling = true
  • Fixed: IsStalling flag now correctly returns true when simulation is stalling

Build 1088 (Aug 08, 2022)

What's New

  • The 2D and 3D physics solvers from v2.0 can now be used instead of the new solvers introduced on v2.1 by selecting Legacy Gauss Seidel in the SimulationConfig.SolverType
  • QuantumEditorSettings.DrawColliderGizmos - a way to enable/disable gizmos for Quantum colliders
  • FrameDiffer now displays the Photon nickname of each diff origin

Bug Fixes

  • Fixed: QuantumFrameDiffer not attaching to CallbackChecksumErrorFrameDump callback in the Editor

Build 1087 (Aug 05, 2022)

Bug Fixes

  • Fixed: Issue in the 2D Physics collision solver that could cause miscomputations in the friction impulses applied during the collision resolution

Build 1086 (Aug 04, 2022)

Bug Fixes

  • Fixed: 2D and 3D Physics Joints serialization, which could cause desyncs when late-joining using a snapshot

Build 1085 (Aug 03, 2022)

Bug Fixes

  • Fixed: An issue that could cause static meshes to be baked with inverted normals if the world scale of the GameObject that holds the component has negative scale in an even number of axes

Build 1084 (Aug 01, 2022)

What's New

  • FPVector3.UseableMin and .UseableMax; and FPVector2.MinValue, .MaxValue, .UseableMin and .UseableMax

Changes

  • QHashSet requested capacity on allocation is now automatically rounded up to the next prime number. This prevents issues with invalid capacities (<= 0) and improves hash distribution

Build 1083 (Jul 26, 2022)

Bug Fixes

  • Fixed: Not working interpolation of Transform2DVertical

Build 1082 (Jul 23, 2022)

Bug Fixes

  • Fixed: Issue in the 3D Hinge Joint that could cause the hinge axis constraints to not be correctly solved in some conditions, causing the hinge to slowly deviate from its anchor axis

Build 1081 (Jul 22, 2022)

Bug Fixes

  • Fixed: Race condition in the 2D and 3D Physics Engines when having dynamic bodies with compound shapes and running the simulation in multiple threads, which could also cause desyncs
  • Fixed: Code-generated extention method for DSL flags enum HasFlag is now named IsFlagSet, preventing a fallback to System.Enum.HasFlag instead of the extension method, which should be used to prevent the generation of boxing allocation
  • Fixed: Missing using UnityEngine statement on QuantumUtils.cs when using Unity 2019.2 or newer

Build 1080 (Jul 20, 2022)

What's New

  • EnterPlayModeOptionsHandler editor script - clears static fields upon entering Play Mode (Unity 2019.2+)
  • Support for Reload Domain being turned off in Enter Play Mode Options

Removed

  • QuantumRunner.ClearSimulationStatics

Bug Fixes

  • Fixed: Scene not being activated after being loaded in some cases
  • Fixed: Bug introduced on build RC2N 1076 that could cause temporary mismatch in the component counts and assert exceptions in Debug mode when committing remove-component or destroy-entity commands

Build 1078 (Jul 19, 2022)

Changes

  • By default, Frame.ComponentCount overloads now do not include entries with pending removal, i.e. removing a component or destroying an entity now have an immediate effect over the component count

Build 1075 (Jul 14, 2022)

Bug Fixes

  • Fixed: Compilation errors when activating the DISABLE_QUANTUM_ASSET_INSPECTOR define and introducing a new name for it: QUANTUM_DISABLE_ASSET_EDITORS (the old name will be removed in a later version)

Build 1074 (Jul 13, 2022)

Changes

  • Updated the xml docs NavMeshSignals

Build 1073 (Jul 13, 2022)

What's New

  • ColorRGBA property drawer

Bug Fixes

  • Fixed: Navmesh related bug introcuded by last build (1072)

Build 1072 (Jul 12, 2022)

Changes

  • Marking ColorRGBA struct [Serializable] to be editable in the Unity inspector

Bug Fixes

  • Fixed: OnEnabled being called on nested systems when disabling parent

Build 1071 (Jul 11, 2022)

Bug Fixes

  • Fixed: A couple of string.Format() allocation in debug quantum.code.dll
  • Fixed: An issue with Navmesh Link baking while using Quantum_XY

Build 1070 (Jul 07, 2022)

Changes

  • New 2D and 3D KCC config asset instances created will now have the same settings as the respective default configs
  • Default QuantumTaskRunnerJobs now has the Schedule method marked as virtual, so custom extensions can be more easily created

Bug Fixes

  • Fixed: Issue in the 2D and 3D physics engines that could corrupt pointers internally when having colliders with compound shapes and expanding the physics entries buffer

Build 1069 (Jul 06, 2022)

What's New

  • QuantumRunner.ClearSimulationStatics - clears all static variables on the simulation side. This is intended to be used when addressing Domain Reloading issues

Bug Fixes

  • Fixed: DebugSystem._commandExecuted not being defined in Release
  • Fixed: An issues that could cause Navmesh agents using default KCC3D and traversing a link to have problems detecting the link end waypoint

Build 1068 (Jul 05, 2022)

Bug Fixes

  • Fixed: QString printers being stripped from iOS and Android builds

Build 1067 (Jul 01, 2022)

Bug Fixes

  • Fixed: Removed drawn sphere and ray by the 3D KCC in Debug mode that could not be disabled

Build 1066 (Jun 30, 2022)

Bug Fixes

  • Fixed: Inconsistent line endings for Unity scripts (QuantumProfilingClient.cs, QuantumRunner.cs, UIMains.cs)

Build 1064 (Jun 28, 2022)

Changes

  • Moved the CreateAssetMenu entries of navmesh related scripts to Quantum>Navigation

Build 1063 (Jun 27, 2022)

What's New

  • 2D and 3D KCC SetConfig methods, which can be used to change the KCC config without resetting other fields' values like done on Init

Changes

  • DumpFlag_PrintRawValues dump flag also makes collections print raw pointer values

Bug Fixes

  • Fixed: An AOT compiler issue that caused a ExecutionEngineException during desync error dumps (QBoolean was stripped)

Build 1061 (Jun 23, 2022)

Bug Fixes

  • Fixed: Handle exceptions on protocol messages gracefully by calling the OnPluginDisconnect callback and destroying the session

Build 1060 (Jun 22, 2022)

Improvements

  • 2D and 3D KCC de-penetration algorithm, preventing overshoots in certain conditions and range of contact angles

Bug Fixes

  • Fixed: MacOS build freezing when quitting app
  • Fixed: An issue in the navmesh baking that could cause an IndexOutOfRangeException during GenerateTriangleGrid() when triangle vertices are located exactly on the grid edge

Build 1059 (Jun 21, 2022)

Changes

  • QuantumEditorSettings toggles Use XY As 2D Plane and Disable Modules ... now affect all platforms instead of only the current one

Build 1058 (Jun 20, 2022)

What's New

  • Inspector tooltips for Map asset properties

Build 1057 (Jun 17, 2022)

Changes

  • WebGL builds are now forced to run in single-thread, regardless of the Thread Count in the Simulation Config. Clients in other platforms can still run the simulation in multiple threads and cross-play with WebGL clients

Build 1056 (Jun 17, 2022)

Bug Fixes

  • Fixed: 2D and 3D Physics engines now always reset force and torque on physics bodies, even when they are sleeping, preventing accumulation when IsAwakenbyForces is disabled on the body configs
  • Fixed: Backslash in string giving error CS1009 on LoadbalancingPeer.cs when WebGL is the target platform

Build 1053 (Jun 15, 2022)

  • Upgraded the version of Photon Realtime shipped with the Quantum SDK to 4.1.6.14
  • Updates to quantum.console.runner and quantum.console.spectator projects are not included in upgrade/quantum_code.zip. In order for existing projects to benefit from recent fixes to QuantumJsonSerializer enable Allow unsafe code and copy QuantumJsonSerializer.cs from SDK's quantum_code/quantum.console.runner and quantum_code/quantum.console.spectator

Bug Fixes

  • Fixed: QuantumJsonSerializer in spectator and custom plugin not handling fixed buffers of booleans/chars

Build 1052 (Jun 13, 2022)

Bug Fixes

  • Fixed: Removed extra empty line in CodeGen.cs before namespace when generating code on Mac
  • Fixed: NavMesh.DataAsset is not disposed after loading the data if the asset is dynamic

Build 1047 (Jun 01, 2022)

What's New

  • Package.json for PhotonRealtime, allowing to move PhotonRealtime out of assets and into a local package

Bug Fixes

  • Fixed: An issue when performing 3D CCD that could cause triangles in a static mesh to not be checked against
  • Fixed: Added missing profiler define QUANTUM_PROFILER_ENABLED to Debug and ReleaseProfiler configuration to be able to use the Quantum Task Profiler from the code project

Build 1045 (May 30, 2022)

What's New

  • A SessionContainer can now be started with a different implementation of IDeterministicPlatformTaskRunner (defaults to built-in DotNetTaskRunner)

Changes

  • The custom plugin sample now starts the SessionContainer with an InactiveTaskRunner, forcing the server simulation to run in single-thread despite the runtime config (scales better)

Build 1044 (May 27, 2022)

Bug Fixes

  • Fixed: Errors when editing a NavMesh backed by Addressable data asset
  • Fixed: Properties that had [HideInInspector] added still taking up inspector space

Build 1043 (May 23, 2022)

Changes

  • 2D Entity Prototypes can now draw the gizmos of custom polygon colliders that inherit from PolygonCollider

Build 1041 (May 18, 2022)

What's New

  • Added options to change the default SimulationConfig.Navigation.RawPathSize and Allocation strategy: Fixed = fail to find larger paths, Allocate = grows the raw path array. This replaces Navigation.Constants.RawPathSize which has been marked as obsolete

Bug Fixes

  • Fixed: An exception inside the pathfinding for huge paths
  • Fixed: An issue with FindPathResult.Path.Index causing the triangle indices to occasionally be wrong
  • Fixed: Drawing green path gizmo dots on top of larger magenta raw path dots

Build 1040 (May 16, 2022)

Bug Fixes

  • Fixed: Default config assets (e.g. DefaultCharacterController2D, DefaultNavMeshAgentConfig, etc) now have their guids correctly reset to default values instead of new random guids if they are found with invalid guids during asset DB generation

Build 1039 (May 13, 2022)

Bug Fixes

  • Fixed: "Retrieving array element that was out of bounds" error when inspecting an empty array in an asset

Build 1038 (May 11, 2022)

What's New

  • Xml comments for Quantum.Assert and PhotonDeterministic.Assert methods

Build 1037 (May 10, 2022)

Bug Fixes

  • Fixed: DynamicAssetDB fallbacks to static resource manager when disposing asset if possible

Build 1035 (May 04, 2022)

Changes

  • 2D and 3D physics collider Layer fields are now get-set properties and check if values set are within the valid range

Build 1034 (May 03, 2022)

What's New

  • Added release-profiler assemblies to make the Quantum Task Profiler available for "release" builds. It needs to be added manually when upgrading Quantum: Add another build configuration (ReleaseProfiler) and reference assemblies/release-profiler/quantum.code.dll

Changes

  • Removed quantum.console.runner from the upgrade file quantum_code.zip, it will still be included in the SDK package

Bug Fixes

  • Fixed: CodeGen: FP constants generation issues on some platforms

Build 1033 (May 02, 2022)

Improvements

  • Improved the computation of 2D and 3D shape cast hit points by using the witness point of the shape being cast instead of the shape being hit

Build 1032 (Apr 28, 2022)

What's New

  • Annotating Quantum.Asserts with System.Diagnostics.CodeAnalysis.DoesNotReturn attributes

Changes

  • Minor changes on the inspector PhotonServerSettingsEditor

Build 1027 (Apr 25, 2022)

What's New

  • Added SimulationConfig tooltips

Build 1026 (Apr 22, 2022)

  • This version fixes some issues in the avoidance algorithms and could lead to corrected but slightly different agent behavior, please make sure to check your agents still act as expected if you are using the avoidance feature

What's New

  • EntityViewUpdater.AutoFindMapData - controls whether EntityViewUpdater will look for the current MapData with FindObjectOfType (true by default)

Bug Fixes

  • Fixed: The navigation agent configuration option Avoidance Can Reduce Speed which did generate appropriate avoidance candidates but did not actually reduce the agents speed
  • Fixed: An issue with avoidance that could lead to non-reciprocal avoidance vectors for head-on agent collisions (only one agent did the avoidance instead of both)
  • Fixed: An issue that could cause an exception inside Frame.UpdatePlayerData() when running a replay

Build 1019 (Apr 21, 2022)

What's New

  • Debug output which triangles cannot fit into a region

Build 1018 (Apr 20, 2022)

What's New

  • New optimized overloads for Navmesh.FindClosestTriangle() that use the frame object to locate mailbox memory

Bug Fixes

  • Fixed: Possible DivideByZeroException when performing a circle cast with a very small translation vector

Build 1017 (Apr 19, 2022)

What's New

  • GetActorIds to retrieve all actors currently in a DeterministicServer
  • Draw.Box and .WireBox methods to the debug draw API

Build 1016 (Apr 14, 2022)

Changes

  • QString and QStringUtf8 types are now Unity-serializable

Bug Fixes

  • Fixed: Json.NET-based asset serializer not being able to read/write fixed-size buffers

Build 1015 (Apr 12, 2022)

Bug Fixes

  • Fixed: An issue in the pathfinder that could lead to slightly less efficient paths than possible

Build 1014 (Apr 11, 2022)

Bug Fixes

  • Fixed: An issue in FindPath() that would result in a straight path through a navmesh region disregarding the region cost if the target is in lineofsight
  • Fixed: An issue that under some circumstances the navmesh region cost was not correctly applied for pathfinding

Build 1012 (Apr 05, 2022)

Bug Fixes

  • Fixed: An issue with 2D and 3D Physics CCD that could sometimes cause collisions to not be detected when the objects were overlapping at the beginning of the movement

Build 1010 (Mar 30, 2022)

Improvements

  • Marking Navigation.LineOfSight methods with AggressiveInlining
  • Removed Trace logs coming from Debug PhotonDeterministic dll, including "Adjusting clock" notifications

Build 1009 (Mar 29, 2022)

Improvements

  • Exposed GravityStrength and GravityNormalized properties on 2D and 3D KCC config assets

Changes

  • Removing explicit use of Newtonsoft Json TypeNameHandling.Auto which is not needed and poses a security thread when loading data from an untrusted source

Build 1008 (Mar 28, 2022)

Improvements

  • Added world-space versions of FPCollision.LineIntersectsAABB methods and improved xml documentation

Build 1007 (Mar 25, 2022)

Bug Fixes

  • Fixed: Too many heaps being created for some configuration of replay/checksum intervals

Build 1006 (Mar 24, 2022)

What's New

  • Map.ScenePath and Map.SceneGuid (helpful when implementing custom scene loading)

Build 1005 (Mar 22, 2022)

Bug Fixes

  • Fixed: Unused variable warning in Unity scripts
  • Fixed: Missing call to DumpFrameUser on Frame.DumpFrame

Build 1004 (Mar 21, 2022)

What's New

  • Proper error messages on missing arguments when running codegen_unity tool (netcore)

Build 1003 (Mar 18, 2022)

Bug Fixes

  • Fixed: Memory leak on the Frame heap when disposing a QHashSet

Build 1001 (Mar 16, 2022)

Bug Fixes

  • Fixed: AssetObject.Loaded not being called for assets deserialize from snapshot
  • Fixed: Loading of dynamic assets from AssetObject.Loaded

Build 1000 (Mar 15, 2022)

What's New

  • 2D PolygonShape now carries information about the polygon's centroid
  • Frame Dumps now include 2D and/or 3D Physics Engine states

Bug Fixes

  • Fixed: Issue in the serialization of the 2D and 3D Physics Engines state

Build 999 (Mar 11, 2022)

Bug Fixes

  • Fixed: Issue in 2D and 3D physics scene initialization logic, which could set wrong world settings when initializing from a snapshot (e.g. late-joins, replays)

Build 998 (Mar 09, 2022)

What's New

  • "Addressables: Use WaitForCompletion" Quantum setting - enabling it adds QUANTUM_ADDRESSABLES_USE_WAIT_FOR_COMPLETION define and let's Quantum use AsyncOperationHandle.WaitForCompletion (Addressables 1.17+) to load Addressable assets synchronously

Build 997 (Mar 08, 2022)

Bug Fixes

  • Fixed: An error in navmesh steering that was introduced by build Build 969 which resulted in drifting agents
  • Fixed: Server snapshots on the custom plugin sample require to overload OnDeterministicSnapshotRequested()

Build 995 (Mar 07, 2022)

Bug Fixes

  • Fixed: Possible div0 exception in Navigation Avoidance calculation

Build 994 (Mar 03, 2022)

What's New

  • StateInspector: "Clear" button
  • StateInspector: "Remove Other Runners" context menu item

Bug Fixes

  • Fixed: A couple unused field warnings

Build 993 (Mar 02, 2022)

What's New

  • StateInspector & FrameDump support for QString and QBoolean pretty-print

Bug Fixes

  • Fixed: Invalid property path in OptionalAttribute breaking the inspector

Build 992 (Mar 01, 2022)

What's New

  • An overload of MapNavMeshBaker.BakeNavMesh() that uses Map instead of MapData

Build 991 (Feb 28, 2022)

Bug Fixes

  • Fixed: Calling NavMeshPathfinder.SetTarget() with the same position will now reactivate stopped agents

Build 990 (Feb 25, 2022)

What's New

  • CodeGen: EOL for Unity scripts can now be controlled with "EndOfLineCharacters" DLL config setting. To enforce crlf (Windows style) use <add key="EndOfLineCharacters" value="&#13;&#10;"/>, to enforce lf (Linux style) use <add key="EndOfLineCharacters" value="&#10;"/>

Bug Fixes

  • Fixed: CodeGen: invalid align/offsets for collection-backing pointers in case of element's align not being equal to 4

Build 989 (Feb 24, 2022)

What's New

  • CodeGen: Support for namespace-qualified attributes in Qtn

Changes

  • A warning is emit if Quantum fails to deserialize received frame dump
  • CodeGen: Quantum.Ptr fields now use namespace-qualified type name

Build 988 (Feb 23, 2022)

Bug Fixes

  • Fixed: Frame.FreeUser being called after FrameBase.Free, which disposes the Heap memory
  • Fixed: 2D and 3D Physics engines' Init methods now ensure that world and bucket sizes are initialized with valid values, avoiding DivideByZeroException

Build 987 (Feb 18, 2022)

Bug Fixes

  • Fixed: Frame.FrameAssets incorrect SimulationConfig find method's name
  • Fixed: Missing serialization of 2D and 3D static colliders' enabled state, which could cause desyncs on late-joins and issues on replays

Build 986 (Feb 17, 2022)

What's New

  • Support for FP constants in DSL. #define FPConst 0.1223 will emit Constants.FPConst and Constants.Raw.FPConst

Bug Fixes

  • Fixed: Codegen errors not appearing in Errors List window

Build 983 (Feb 11, 2022)

What's New

  • Support to disable Unity modules to reduce the build size. Toggle in QuantumEditorSettings.Disable***Module or define #QUANTUM_DISABLE_PHYSICS2D, _PHYSICS3D, _AI, _TERRAIN

Bug Fixes

  • Fixed: An issue in QuantumRunnerLocalDebug (if QUANTUM_ADDRESSABLES is enabled) that prevented exceptions being logged due to how Unity runs async code

Build 981 (Feb 10, 2022)

What's New

  • FP implicit cast from byte and sbyte

Changes

  • QuantumCodeIntegration no longer needs Properties/AssemblyInfo.cs removed
  • Quantum Code Integration - quantum.code can be imported into Unity project with Package Manager. Follow instructions in tools/codeintegration_unity/README.txt

Bug Fixes

  • Fixed: CodeGen.cs mixed end-of-line characters
  • Fixed: Quantum Code Integration: .NET Standard 2.1 api compatibility is now supported
  • Fixed: Range attribute not working in Unity 2021.2+

Build 980 (Feb 09, 2022)

Changes

  • Added deterministic GetHashCode override for each simulation struct
  • DumpFlag_PrintRawValues dump flag also makes QDictionary print key hash values
  • QBoolean implements IEquatable<QBoolean>

Bug Fixes

  • Fixed: QuantumCodeIntegration throwing an exception if PhotonQuantumCode.dll is no longer accessible

Build 977 (Feb 08, 2022)

What's New

  • Warning message when setting a 2D or 3D Physics Collider physics material to an invalid asset

Bug Fixes

  • Fixed: FP.FromString returning wrong values when providing strings with more than 14 digits of precision of the fraction part

Build 976 (Feb 07, 2022)

What's New

  • An additional version of the codegen_unity tool compiled as a netcoreapp3.1 app to work with dlls created for netstandard2.1 (located in tools/codegen_unity/netcoreapp3.1). Please also see readme.txt
  • Warning/error messages when starting a Quantum game in WebGL and multithreading is enabled (SimulationConfig.ThreadCount > 1)

Bug Fixes

  • Fixed: FPQuaternion.FromToRotation precision increased

Build 975 (Feb 04, 2022)

Bug Fixes

  • Fixed: FPCollision.LineIntersectsCircle no longer ignores intersections if the start of the line segment is inside the circle. An optional parameter can be set in order to ignore these cases (default to false)

Build 973 (Feb 03, 2022)

Bug Fixes

  • Fixed: A thread-safety issue on 2D and 3D Physics Engines when using joints and sleep detection
  • Fixed: 2D and 3D Shape Cast hit Point being computed at the center of circles or spheres, respectively

Build 972 (Feb 02, 2022)

What's New

  • FPVector3.SignedAngle(), equivalent to Unity's Vector3.SignedAngle()

Changes

  • Frame.SystemDisable<T>(T system) now always uses the system instance runtime type instead of T (explicit or implicit)
  • The assembly information of the Quantum dlls now contains Debug/Release information and debug dlls are now also tagged correctly

Build 970 (Feb 01, 2022)

What's New

  • QuantumEditorSettings now has options to position the QuantumToolbar (level dropdown)

Build 969 (Jan 31, 2022)

What's New

  • NullableNonNegativeFP

Bug Fixes

  • Fixed: An issue with the properties of NavMeshAvoidanceAgent (AvoidanceMask, AvoidanceLayer, Priority) and NavMeshSteeringAgent (Acceleration, MaxSpeed) that were changed after instantiation and overwritten by values from the config during frame.Set() or NavMeshPathfinder.SetConfig(). NavMeshPathfinder.SetConfig() has an optional overwrite bool that forces the reset of the mentioned properties which is set to true for backwards compatibility reasons.
  • Fixed: Issues on the 2D Hinge Joint when both joint and connected entity were dynamic rigid bodies

Build 968 (Jan 27, 2022)

Changes

  • EntityViewUpdater.LoadMissingPrefab will attempt to load a missing view synchronously now

Bug Fixes

  • Fixed: Issues on the 2D and 3D Physics engines when the session is initialized with RuntimeConfig.Map as default or invalid
  • Fixed: QuantumPrefabAsset_Resources resource path not having its extension removed

Build 967 (Jan 26, 2022)

  • Upgraded Photon Realtime to 4.1.6.12

What's New

  • WebGL builds are now supported (experimental). Photon WebSocket libraries are included in the SDK.
    Important notes when targeting WebGL:
  • Change SimulationConfig Thread Count to 1 (browsers/Unity WebGL builds do not support multi-threading)
  • Recommended Unity version: 2021.2.8f1 (better performance). Minimum version: 2018.4.30f1
  • Tested browsers and platforms: Chrome, Firefox, Edge and Safari, running on PC Windows or Mac

Build 966 (Jan 25, 2022)

What's New

  • A new optional OnBeforeBake signature that includes the BuildTrigger
  • 2D and 3D Physics' callbacks API now have ResetCallbacks, a way to reset the collision history of an entity, used to compute OnEnter/OnExit conditions
  • A new optional OnBeforeBake signature that includes the bake flags QuantumMapDataBakeFlags

Build 964 (Jan 21, 2022)

What's New

  • EntityViewUpdater.LoadMissingPrefab - a way to load a view if it missing in EntityView asset
  • Experimental Prefab Standalone Assets (.qprefab) - a way to supply the AssetDB with prototype and view assets without hard references to prefabs. This is useful if prefab being loaded along with its nested assets is problematic. To enable for a prefab, select its nested EntityViewAsset or EntityPrototypeAsset and follow instructions
  • EntityViewUpdater.LoadMissingPrefab: a way to load a prefab that might be initially missing

Changes

  • Print conflicting asset's path if there is a guid/path conflict

Build 962 (Jan 19, 2022)

What's New

  • AssetDB.LoadedAssets - a way to iterate over all loaded assets

Improvements

  • Handling of exceptions during deserialization of RuntimePlayer data, now logged as error if in Debug mode

Build 961 (Jan 17, 2022)

Changes

  • Updated Unity git igrore file to optionally include quantum pdb files

Bug Fixes

  • Fixed: Quantum State Inspector window being closing in some situations

Build 959 (Jan 12, 2022)

Bug Fixes

  • Fixed: An issue that could cause an exception to be thrown inside the navigation introduced by Build 957

Build 958 (Jan 11, 2022)

Improvements

  • Improved the usable range of parameters on FPCollision.LineIntersectsCircle, reducing the risk of overflows

Build 957 (Jan 10, 2022)

Bug Fixes

  • Fixed: An issue with NavMesh.MovePositionIntoNavmesh() when evaluating grid cells with more then 32 borders inside which could lead to the agent clipping through walls. The navmesh agent option Clamp Agent to Navmesh was also affected. Please switch to the signature with Frame when using the method explicitly
  • Fixed: MemoryIntegrity error for ComponentReference, EntityPrototypeRef, CompoundShape3DandCompoundShape2D` on some platforms

Build 956 (Jan 06, 2022)

Bug Fixes

  • Fixed: Loaded is called on AssetObject when it's injected into dynamic DB

Build 955 (Jan 05, 2022)

Bug Fixes

  • Fixed: Physics OnExit callbacks being called when one of the entities involved entered a sleeping state

Build 953 (Dec 20, 2021)

Bug Fixes

  • Fixed: Issues when configuring 2D and 3D hinge joints with negative MaxMotorTorque

Build 951 (Dec 14, 2021)

Bug Fixes

  • Fixed: Checksum error dumps showing IsVerified=false
  • Fixed: An issue on the Quantum simulator that could cause assertion exceptions when the InputOffsetMin of the config sent by the client differed from the one received from the server

Build 949 (Dec 08, 2021)

What's New

  • QuantumGame.SendPlayerData overload that does not require the player index to be specified, useful when clients always control only one player

Build 947 (Dec 02, 2021)

What's New

  • TryGetQueryHits method on 2D and 3D Physics API to try and retrieve the results of a broad-phase query

Bug Fixes

  • 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 946 (Dec 01, 2021)

What's New

  • Map property on 2D and 3D Physics APIs, to retrieve the map asset currently used on the respective physics scene

Build 945 (Nov 30, 2021)

What's New

  • Support to Paint Holes on Terrain static colliders

Bug Fixes

  • Fixed: Worker threads being able to access an asset before Loaded callback was invoked
  • Fixed: CodeGen - order of attributes for Unity prototype scripts is more cross-platform now, with System attributes being emit first

Build 944 (Nov 29, 2021)

Bug Fixes

  • Fixed: DivideByZeroException on FPVector3.Slerp and .SlerpUnclamped when vector were collinear
  • Fixed: Instability issues on 3D hinge joints, specially perceptible on rotated hinges with larger mass

Build 943 (Nov 26, 2021)

What's New

  • Xml documentation to interpolated error correction settings on EntityView

Build 942 (Nov 25, 2021)

What's New

  • Added two new navmesh related callbacks to MapDataBakerCallback. This change makes the navmesh baking more customizable without having to completely replace it. Either hook into OnCollectNavMeshBakeData (inject BakeData into Quantum Navmesh baking pipeline) or OnCollectNavMeshes (inject Navmesh objects into Asset serialization)
  • EntityPrototypeContainer.SetDirty. Needs to be called if Components property has been modified
  • SystemIsEnabledSelf, SystemIsEnabledInHierarchy
  • Nested systems are enabled/disabled when group is enabled/disabled

Changes

  • OnEnabled and OnDisabled callback on SystemBase are called based on state of the hierarchy of the grouped systems. Systems update is called when it's enabled in hierarchy

Bug Fixes

  • Fixed: An issue with 3D navmesh Delaunay triangulation that caused the navmesh to deform near slopes. Use the checkbox DelaunayTriangulationRestrictToPlanes in those cases
  • Fixed: EntityPrototypeContainer not being sorted again if repopulated
  • Fixed: Update is not called on disabled nested system when group is enabled

Build 941 (Nov 24, 2021)

Breaking Changes

  • Multi-threaded, built-in system types on Quantum.Task namespace now have their OnInit override marked as sealed. Inheritors can override OnInitUser instead

Build 940 (Nov 23, 2021)

Bug Fixes

  • Fixed: Photon/Quantum/Editor/Generated scripts being included in the unity upgrade package

Build 939 (Nov 22, 2021)

Bug Fixes

  • Fixed: Misleading velocity parameter on 2D and 3D KCC, now renamed to direction

Build 936 (Nov 18, 2021)

What's New

  • QuantumGameFlags code documentation

Changes

  • DeterministicCommandSerializer will now log a warning when attempting to register multiple Command factories of the same type

Build 935 (Nov 17, 2021)

Bug Fixes

  • Fixed: AssertException in Debug mode when performing a component removal, followed by the addition of the same component and then the destruction of the entity on the same frame

Build 934 (Nov 16, 2021)

Bug Fixes

  • Fixed: An issue with FPAnimationCurve where the PostWrapMode was not being able to be set independently from the PreWrapMode

Build 933 (Nov 12, 2021)

What's New

  • Built-in support to compound Commands through the new Core.CompoundCommand type
  • Built-in support for Command pooling through the new DeterministicCommandPool<T> class, which can also be registered as factory on DeterministicCommandSetup.AddCommandFactoriesUser
  • IDeterministicCommandFactory interface, now registered during Command setup to provide instances of Commands for de-serialization

Improvements

  • Commands now implement IDisposable, which can be overridden on concrete types and used in conjunction with command factories to implement pooling patterns, for example

Changes

  • Default BitStream size used for RuntimeConfig serialization changed from 1 to 8KB
  • CommandSetup.CreateCommands is now deprecated. Command factories should be registered through a partial declaration of DeterministicCommandSetup.AddCommandFactoriesUser instead, as shown on CommandSetup.User.cs available on the SDK package (not on the upgrade zip). Command instances can be used as factories of their own type, so instances returned from the deprecated method are still functional
  • CommandSetup.cs file was replaced by CommandSetup.Legacy.cs and CommandSetup.User.cs. The old file's implementation is now deprecated, although still functional. To replace the old file by the new ones, remove quantum.code\CommandSetup.cs file from the quantum_code.csproj and copy and add quantum.code\CommandSetup.Legacy.cs and quantum.code\CommandSetup.User.cs from the SDK folder into your project (those files are not inside the upgrade zip).

XML

  <!-- OLD quantum.code.csproj -->
  <ItemGroup>
    <Compile Include="Core\CodeGen.cs" />
    <Compile Include="CommandSetup.cs" />
    <Compile Include="Core\Core.cs" />
    ...
  </ItemGroup>
  
  <!-- NEW quantum.code.csproj -->
  <ItemGroup>
    <Compile Include="CommandSetup.User.cs" />
    <Compile Include="Core\CodeGen.cs" />
    <Compile Include="CommandSetup.Legacy.cs" />
    <Compile Include="Core\Core.cs" />
    ...
  </ItemGroup>

Bug Fixes

  • Fixed: Issues with Commands being shallow-copied during de-serialization, caused by shared reference types when de-serializing multiple commands of the same type on the same frame

Build 929 (Nov 10, 2021)

What's New

  • QHashSet
  • TryResolve QCollection methods to FrameThreadSafe

Build 928 (Nov 05, 2021)

What's New

  • [AllocateOnComponentAdded] - a way to auto allocate lists/dictionaries when component gets added to an entity

Build 927 (Nov 05, 2021)

What's New

  • Thread-safe overloads to GetStaticData methods on 2D and 3D Hit structs

Bug Fixes

  • Fixed: Issues on the 3D KCC penetration correction when steering over triangles on a mesh
  • Fixed: FP precision issue on the penetration correction algorithm of the 2D and 3D KCCs

Build 926 (Nov 04, 2021)

What's New

  • [EntityComponentConfig] attribute. Add it to a partial prototype class and set GenerateLinkingScripts to false to prevent MonoBehaviour from being created for this component

Changes

  • Prototype components are no longer emit as sealed classes

Bug Fixes

  • Fixed: FP precision issues on 3D Hinge Joints when the inertia of the joint body reached higher values
  • Fixed: Instabilities on 2D and 3D Hinge Joints when the joint body did not have mass 1 and/or was connected to another dynamic body as anchor

Build 925 (Nov 03, 2021)

Bug Fixes

  • Fixed: 2D and 3D broad-phase queries giving a NullReferenceException when resolving against an dynamic entity with CCD enabled

Build 924 (Nov 02, 2021)

Changes

  • Removed verbose assertion error regarding inaccuracies on the 3D Physics CCD algorithm while the issue is being investigated

Build 923 (Nov 01, 2021)

Bug Fixes

  • Fixed: An issue in the 2D and 3D collision solvers that was cause the angular velocity of kinematic bodies to not affect the resolution

Build 921 (Oct 29, 2021)

  • Initial RC2 version

RC1

Build 920 (Oct 29, 2021)

Changes

  • Released 2.1.0 RC1

Bug Fixes

  • Fixed: CodeGen not printing the missing type's name in hasAnyFieldRecurse

A1N

Build 919 (Oct 28, 2021)

Bug Fixes

  • Fixed: Issue that could cause Commands and RuntimePlayer data sent in the first N frames to not be attached to valid frames, where N is the DeterministicConfig.InputDelayMin

Build 918 (Oct 25, 2021)

What's New

  • Improved 2D and 3D KCC penetration correction algorithms, specially the behavior on acute corners

Bug Fixes

  • Fixed: An imprecision in the 2D Circle-Edge collision check that could cause assertion errors
  • 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

Build 917 (Oct 22, 2021)

What's New

  • Enums as dictionary keys support. Note that they resolve to QEnumDictionary<K, V> rather than QDictionary<K, V>. To avoid this implementation detail use var
  • Frame.AllocateList and Frame.AllocateDictionary overloads that take QListPtr/QDictionaryPtr for auto generic argument deduction. E.g.: var dict = frame.AllocateDictionary(c.DictPtr); c.DictPtr = dict;
  • Partial support for enums as dictionary keys. If an enum type is used as the dictionary key type in DSL, the QDictionaryPtr that's emit will use the underlying enum primitive type instead

Build 916 (Oct 20, 2021)

Changes

  • Reduced the FP.UsableMax raw value by 1, in order to prevent overflows in edge cases

Build 914 (Oct 14, 2021)

Bug Fixes

  • Fixed: An issue on 2D and 3D Physics Queries that could cause invalid memory accesses when the query boundaries were partially inside and outside the FP usable range

Build 913 (Oct 13, 2021)

  • Upgraded Photon Realtime to 4.1.6.9

Bug Fixes

  • Fixed: An issue on 2D and 3D physics solvers that could cause collision constraints to be ignored when stitching islands due to the existence of joint constraints
  • Fixed: Distance gizmos of 3D Spring Joint

Build 912 (Oct 12, 2021)

What's New

  • quantum.codegen.unity.host argument: third and subsequent arguments specify additional assembly search paths; useful when quantum.code references external assemblies

Bug Fixes

  • Fixed: DebugDraw.DrawSphere not using DebugDraw material

Build 911 (Oct 11, 2021)

What's New

  • FPMatrix2x2 operators and Inverted getter
  • IEntityPrototypeMaterializedListener - an interface that, if implemented by ComponentPrototype, will receive entity post-materialization notification

Removed

  • Old Physics3D.Joints API, now accessible through the PhysicsJoints3D component

Bug Fixes

  • Fixed: 2D Spring Joint prototypes now compute spring and damper settings after both the joint and connected entities are materialized (the later is optional)
  • Fixed: Default PrototypeMaterializationContext used on ComponentPrototype.AddToEntity(Frame, EntityRef) now has the Entity and ComponentTypeId fields set

Build 910 (Oct 08, 2021)

Changes

  • QDictionary indexer set method now inserts a new entry in case the key does not yet exist (same as System.Collections.Generic.Dictionary), instead of throwing an InvalidOperationException.
    Indexer get method now throws KeyNotFoundException instead of InvalidOperationException if the key is not found
  • CodeGen: less property drawer types generated. PrototypeDrawer is a partial class now and can have more types added with CustomPropertyDrawer

Bug Fixes

  • Fixed: Upgrade tools_and_assemblies.zip now contains tools/codeintegration_unity folder

Build 909 (Oct 07, 2021)

What's New

  • CodeGen [PreserveInPrototype] attribute. Added to a type marks it as usable in prototypes and prevents prototype class from being emit. Added to a field only affects a specific field. Useful for simple [Serializable] structs as it avoids having to use _Prototype types on Unity side

Bug Fixes

  • 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

Build 908 (Oct 06, 2021)

What's New

  • LayerInfo.GetLayerMask overloads that accept 1-3 layer names instead of an array of names, which can generate allocations if used inadvertently

Build 907 (Oct 05, 2021)

What's New

  • Frame.TryResolveList/Dictionary and Frame.TryFreeList/Dictionary - a way to avoid having to check pointer for being null or not

Build 906 (Oct 04, 2021)

What's New

  • GetCallbacks on 2D and 3D Physics API, allowing the retrieval of the physics callback flags currently set to a given entity

Bug Fixes

  • Fixed: AssetBasePostprocessor and EntityViewEditor not compiling in Unity 2021.2
  • Fixed: UnityEditorInternal.ReorderableListWrapper.Draw exception on editor startup for Unity 2021.1.23

Build 905 (Oct 01, 2021)

What's New

  • More overloads to add, get or set a (singleton) component using the component index instead of a static type

Bug Fixes

  • Fixed: StateInspector reflection ambiguity exception

Build 904 (Sep 30, 2021)

Changes

  • Upgraded Photon Realtime to 4.1.6.7

Build 899 (Sep 24, 2021)

Changes

  • InputProvider.CanSimulate now returns false instead of throwing an IndexOutOfRangeException in some cases where the requested frame is not in the input buffer

Removed

  • Marked QuantumRunner.StartParameter.IsRejoin and DeterministicSession.Join() isrejoin parameter as obsolete. It is not required to send this information anymore

Bug Fixes

  • Fixed: 2D and 3D static colliders position offsets not being scaled by the GameObject's transform

Build 897 (Sep 23, 2021)

Changes

  • EntityRef.GetHashCode is monotonic for sensible range (above short.max, for index and version)

Bug Fixes

  • Fixed: EntityRef.GetHashCode: results are more spread out

Build 896 (Sep 22, 2021)

Changes

  • Addressables support no longer marked as experimental

Build 895 (Sep 21, 2021)

What's New

  • Sleep method on 2D and 3D Physics Body components, to force bodies into a sleeping state

Bug Fixes

  • Fixed: An issue in the inertia computation of 3D physics bodies with center-of-mass offset and linked to colliders with compound shapes

Build 893 (Sep 20, 2021)

What's New

  • Quantum.Task.SystemThreadedFilter<T>, SystemThreadedComponent<T>, SystemArrayFilter<T> and SystemArrayComponent<T>: multi-threaded versions of base systems for component and filter iterators
  • ComponentFilterStruct.Reset methods and optional offset/count parameters
  • ComponentBlockIterator.Reset methods

Bug Fixes

  • Fixed: An issue in the navigation system for MovementType callback that could cause the desiredDirection parameter of the OnNavMeshMoveAgent callback to be (0/0) for the tick when a waypoint is reached and it could cause the waypoint detection to be inaccurate resulting in overshooting. NavMeshSteeringAgent now updates it's Velocity field in the case of MovementType callback

Build 891 (Sep 17, 2021)

What's New

  • Exposed Frame.ComponentCount(int componentIndex) overload, in addition to the existing type-bound method

Bug Fixes

  • Fixed: DeterministicConfig.Lockstep helpbox text
  • Fixed: Full type names not working with import struct and import enum

Build 890 (Sep 16, 2021)

What's New

  • 2D and 3D Hit structs now have Get and TryGet StaticCollider/StaticData methods, allowing safe and convenient access to info regarding a static collider hit

Build 887 (Sep 14, 2021)

What's New

  • Callbacks for Plugin Disconnects to be able to react to errors which will result in the simulation being destroyed (for this the IDeterministicGame interface was slightly modified).
    Use QuantumCallback.Subscribe(this, (CallbackPluginDisconnect c) => OnCallbackPluginDisconnect(c.Reason)); to be notified about the errors and pending shutdowns in Unity
  • 2D and 3D Static Colliders can now reference a Unity collider to be used as source

Bug Fixes

  • Fixed: 2D and 3D Physics Collider prototypes having the IsTrigger field as read-only on Inspector

Build 885 (Sep 12, 2021)

What's New

  • Safe overloads of 2D and 3D Physics' AddShapeCastQuery, ShapeCast and ShapeCastAll methods

Build 884 (Sep 11, 2021)

What's New

  • Create basic Static Mesh Collider with Hierarchy menu helper

Build 883 (Sep 10, 2021)

What's New

  • Documentation of 2D and 3D CharacterControllerMovement data returned by raw queries
  • Without and Any virtual properties to SystemMainThreadFilter, which can be overridden to define a set a components that the filtered entities should not have or have at least one, respectively
  • Overloads to Frame Add, AddOrGet, Set and Remove that accept a component index instead of a concrete type

Build 882 (Sep 09, 2021)

What's New

  • [PtrSize] attribute - a way to set Ptr data size to a constant (e.g. [PtrSize(10)]) or to a code snippet (e.g. [PtrSize("sizeof(FooComponent)")] or [PtrSize("p->sizeField")]). That way contents pointed to can be serialized without any need for user code

Build 879 (Sep 07, 2021)

Bug Fixes

  • Fixed: Usages of Photon.Realtime.Player class on QuantumMultiClientPlayer are now fully qualified to avoid type ambiguity

Build 878 (Sep 07, 2021)

What's New

  • FPMatrix3x3

Bug Fixes

  • Fixed: The computed inertia of 3D bodies with center of mass offset

Build 877 (Sep 06, 2021)

What's New

  • SimulationConfig.ChecksumErrorDumpOptions, a way to influence what's in checksum error framedumps
  • Quantum.Inspector.EnumFlags - a way to force enums to be drawn as flags for Unity < 2021
  • DumpFlag_AssetDBChecksums - print asset db checksums in the frame dump
  • SimulationConfig.ChecksumErrorFrameDumpOptions

Changes

  • EnumFlagsAttribute moved to to quantum.code. Old EnumFlagsAttribute still works, but is now obsolete

Build 876 (Sep 04, 2021)

Breaking Changes

  • Static colliders position and rotation offsets are now expressed in the local space of the GameObject's transform instead of in world space

Bug Fixes

  • Fixed: Drawing of add/remove vertex buttons on 2D static polygons with rotation offset

Build 875 (Sep 03, 2021)

What's New

  • Frame.DumpFlag_ComponentsChecksum - passed to DumpFrame will print each component's checksum
  • Support for multiple FramePrinter.PtrBufferAttribute per Ptr field. Useful if the pointer contains non-uniform data

Changes

  • FrameDump caused by a desync uses Frame.DumpFlag_ComponentsChecksum flag
  • Reduced NavMeshPathfinder size to 96 bytes (from 112)

Bug Fixes

  • Fixed: An issue in the NavMeshPathfinder component that could cause a desync which did not show any differences in the desync UI
  • Fixed: An issue in the serialization of waypoint link ids, accessible by NavMeshPathfinder.CurrentLink(), which caused wrong link ids for late-joiners
  • Fixed: NavMeshPathfinder serializing unused waypoints data
  • Fixed: Assertion error when allocating an UnsafeHashMap structure in a 32-bit architecture (e.g. ARMv7 on Android)

Build 874 (Sep 02, 2021)

What's New

  • Support for subclassing non-abstract asset types

Build 870 (Sep 01, 2021)

Changes

  • Made usages of the Photon.Deterministic.Native class fully qualified, to avoid clashes between different packages (like with Photon Fusion)

Build 865 (Aug 30, 2021)

What's New

  • GetPointVelocity and GetRelativePointVelocity helper methods to 2D and 3D Physics Body components

Build 864 (Aug 27, 2021)

Changes

  • QuantumEditorSettings inspector no longer displays an error if any of AssetSearchPaths is not an Assets-based path

Bug Fixes

  • Fixed: AssetDB not supporting assets from Packages

Build 863 (Aug 26, 2021)

What's New

  • Assert.Check and Assert.Always overloads that accept a string format and/or parameterized values, avoiding allocations on the method calls

Build 862 (Aug 25, 2021)

Bug Fixes

  • Fixed: Changing pdb type to portable for Quantum release dlls

Build 861 (Aug 23, 2021)

What's New

  • Safe overloads to 2D and 3D PhysicsBody AddLinearImpulseAtPosition and AddForceAtPosition

Bug Fixes

  • Fixed: An assertion thrown in ThreadLocal.AllocateMailboxBuffer() that was caused by a NavMeshPathfinder component being set to Active without having associated a navmesh using SetTarget() before

Build 860 (Aug 20, 2021)

Bug Fixes

  • Fixed: QList.GetEnumerator no longer generates box allocation

Build 859 (Aug 11, 2021)

Bug Fixes

  • Fixed: Inspector's ReorderableListWrapper exception for early Unity 2020.2 versions

Build 858 (Aug 05, 2021)

What's New

  • FP.MulTruncate - truncating multiplication, rounding towards negative infinity
  • Added a variable for EmptyRoomTTLInSeconds to the Photon Sever Settings script
  • The option to configure the server input buffer and history sizes when running a custom plugin
  • Spectator class (quantum.console.spectator) now can use local snapshots during reconnecting attemps
  • DeterministicPlugin and DeterministicServer now have access to EmptyRootTTL

Changes

  • Converting exeptions during the LUT initialization on the custom plugin SDK to meaningful error messages
  • FP.ToString - each FP has a unique string representation and has a minimal string length (within precision range)
  • Spectator class (quantum.console.spectator) Run() method can now be can be canceled with a CancellationToken
  • Spectator class (quantum.console.spectator) can pass an optional start parameters (e.g. LoadBalancingServer object) into the Run() method
  • Using DeterministicPlugin as logger interface when initializing the static Quantum log wrapper
  • The time window for accepting local snapshots (was fixed to 10 seconds) is now adapting to the EmptyRoomTTL (capped to 2 min)

Bug Fixes

  • Fixed: The behaviour of setting 0 for NavMeshAgentConfig.AngularSpeed which now disables setting any rotation on the transform by the agent steering (set to 200 or more to keep the rotation but disable the angular acceleration)
  • Fixed: An issue in the Spectator class that could cause the reconnection logic to delay or not run at all
  • Fixed: An issue in the Spectator project where DisconnectAsync() would cause an unwanted exception when the connection is already disconnecting
  • Fixed: An issue in SessionContainer where the allocator was shared between sessions which could cause problems with the custom plugin SDK when closing sessions
  • Fixed: An issue that could cause fast reconnecting players fail to start the simulation if they are also selected as a snapshot provider

Build 852 (Aug 04, 2021)

Changes

  • Array returned in SystemSetup.CreateSystems can have null elements - they are filtered out before any processing. This was already the behavior of CommandSetup.CreateCommands
  • DebugCommand now registers a dummy system and a dummy command in the Release configuration. This is to ensure replays can be used regardless of configuration. Define QUANTUM_DEBUG_COMMAND_DISABLED to fully disable DebugCommand

Bug Fixes

  • Fixed: Replays not being compatible across Debug and Release configurations due to DebugCommand's system and command being registered only in Debug builds

Build 851 (Aug 02, 2021)

Changes

  • QuantumAutoBaker visibility to public

Bug Fixes

  • Fixed: Removing the NavMesh borders < 16384 limitation
  • Fixed: FixedCurveDrawer using property name instead of display name

Build 850 (Jul 31, 2021)

What's New

  • Gravity Scale attribute to 2D and 3D Physics Bodies, which can be used to disable, scale and/or invert the direction of the applied gravity on each entity

Build 849 (Jul 29, 2021)

Changes

  • Remove/Destroy commands metadata are now stored in multiple memory blocks that expand and shrink on demand.
    This fixes issues with the heap page max size and reduces memory consumption when the usage of these commands is not uniform throughout the session

Build 848 (Jul 28, 2021)

Bug Fixes

  • Fixed: An issue with 3D Physics Bodies with Box shape that caused added angular impulses to not be integrated and added torques to be partially integrated
  • Fixed: PhysicsBody3D.ClearTorque not clearing accumulated torques, only angular impulses

Build 846 (Jul 24, 2021)

Breaking Changes

  • Quantum.Physics2D and .Physics3D classes were converted to namespaces of the same name, respectively. Access to the API and wrapped types should not be affected

What's New

  • DSL support to 2D and 3D Physics types: Hit, Hit3D, Shape2D, Shape3D, Joint, DistanceJoint, SpringJoint and HingeJoint
  • Serialization code to Physics2D.Hit and Physics3D.Hit3D

Changes

  • Increased max Systems count from 256 to 1024
  • Increased max Tasks count from 128 to 1024

Build 844 (Jul 21, 2021)

What's New

  • 2D Physics Joints API documentation

Bug Fixes

  • Fixed: StackOverflowException when using cyclic references in DSL. Name of the reentered type is printed in the error message instead

Build 843 (Jul 20, 2021)

What's New

  • PhysicsJoints2D.Capacity, .RemoveAt, .RemoveAtUnordered and .GetIterator

Bug Fixes

  • Fixed: Unity codegen issue: generic asset types no longer require [AssetObjectConfig(GenerateLinkingScripts = false)] attribute
  • Fixed: Unity codegen issue: generic asset types can be derived from

Build 835 (Jul 18, 2021)

What's New

  • 2D SpringJoint.GetStiffness, which converts spring and damper capacities to frequency and damping ratio, complementing the existing SetStiffness method

Bug Fixes

  • Fixed: Missing serialization for FPMatrix2x2

Build 834 (Jul 16, 2021)

What's New

  • New 2D Physics Joint System: includes Distance, Spring and Hinge joints
  • Exposed scheduled TaskCount in the frame TaskContext

Changes

  • Modifications to the frame PhysicsSceneSettings will now only affect the physics simulation from the following frame onwards, instead of having immediate effect

Removed

  • Old Physics2D.Joints API, now accessible through the PhysicsJoints2D component

Build 833 (Jul 09, 2021)

What's New

  • Implicit casts from UInt32, Int16 and UInt16 to FP
  • QuantumStallWatcher - a script that can crash the build and produce a call stack, in case a simulation stalls. Needs QUANTUM_STALL_WATCHER_ENABLED define symbol to be enabled

Build 832 (Jul 08, 2021)

Bug Fixes

  • Fixed: Quantum.codegen performance for large projects

Build 831 (Jul 07, 2021)

Bug Fixes

  • Fixed: Type mismatch between BitStream.WriteStringGZip and .ReadStringGZip serialization code that could corrupt the de-serialized data

Build 830 (Jul 06, 2021)

Bug Fixes

  • 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

Build 829 (Jul 02, 2021)

Changes

  • Upgraded Photon C# Client Library to 4.1.6.3

Bug Fixes

  • Fixed: An error in the Unity Quantum asset pipeline that was thrown when scene object were processed inside the Resources/DB folder

Build 824 (Jul 01, 2021)

Changes

  • Inverted the .gitignore proposal from excluding generated Quantum files (.cs and .dll) in the Unity project from version control to including them
  • Improved 3D Shape Cast algorithm to reduce the chances of FP overflow when working on a scaled simplex

Build 821 (Jun 28, 2021)

Bug Fixes

  • Fixed: Warning in MenuShortcuts.cs on Mac

Build 820 (Jun 25, 2021)

What's New

  • FPVector3.Slerp and SlerpUnclamper, equivalent to their Unity counterparts
  • FPMath.Exp

Bug Fixes

  • Fixed: Inconsistent line endings warning for CodeGen scripts on macOS

Build 819 (Jun 24, 2021)

Bug Fixes

  • Fixed: EntityViewUpdater creating/activating view instances without transform components at zeroed position/rotation instead of the default values defined on the EntityView object

Build 818 (Jun 22, 2021)

Changes

  • Attempting to retrieve Broad-phase query results using an invalid index will now throw an exception instead of logging a warning on Debug

Build 817 (Jun 21, 2021)

Bug Fixes

  • Fixed: AssetRefDrawers needing to be reset before assignment if using assets sub classes

Build 816 (Jun 18, 2021)

Changes

  • EntityViewUpdater.DestroyEntityView(QuantumGame, EntityView) is now declared as protected virtual and can be overridden in custom EVU implementations

Build 815 (Jun 17, 2021)

Changes

  • Upgraded Photon Realtime to version 4.1.6.2, 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
  • Old sample Assets/Photon/PhotonRealtime/Demos
  • Old Relatime changelog Assets/Photon/PhotonLibs/release_history.txt

Bug Fixes

  • 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

Build 814 (Jun 16, 2021)

Bug Fixes

  • Fixed: A typo in EntityView.ManualDisposal

Build 811 (Jun 14, 2021)

Breaking Changes

  • Frame.CalculateChecksum() uses a shared serializer by default, which means no allocs, but it is no longer safe to call the method from worker threads for frames from the same simulation. To disable this behaviour, pass QuantumGameFlags.DisableSharedChecksumSerializer in QuantumGame.StartParameters.Flags. Alternatively, use Frame.CalculateChecksum(bool) overload

What's New

  • Frame.CalculateChecksum(bool), where the parameter controls whether the shared serializer is used (not thread safe) or not (thread safe)

Changes

  • Frame.CalculateChecksum can now use shared frame serializer - pass "true" as the first parameter to enable this feature (not thread-safe)

Bug Fixes

  • Fixed: Collections of structures no longer allocate on serialization
  • Fixed: Memory allocation resulting from collections using non-static delegates

Build 808 (Jun 11, 2021)

Changes

  • 2D and 3D Physics Engines will log a warning and not run if the frame Map asset is null or invalid

Build 807 (Jun 10, 2021)

Bug Fixes

  • Fixed: QuantumStats prefab adding a new UnityEngine.EventSystem even if one already exists in the scene, causing a spam of warnings on newer Unity versions
  • 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: An issue in the Quantum Navmesh off-mesh link auto correction when importing a Unity navmesh which caused the correction to be unreliable

Build 798 (Jun 08, 2021)

Breaking Changes

  • We upgraded the PhotonHivePlugin.dll used by the Quantum plugin to version 1.1.0.24499. For Quantum Cloud customers nothing changes but Enterprise customers that want to run this new version need to upgrade their private cloud to Photon Server v5 RC1 (https://doc.photonengine.com/en-us/server/current/plugins/plugins-whats-new#plugins_api_version_upgrade)

What's New

  • FPQuaternion.SlerpUnclamped, Slerp version that does not clamp the interpolation factor
  • Added .gitignore file templates to the SDK package

Changes

  • Updating Quantum Custom Plugin SDK to Photon Server Plugin SDK v5-0-12-24499-rc1

Bug Fixes

  • Fixed: FPQuaternion.Lerp is now equivalent to Unity's Quaternion.Lerp, i.e. it interpolates towards negative 'target' if the dot product between the quaternions is negative

Build 793 (Jun 07, 2021)

Changes

  • QuantumEditorGUI performance improvements

Build 792 (Jun 03, 2021)

Changes

  • QuantumToolbarUtilities disabled for Unity 2021.1 until a way to fix it is found

Build 791 (Jun 02, 2021)

Bug Fixes

  • Fixed: Unity 2020.2 disappearing Compound Shapes array workaround
  • Fixed: Gizmos error when MapData is addressable
  • Fixed: A typo in tools/codeintegration_unity/README.md

Build 790 (Jun 01, 2021)

What's New

  • FP and FPVector property context menu to copy Raw values into the clipboard

Changes

  • Console.Runner and Console.Spectator project now depend on the quantum.code project and the Quantum dlls from the assemblies folder instead of the Unity dlls. If the Create Spectator button in Unity fails try replacing SolutionDir variable in the quantum.code.csproj PostBuildEvent

Bug Fixes

  • Fixed: Issues in the continuous collision detection of Physics Bodies with Compound shapes

Build 789 (May 31, 2021)

Changes

  • FP property drawers usage of PropertyScope improved

Bug Fixes

  • Fixed: An issue that was causing Physics Bodies with Compound shapes to have only half of gravity and applied forces integrated into the body velocity
  • Fixed: MapNavMeshRegion Cost property not being editable

Build 788 (May 27, 2021)

Changes

  • Removed the initialTick parameter from the DeterministicSession.Join() signature, because it is already passed into the constructor as part of the DeterministicSessionArgs

Bug Fixes

  • Fixed: An issue that could lead to NavmeshPathfinder agents become stuck at the last waypoint before the target
  • Fixed: An issue that could result in the NavmeshSteeringAgent jumping between 3D platforms when using the movement type Transform and the vertical positioning type Navemesh

Build 787 (May 26, 2021)

What's New

  • Frame.Unsafe GetPointerSingleton and TryGetPointerSingleton taking System.Type argument instead of being generic
  • Frame.RemoveSingleton(System.Type)

Build 786 (May 25, 2021)

Breaking Changes

  • The class SessionContainer has been refactored. Adapt changes by fixing the obsolete warnings and use explicit start methods StartReplay() or StartSpectator() or use the SessionContainer class from the Quantum.Legacy namespace

What's New

  • Quantum Spectator project - a headless connected Quantum simulation. Read the quantum_code/quantum.console.spectator/readme.md file how to use and set up

Changes

  • Setting LoadBalancingPeer.SentCountAllowance by default to 9, which plays better with the timeout detection in Photon Realtime 4.1.6.0
  • Removing all Debug.Draw code from release dlls
  • Updated Photon Realtime Version 4.1.6.0 (19. May 2021) (please delete the old chm file (4-5-1) by hand)

Bug Fixes

  • Fixed: The initial clock guess when running Spectator mode and making the offset configurable by DeterministicSession.SpectatingOffsetSec

Build 785 (May 21, 2021)

Bug Fixes

  • Fixed: An issue in the navmesh steering agent waypoint detection axis that prevented it to work properly in Quantum 2.1

Build 783 (May 21, 2021)

Bug Fixes

  • Fixed: An issue on the map data baking of 2D static polygons with rotation

Build 781 (May 21, 2021)

Bug Fixes

  • Fixed: An issue in the collision detection of 2D and 3D entities with CCD enabled that could cause ghost collisions and callbacks

Build 776 (May 19, 2021)

Bug Fixes

  • Fixed: An issue when detroying the entity owner of the callback flags during its OnExit physics callbacks

Build 770 (May 18, 2021)

Bug Fixes

  • Fixed: An issue that could cause a crash inside the Navmesh.LineOfSight() method due to an infinite loop

Build 769 (May 17, 2021)

Bug Fixes

  • Fixed: AssetRef drawers don't fallback to Asset Base when an abstract asset is used

Build 768 (May 13, 2021)

Bug Fixes

  • Fixed: Lacking of support to FPBounds3 in the code-gen interpreter and BitStream serialization
  • Fixed: Issues in the serialization of FPBounds2 and FPBounds3 structs

Build 767 (May 11, 2021)

Changes

  • Increased component limit from 192 to 256
  • Triangles in QuantumStaticMeshCollider3D are now marked as non-serializable. Gizmos for static meshes are now drawn from the map triangle data

Build 766 (May 10, 2021)

What's New

  • Support to 2D and 3D toggleable Static Colliders (all types), configurable on the Editor and toggleable in runtime with 'SetStaticColliderEnabled' in the respective physics API. Breaking

Changes

  • Rebake all maps to upgrade existing 3D toggleable mesh/terrain colliders

Bug Fixes

  • Fixed: An issue in the collision check against 3D trigger meshes that was causing false-positives

Build 765 (May 08, 2021)

What's New

  • 2D and 3D KCC components now can use Broad-phase queries by calling 'AddBroadPhaseQuery' from a system running prior to the Physics
  • Support to 2.5D Vertical Transform to the 2D KCC methods
  • Support to Continuous Collision Detection on 3D Physics Engine, which can be enabled on the SimulationConfig and the PhysicsBody3D Config flags. Rebake all scenes to upgrade existing Body prototypes' version

Changes

  • Reduced the default Hard and Soft Shape Cast Tolerances to 0.01 and 0.05, respectively, reflecting improvements in the algorithm

Bug Fixes

  • Fixed: 3D Shape Casts hitting mesh triangles' back face

Build 764 (May 07, 2021)

Bug Fixes

  • Fixed: An issue in the 2D CCD algorithm that could cause tunneling when the objects were already overlapping at the beginning of the time-step
  • Fixed: DumpFlag_PrintRawValues to enable raw printing, not the other way around

Build 762 (May 06, 2021)

What's New

  • DumpFlag_PrintRawValues: pass it to Frame.DumpFrame to avoid FPs being pretty-printed

Build 759 (May 05, 2021)

What's New

  • BitSetSIZE.Length property (returns bit capacity)

Changes

  • BitSetSIZE can now be checked/modified with instance methods (Set, Clear, IsSet, ClearAll), all the static methods have been deprecated
  • Added BitSet instance methods

Bug Fixes

  • Fixed: An issues with the delta angular velocity applied at 2D Physics' AddLinearImpulseAtPosition and AddLinearImpulse with relative point

Build 753 (May 04, 2021)

Changes

  • QuantumEditorGUI.DefaultIncludeChildrenInGetPropertyHeight to true to match UnityEditor.EditorGUI default parameter values better

Bug Fixes

  • Fixed: 2D and 3D Compound Shapes giving ArgumentOutOfRangeException on the Unity Inspector

Build 752 (May 03, 2021)

What's New

  • Navmesh generation can now automatically correct the navmesh link positions to the closest triangle (toggle on LinkErrorCorrection)
  • QuantumRunnerLocalDebug.PreloadAddressables - demonstrates a way to preload to preload addressable assets, if Sync Addressables are not an option

Changes

  • Reduced allocations during navmesh baking
  • Navmesh bake mode visual order in the dropdown list

Build 751 (Apr 30, 2021)

What's New

  • More CCD settings are now exposed on the SimulationConfig

Bug Fixes

  • Fixed: Frame Differ dumping the local Session/Runtime configs when a checksum error occured, instead of the instances received from the server and actually used on the simulation

Build 750 (Apr 29, 2021)

Bug Fixes

  • Fixed: An issue with the normal and penetration computation of 3D Box-Box collisions

Build 749 (Apr 28, 2021)

Changes

  • Optimized the Broad-phase AABBs of 2D Static Polygon entries

Build 747 (Apr 27, 2021)

Changes

  • Layers static class and its methods are now obsolete. All functionalities should now be accessed through the Frame.Layers property instead

Build 746 (Apr 26, 2021)

Bug Fixes

  • Fixed: An issue with the view interpolation on lockstep simulations (e.g. replays), where the previous verified state was not provided

Build 745 (Apr 23, 2021)

Changes

  • 2D Static Polygons now have their baked Position on the map as its Centroid position in world space, and its baked vertices are translated to this reference (re-centered)

Build 733 (Apr 21, 2021)

Changes

  • Created EntityViews are now parented under EntityViewUpdater.ViewParentTransform (if one is provided) on CreateView() instead of on CreateEntityViewInstance() to improve division of responsabilities

Build 731 (Apr 17, 2021)

What's New

  • API documentation for the 2D and 3D Hit structure of physics queries

Changes

  • Renamed 2D and 3D Hit.CastDistance field to CastDistanceNormalized, that better represents its functionality

Bug Fixes

  • Fixed: 2D and 3D ShapeConfig.UserTag field being displayed as read-only on Editor when initialized from a Unity collider source
  • Fixed: An issue with 2D Shape Casts involving Circles that could cause hits to be missed
  • Fixed: 2D and 3D Ray and Linecast queries now populate the Hit.CastDistanceNormalized field

Build 730 (Apr 16, 2021)

Changes

  • Importing Unity Navmesh progress bar cancel-able

Bug Fixes

  • Fixed: An issue that cause the navmesh generation to fault with an overflow exception when importing degenerate triangles
  • Fixed: An issue that could make the Unity navmesh importing hang on "Fix Triangles On Edges"

Build 729 (Apr 15, 2021)

Bug Fixes

  • Fixed: Unity 2020.3+ issue where when using QuantumCodeIntegration new generated asset/component scripts would not be referenceable until the next re-import

Build 727 (Apr 14, 2021)

Bug Fixes

  • Fixed: Issues when Physics Entries or HitCollection internal buffers needed to be expanded and Broad Phase Queries have been added
  • Fixed: An issue in FPCollision.CircleIntersectsAABB that would cause circles with radius 0 (point) inside boxes to not be considered as overlapping

Build 726 (Apr 13, 2021)

Bug Fixes

  • Fixed: 2D Physics Bodies having their X velocity being reset when the Y velocity is below the Min Linear Velocity Integration threshold

Build 725 (Apr 11, 2021)

What's New

  • 2D Polygons with invalid normals are now shown red on the editor and give warnings when baked

Build 724 (Apr 07, 2021)

Changes

  • Codegen header to use <auto-generated> tags

Build 723 (Apr 06, 2021)

What's New

  • Transform2D.TransformPoint, TransformDirection and their respective inverse operations

Build 722 (Apr 06, 2021)

What's New

  • Support to Continuous Collision Detection on 2D Physics Engine, which can be enabled on the SimulationConfig and the PhysicsBody2D Config flags. Rebake all scenes to upgrade existing Body prototypes' version
  • Derived structs get decorated with DerivedStructAttribute and implement IDerivedStruct<T> attribute

Build 721 (Mar 31, 2021)

Changes

  • Custom plugin project will init PhotonDeterminstic logging (in addition to Quantum logging)

Build 720 (Mar 27, 2021)

Bug Fixes

  • Fixed: 2D Physics's collision manifolds not being ignored if an involved entity has its collider disabled during a physics callback

Build 719 (Mar 25, 2021)

Bug Fixes

  • Fixed: BitSet.ClearAll methods for sets greater than 64 bits not resetting the entire buffer
  • 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: Joining a session with Spectate mode resulted in exceptions, now the mode will set the local player count to 0
  • Fixed: Debug log of duplicated asset paths

Build 718 (Mar 24, 2021)

What's New

  • Quantum.StartParameters now have explanatory comments

Bug Fixes

  • Fixed: QuantumEditorGUI for Unity 2021.1
  • Fixed: Missing MemoryLayoutVerifier.Platform initialization (MemoryLayoutVerifier.DefaultPlatform()) inside SessionContainer.Start()

Build 717 (Mar 22, 2021)

Bug Fixes

  • Fixed: Custom plugin simulation stalling if the session tryied to advance the clock more than it had inputs for

Build 716 (Mar 19, 2021)

Bug Fixes

  • 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: ArgumentNullException on console runner if no checksum file is provided

Build 713 (Mar 17, 2021)

What's New

  • [EmitFixedArray] attribute - can be applied to array<T>[N] fields to force the FixedArray<T> proxy properties being generated, even for integer types

Bug Fixes

  • Fixed: Custom Plugin sample, now disposing the session container in OnCloseGame instead of in BeforeCloseGame, so the simulation is still available during EmptyRoomTTL

Build 711 (Mar 15, 2021)

What's New

  • XML API documentation files alongside core and PhotonDeterministic dlls (assemblies folder). If you don't want them to be copied into the Unity Quantum assemblies folder add this line to each configuration property group (debug, release) in your quantum.code.csproj <AllowedReferenceRelatedFileExtensions>.pdb</AllowedReferenceRelatedFileExtensions>

Changes

  • AssetDB is now exposed in the Frame Context

Build 710 (Mar 13, 2021)

Bug Fixes

  • Fixed: NullReferenceExceptions when a client gets disconnected by the server after his local session is created and before it is started
  • Fixed: 2D and 3D physics bodies not being awakened in a collision if no impulse was necessary to solve it

Build 709 (Mar 12, 2021)

  • Updated release history format

Bug Fixes

  • Fixed: 2D and 3D physics bodies not having their linear and angular velocities reset when put in a sleeping state

Build 707 (Mar 11, 2021)

Changes

  • FixedArray indexer now returns a reference, so explicit copies or GetPointer are no longer needed to modify a nested field

Build 706 (Mar 10, 2021)

  • Upgraded Photon Realtime to version 4.1.5.1

Breaking Changes

  • The new Realtime version restricts access to the auth token. As a guideline reconnecting after losing the connection object should always pass through the name server again

What's New

  • A system to track the player connection state (add PlayerConnectedSystem to your SystemSetup.cs) to trigger PlayerConnected and -Disconnected signals
  • BitSet static class with IsSet, Set, Clear and ClearAll overloads for each BitSetSIZE
  • Local frame snapshots during reconnecting in the demo menu
  • StartGameTimeout to QuantumRunner params (optional). This can be used to mitigate issues when players late-join or reconnect while there is no other client or server to provide a snapshot

Changes

  • BitSetSIZE IsSet, Set, Clear and ClearAll are now generated as obsolete
  • The demo menu scene UIConnect class by moving code into helper classes to make the connection flow more clear

Bug Fixes

  • Fixed: A typo in QuantumToolbarUtilities code preventing the toolbar from working

Build 705 (Mar 09, 2021)

What's New

  • QuantumMapDataBakeFlags.ClearUnityNavMesh to optionally reset the Unity navmesh after baking. This solves issues with wrongly converting the Unity scene asset to binary using ForceText asset serialization

Build 703 (Mar 08, 2021)

Changes

  • Events raising methods now return an event instance (or null, if the event has been culled). This makes setting fields added to events with partial classes easier
  • List, dictionaries and Ptr fields are now nullified on component being removed (after ISignalOnComponentRemoved<T> has been invoked). This includes fields that nested structs and arrays a component might have. To avoid this apply [DontClearOnComponentRemoved] attribute on a field
  • Ptr is now serializable

Bug Fixes

  • Fixed: Issues with debug drawing Draw.Circle() when using QUANTUM_XY, enabled drawing 2D shapes with 3D positions

Build 702 (Mar 05, 2021)

Bug Fixes

  • Fixed: Events not being pooled and allocating with each raise
  • Fixed: Frame.Heap.AllocateAndClearPtr returning non-null Ptr values in case it failed to allocate the requested size on the frame heap
  • Fixed: Redundant prompts to reload solution when using code integration

Build 700 (Mar 04, 2021)

Bug Fixes

  • Fixed: 3D Physics colliders that have a shape with center offset sometimes missing collisions with triangles in a mesh
  • Fixed: The centroid computation of 3D compound shapes (also affected dynamic compounds' center of mass)
  • Fixed: False-positive component override message and a subsequent crash when materialising a prototype that forces entity pool to grow

Build 699 (Mar 02, 2021)

Bug Fixes

  • Fixed: An issue on 2D and 3D regular first-hit-only raycasts and linecasts that could cause the wrong hit to be returned

Build 698 (Mar 01, 2021)

Build 696 (Feb 26, 2021)

What's New

  • DotNetTaskRunner for simulation processing on the plugin and console runner
  • QuantumMultiClientRunner.InitialPlayerCount - a way to kick-start multi-client runner with a number of players

Changes

  • Core and PhotonDeterministic dlls paths of the custom plugin solution now point to the Unity folder, this way changing between debug and release dlls on the local plugin project is possible by recompiling the code solution
  • Events are now confirmed/cancelled in the order they have been raised. Non-synced duplicated events (i.e. raised from the same tick, with the same parameters) still have their handler and confirmation/cancellation invoked once - for the first instance

Bug Fixes

  • Fixed: An issue with Photon Server Settings Editor that did not save changes to PlayerTTL only
  • Fixed: QuantumToolbarUtilities occasional error on startup

Build 692 (Feb 24, 2021)

Changes

  • QuantumEditorSettings.EntityComponentInspectorMode default value to InlineInEntityPrototypeAndHideMonoBehaviours

Build 691 (Feb 23, 2021)

Changes

  • EntityPrototype and EntityView editors - more consistent with other editors when dealing with prefabs

Build 688 (Feb 22, 2021)

What's New

  • DSL keyword enum_count: enum_count<EnumType> can be used as a constant (for an array size etc.)
  • FrameSerializer.PointerResolve(Ptr*, int) that can be used to resolve pointers used in components

Bug Fixes

  • Fixed: QuantumStaticMeshCollider3D & QuantumStaticTerrainCollider3D are now properly marked dirty after a bake

Build 687 (Feb 19, 2021)

Changes

  • Quantum Inspector can now edit multiple objects

Bug Fixes

  • Fixed: Systems inside SystemMainThreadGroup or SystemGroup not having OnInit/OnEnabled callbacks called

Build 686 (Feb 18, 2021)

Bug Fixes

  • Fixed: An issue on the inertia matrix computation of 3D bodies with compound shapes that could cause them to not rotate on collisions
  • Fixed: The missing GenerateAssetDB flag when running Bake All Scenes Map Data from the Quantum Unity menu

Build 683 (Feb 17, 2021)

Changes

  • The default name for the asset db to db.json (was assetDB.json) for the replay and savegame shortcuts

Bug Fixes

  • Fixed: 2D and 3D collision solving of dynamic colliders with compound shapes
  • Fixed: Unresolved pointers error when deserializing a frame with compound shape buffers tracked for disposal

Build 678 (Feb 15, 2021)

What's New

  • [FreeOnComponentRemoved] attribute initial work

Bug Fixes

  • Fixed: ArrayLengthAttribute did not work in some cases

Build 673 (Feb 12, 2021)

Changes

  • The implementation of FPCollision.ClosestDistanceToTriangle to support queries for tiny and huge triangles by reducing the precision for them

Bug Fixes

  • Fixed: An accuracy issue in the 2D Box-Circle narrow check that could result in false positives with slightly negative penetrations, throwing assertion errors in Debug mode

Build 672 (Feb 11, 2021)

What's New

  • FrameBase.Set method overloads accepting AssetRefEntityPrototype

Changes

  • QuantumAutoBaker better error handling

Bug Fixes

  • Fixed: An issue where adding [Serializable] attribute in DSL resulted in compile error
  • Fixed: An issue with FPCollision.ClosestDistanceToTriangle that could cause a div by zero exception on tiny triangles
  • Fixed: Displaying name of Config flags field of PhysicsBody components on entity prototypes
  • Fixed: QUANTUM_ADDRESSABLES properly stripped from a package
  • Fixed: Removed BOMs from merged scripts

Build 668 (Feb 10, 2021)

Changes

  • FrameBase.Set(EntityRef, EntityPrototype) and FrameBase.Set(EntityRef, EntityPrototype, out ComponentSet) now invoke ISignalOnEntityPrototypeMaterialized
  • Unity QuantumCallbacks' constructors have been made public

Bug Fixes

  • Fixed: An issue QuantumStateInspector would not refresh GUI when stepping frame-by-frame
  • Fixed: Inertia computation of sphere bodies that could cause issues when rotating on the Z or X axis

Build 667 (Feb 09, 2021)

Changes

  • Warning when FindAsset encounters an asset type mismatch

Bug Fixes

  • Fixed: 2D and 3D PhysicsCallbacks and PhysicsJoints components printing the full internal buffers on the State Inspector or on frame dumps instead of only the used count
  • Fixed: ArrayLength attribute gets applied on arrays even if a field is hidden
  • Fixed: Navmesh gizmo triangles and Pathfinder Gizmos from the QuantumEditorSettings for QUANTUM_XY

Build 665 (Feb 05, 2021)

Bug Fixes

  • 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

Build 664 (Feb 04, 2021)

Bug Fixes

  • 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: Possible DivideByZeroException on raycast-sphere checks when the ray length is too small
  • Fixed: QuantumStateInspector issue where components filters were not applied on script recompilation
  • Fixed: QuantumStateInspector issue where exceptions thrown by the state object inspector would mess up the entire UI
  • Fixed: QuantumStateInspector issue where lists with elements removed were triggering an assertion
  • Fixed: Wrong info on physics callbacks when an entity was involved in multiple OnEnter/OnExit conditions in the same frame

Build 660 (Feb 03, 2021)

Changes

  • Upgrade_instructions to clear up the instructions about changes in the Unity project editor folders

Build 659 (Feb 02, 2021)

  • Improved QuantumStaticMeshCollider3D.Bake() by reducing the number of Unity Mesh property calls

What's New

  • Custom Quantum Plugin API documentation

Changes

  • There's an implicit limit of max allocation (64kB), regardless of the page size. Improved exception message if that error is reached

Bug Fixes

  • Fixed: Possible null ref exception on custom plugin

Build 656 (Feb 01, 2021)

  • Removed AssignEntityRefs prototype creation step. From now on entities are mapped during Materialization step

What's New

  • ComponentTypeNameAttribute to handle component type selection more easily in the editor

Changes

  • ComponentTypeSetSelector and ComponentTypeSelector use component type name instead of Assembly Qualified Name. The old field has been made obsolete, but still works
  • JsonAssetSerializerBase detects if a type is from quantum.code assembly and uses a short name in that case
  • Dictionary inspector for prototypes. An error icon is shown if there are duplicate keys. Keys are inlined and made read-only for folded elements

Bug Fixes

  • Fixed: Emit custom attributes for dictionaries

Build 653 (Jan 29, 2021)

Bug Fixes

  • Fixed: 2D and 3D Physics Solvers' accumulative impulse when colliding with several entries

Build 651 (Jan 28, 2021)

  • Removed PhysicsSandbox.qtn missing file from the SDK package (DEV only)

What's New

  • Embedded asset db file loading to the custom plugin (will be documented in upcoming plugin docs revision)

Changes

  • Generated Asset scripts fully qualify the type of their Settings field to avoid possible conflicts. Cherry pick of 72fdb0af48b6e2080c1663c1b79dfbc84ebd925e
  • RangeDrawer to RangeAttributeDrawer
  • Removed special version information from the custom plugin project references

Build 650 (Jan 27, 2021)

  • Removed quantum.console.runner project from the Quantum code solutions, it's still inside the SDK though

What's New

  • Overloads to 2D Physics API that accept a persistent HitCollection* instead of allocating a temporary one
  • Overloads to 3D Physics API that accept a persistent HitCollection3D instead of allocating a temporary one

Bug Fixes

  • Fixed: 3D Shape Queries with position offset when resolving against the 3D Scene Mesh
  • Fixed: CircleCast->Circle and SphereCast->Sphere checks when the casted shape had position offset
  • Fixed: Line endings in Quantum AOT

Build 649 (Jan 26, 2021)

  • Removed Navigation.Contants.VelocityObstacleTruncationFactor and moved it to the navigation part in simulation config

What's New

  • Print support for dictionaries
  • Prototypes are correctly generated for types containing dictionaries (Unity inspector is a bit lackluster at the moment)
  • Partial method UnityDB.LoadAssetResourceContainerUser - a way to change where AssetResourceContainer is loaded from. If not implemented, it is loaded as a Resource from QuantumEditorSettings.AssetResourcesPathInResources). Renamed: UnityDB.ResourceManager to UnityDB.DefaultResourceManager (the old property is still available, but made obsolete)
  • QuantumEvent/Callback.Subscribe overload that takes an array of game modes

Changes

  • AutoMenu to start the map right away if there is only one to chose from

Bug Fixes

  • Fixed: Warning in Quantum Unity scripts emitted from UnityInternal
  • Fixed: Issue on the trigger detection between physics colliders with compound shapes and trigger static meshes
  • Fixed: Unity 2020.2.2 reflection error for LayerMatrixGUI.DoGUI

Build 644 (Jan 21, 2021)

Bug Fixes

  • Fixed: An issue where [Reorderable] array would not expand in Unity 2020.2

Build 637 (Jan 18, 2021)

  • Initial release

Bug Fixes

  • Fixed: Inspector for arrays in Unity 2020.2: reorderable lists are simply not compatible with Quantum Editor GUI and hence have been disabled for Quantum types for now
Back to top