SDK & Release Notes
Getting the Quantum SDK
Version | Release Date | Download | |
---|---|---|---|
1.2.4.5 Stable | 04. Feb, 2022 |
Quantum SDK 1.2.4.5 F1 Quantum CustomPlugin 1.2.4.5 F1 |
Release Notes |
1.2.4.4 Stable | 28. Apr, 2021 |
Quantum SDK 1.2.4.4 F1 Quantum CustomPlugin 1.2.4.4 F1 |
Release Notes |
1.2.4.3 Stable | 04. Feb, 2021 |
Quantum SDK 1.2.4.3 F1 Quantum CustomPlugin 1.2.4.3 F1 |
Release Notes |
1.2.4.2 Stable | 26. Aug, 2020 |
Quantum SDK 1.2.4.2 F1 Quantum CustomPlugin 1.2.4.2 F1 |
Release Notes |
1.2.4.1 Stable | 27. Feb, 2020 |
Quantum SDK 1.2.4.1 F1 Quantum CustomPlugin 1.2.4.1 F1 |
Release Notes |
1.2.4 Stable | 13. Dec, 2019 |
Quantum SDK 1.2.4 F1 Quantum CustomPlugin 1.2.4 F1 |
Release Notes |
Requirements
- Minimum Unity 2017.2.0 (tested up to 2019.1)
- Visual Studio 2017, JetBrains Rider
- Microsoft Windows 10 or Mac OS X
Supported Platforms
- Microsoft Windows
- MacOS X
- Android
- iOS
- Nintendo Switch (NintendoSDK 5.5.0 or higher)
- Xbox ONE
- PS4
SDK contents
The SDK is distributed as a zip file, which contains: a bootstrap project (VS solution for the gameplay simulation, Unity project for the view integration), and upgrade instructions (including all necessary files).
The current files and folders are included in the SDK compressed file:
assemblies
(folder): quantum run-time libraries (that are included into client builds);quantum_code
(folder): bootstrap gameplay simulation visual studio solution (2 projects). Includes basics classes, but no sample game state;quantum_unity
(folder): bootstrap unity project (includes some quantum unity integration sample sources such as loaders, debug runner, entity prefab scripts, etc);tools
(folder): quantum compile-time libraries (DSL-parser/compiler/code-generator and IL patcher) that are used in the visual studio solution for the gameplay simulation, but are not used during runtime;upgrade
(folder): upgrade instructions + replacement packs and files;release_history.txt
(file): lists added features, bug-fixes, etc, since the first release of the Quantum ECS SDK (same as listed below).build_info.txt
(file): exact info about the build, keep up to date for better support.
Release Notes
1.2.4.5
F1 (Feb 04, 2022)
- Fixed an issue with the normal and penetration computations on 3D Box-Box collisions.
- Fixed excessive memory allocations due to pre-loading of static Physics broad-phase structures on Map assets.
- Fixed PhysicsSystemBase, now allowing selective calls to 2D or 3D Physics Updates by overrides on PhysicsSystemPre.
- Fixed type mismatch between
BitStream.WriteStringGZip
and.ReadStringGZip
serialization code that could corrupt the de-serialized data. - Fixed missing support to
FPMatrix2x2
in the DSL. - Fixed an issue on 2D and 3D KCCs that could cause the penetration correction to push the character further inside the collider in case the contact point was past the character center in the normal direction.
- Fixed an issue on the de-serialization of multiple Commands of the same type on the same frame.
- Added the option to configure the server input buffer and history sizes when running a custom plugin.
- Upgraded the custom plugin SDK to Photon Server 5 (version 5.0.12.7770). When upgrading the custom plugin make sure to delete everything inside
Photon-Server
first and then extract the new SDK. Significant changes: New game server plugin config location isPhoton-Server/deploy/LoadBalancing/GameServer/bin/plugin.config
. A license file has be be downloaded from the PhotonEngine dashboard and placed intoPhoton-Server\deploy\bin_Win64
. PhotonControl does not have to be used to Set Local Game Server IP any more.
1.2.4.4
F1 (Apr 28, 2021)
- Fixed new Inspector files added on 1.2.4.3 missing from the upgrade package.
- Fixed 2D and 3D physics bodies not having their linear and angular velocities reset when put in a sleeping state.
- Fixed Custom Plugin sample, now disposing the session container in OnCloseGame instead of in BeforeCloseGame, so the simulation is still available during EmptyRoomTTL.
- Fixed an accuracy issue in the normal computation of the 2D box-circle narrow phase.
- Fixed an issue in FPCollision.CircleIntersectsAABB (used by OverlapCircle query) that would cause circles with radius 0 (point) inside boxes to not be considered as overlapping.
- Fixed 2D OverlapCircle queries not checking against static polygons.
- Added missing
UNITY_TVOS
directive when setting the correct Native Library on QuantumRunner.Init.
1.2.4.3
F1 (Feb 04, 2021)
- Fixed static mesh baking: degenerate triangles with zeroed normals are now removed.
- Fixed wrong collision normal computations on sphere-box collisions when the sphere center was inside the box.
- Fixed issues when a 2D or 3D KCC center was inside a box, which could produce zeroed penetration correction.
- Fixed memory leak when running the simulation on the server with the custom plugin sample.
- Fixed Raycast-Sphere accuracy issue when the ray length was very large relative to the sphere radius.
- Fixed EntityRefType.Equals(object other) generated methods not correctly returning true when the objects are equal.
- Changed FPQuaternion.FromToRotation to normalize the input vectors by default, avoiding precision issues.
- Added FPQuaternion.FromToRotationSkipNormalize to the API as a more performant option when vectors are known to be normalized or have magnitude close to 1.
1.2.4.2
F1 (Aug 26, 2020)
- Fixed the BeginLayoutGroup error logged in Unity after pressing Bake in Unity 2019.
- Fixed StaticColliderData not correctly displaying the layer of the object, altough the collider itself would be baked into and behave as in the correct layer.
- Fixed an issue in the KCC steering that was making the character jump with a slightly lower impulse than the one actually set in the jump config.
- Fixed an issue in the KCC steering that was clamping the vertical velocity of the character if it was moving and then jumped.
- Fixed an issue in the KCC raw movement computation that could cause position correction overshooting. More noticeable in the 3D KCC when using a higher count of max contact points.
- Fixed static collider gizmos (2D and 3D boxes and 2D polygons) not matching the baked values when a parent of the GO had a non-uniform scale.
- Fixed an issue with sphere-box collisions when the sphere center was inside the box.
- Fixed an issue with FPVector2 and FPvector3.Angle methods the could cause a wrong angle value if the vectors were opposit to each other.
- Fixed an issue with the penetration correction of box-triangle collisions that could cause over-correction.
- Fixed a DivideByZero Exception on FPCollision.LineIntersectsCircle if the line start and end points were the same or just slightly different.
- Fixed the computation of 2D and 3D dynamic bodies' inertia.
- Fixed NavMeshAgent waypoing flags not being serialized in the frame serialization.
- Improved the 2D and 3D Collision Solvers' computation of normal and tangent impulses.
- Improved ray-triangle intersection point accuracy for 3D raycast queries.
- Improved box-triangle narrow collision detection for small scale entries.
- Improved KCC Grounded state stability by using the Config.Extent radius for ground detection. Movement Type definition has not changed, only considering the contacts inside the main KCC radius.
- Improved Entity Prefab Root: now handling 2D entity views with Transform2D Vertical component (2.5D Physics).
- Added a PenetrationCorrection field to the 2D and 3D KCC config assets, used as a factor to apply the correction in the steering method, also fixing an issue that could cause jittery behavior if the KCC acceleration was higher than the simulation rate.
- Added GetInertia, SetInertia, AddForceAtPosition and AddLinearImpulseAtPosition to 2D and 3D Dynamic Bodies API.
- Added SimulationConfig.MinAngularIntegration that defines a minimum DynamicBody.AngularVelocity value that can be integrated into a Transform.
- SimulationConfig.Physics.PenetrationCorrection is now clamped between 0-1 when the asset is loaded, preventing from glitchy behaviors that higher values would cause.
RC1 (Apr 22, 2020)
Breaking Changes:
The setup of NavMesh regions quickly reaches the 64 count limit when working with multiple navmeshes per map.
With this update the regions are now merged and saved on the map asset and shared over all navmeshes. The new behavior can be disabled by enabling Map.UseLegacyRegionOffsets.
Re-baking of all maps and navmeshes is required.
Select each agent config in the Editor once to initialize the avoidance radius setting.
UsePhysics has been removed from NavMeshAgentConfig. Set the new option Move Agent By
to Transform
(UsePhysics off) or DynamicBody
(UsePhysics on).
- Fixed navmesh regions with multiple navmeshes in one map. The region names are now merged into one list on the map and are controlled via the map API (SetNavMeshRegionActive).
- Fixed an issue that prevented the navmesh agent steering from being applied to Transform3D or DynamicBody3D and changed the navmesh agent filter to make Transform2D and DynamicBody part of the Any block while also adding the 3D components
- Fixed an issue that caused a glitch in navmesh agent steering (speed was set to 0 for one tick) when reaching a waypoint.
- Fixed an issue that created unnecessary waypoints that were very close together.
- Fixed an issue that caused navmesh agent steering glitches during re-pathing (due to not having a valid target for one or more ticks). An additional waypoint is cached on the agent that is only used during re-pathing.
- Fixed an issue with initial clock-guessing during input-based reconnects.
- Fixed an issue that resets the Quantum AnimatorGraph asset guid when pressing Import.
- Fixed an issue with the index range check done on Map.GetStaticCollider3D.
- Fixed an issue that caused 3D ray casts not to consider the layer mask when checking against static meshes.
- Fixed an issue with the AOT file generation when member have the same names.
- Fixed DynamicBody3D.Torque not being reset every tick by the 3D Physics engine.
- Fixed an issue with the rotation interpolation that was causing rotation teleports on the view objects.
- Fixed an issue with the AnimatorGraph asset when deserializing from Json (desync, exceptions).
- Fixed an issue with the computation of sphere-sphere collision penetration.
- Fixed an issue with the gizmos drawing of static spheres attached to GameObjects with scale different than 1.
- Fixed an issue with the mesh baking process that could cause FPVector3 overflows.
- Improved the experimental avoidance quality for agents that are moving around each other very slowly.
- Improved the experimental avoidance quality against non-moving agents by using truncated velocity obstacles.
- Improved the experimental avoidance performance by not generating velocity obstacles for non-moving agent that do not affect the path to the current target.
- Improved the experimental avoidance performance by inlining math.
- Added support to import Unity Offmesh links (Activated, AutoUpdatePositions and Navigation Area properties are ignored). ISignalOnNavMeshWaypointReached is called when reaching a link.
- Added a specific avoidance radius field to the agent configs to be able to use different radii for steering and for avoidance. When selecting the config file in the Editor the value will be initialized with the current agent radius.
- Added region selection to each individual NavMeshAgent that can be changed at run-time:
NavMeshAgent.SetNavMeshRegionActive(1UL << f.Map.GetNavMeshRegionIndex(“Gate001”), false);
- Added Acceleration field to the NavMeshAgent that can be changed at run-time.
- Added experimental avoidance signals for customization purposes: ISignalOnNavMeshCanAvoid, ISignalOnNavMeshBeforeComputeAvoidance.
- Added an option to disable resetting the agent after OnTargetReached callbacks to prevent invalidating a potential call to SetTarget() during the callback (resetAgent parameter).
- Added an option (LineOfSightFunneling) to the navmesh agent config that tries to remove unnecessary waypoints from the funnel which sometimes occur in conjunction with active regions in the proximity.
- Added an option (WaypointDetectionDistance) to the navmesh agent config that improves the waypoint reached detection for fast-moving or slow-turning agents. For this feature an another additional waypoint (agent starting position) is cached in the navmesh agent.
- Added an option (NavMeshConstants.DebugGizmoSize) to change the navigation gizmo size.
- Added the UpdateInterval setting to the individual navmesh agent config and removing the global one from SimualtionConfig.
- Added mask and layer settings to navmesh agent config to fine-tune avoidance.
- Added Priority, AvoidanceLayer and AvoidanceMask to NavMeshAgent component to make the values changeable at run-time (initial values are set during Agent.Init()).
- Added an option to enable navmesh agent steering and avoidance callbacks individually: SimulationConfig.Agent.EnableCallbacks is split into EnableSteeringCallbacks and EnableAvoidanceCallbacks.
- Added the Steering option
Callback
on each NavMeshAgentConfig to explicitly enable the OnNavMeshUpdateSteering signal for this agent (IgnoreInternalSteering still has to be set). Make sure Agent.CurrentVelocity is always set even if the agent movement is not desired (see the Move By setting). - Added support to sphere-triangle collision detection when sphere is behind triangle plane.
- Added mesh triangle index info to DynamicHit3D.
- Added FPMatrix4x4 math class to the PhotonDeterministic library.
- Added Transform3D utility math methods.
- Added FPQuaternion.AsEuler (uses the same order of rotations as Unity)
- Added support to offsetting the center of mass on 2D and 3D Dynamic Bodies.
- Added a
Use Manifold Normal
option to 2D and 3D KCC config assets and an optional parameter to kcc methods in order to choose between using the default normal computation or the one from the overlap manifold. - Added support to minimum linear velocity integration on the 3D Physics. Use the existing 'SimulationConfig.Physics.MinLinearIntegration' field to enable it.
- Added debug log information on exceptions during asset loading.
- Added a utility method to the NavMesh class that helps to move an agent out of invalid navmesh area (MovePositionIntoNavmesh.
- Made NavMesh.FindTriangle() method to get a triangle index at a position public.
- Deprecated FPQuaternion.EulerAngles (for using different order of rotations than Unity)
- Changed MapNavMeshBaker.BakeNavMesh() to accept a parameter object (MapNavMeshBakeData) instead of an MapNavMeshDefinition instance to make it possible to input custom navmesh data without creating a Unity object. Use MapNavMeshDefinition.CreateBakeData() to create a parameter object from the definition.
- Removed UsePhyics option in NavmeshAgentConfig and replaced it with Move Agent By setting. In this manner the movement done by the agent can also be set no do nothing which helps with driving the agent in a custom way.
- Removed useless allocations in the OnInputConfirmed callback.
1.2.4.1
F1 (Stable) (Feb 27, 2020)
- Fixed issues with box-triangle intersection check that was causing collisions to be missed when they were aligned or the triangle was inside the box.
- Fixed an issue with box-triangle collision points calculation that was causing some points to be missed.
- Fixed an issue with the penetration calculation of box-triangle intersection.
- Fixed an issue that clock alias interpolating was not applied to entities with 3D transforms.
- Fixed an issue with the CharacterController3D that caused hits being detected before landing and so making it float instead of being grounded.
- Fixed an issue with the contact point position during triangle-sphere 3D narrow phase detection.
- Fixed an issue with the normal calculation of circle-polygon intersection.
- Fixed an issue with the editor drawer of 2D static colliders that did not take the object rotation into account.
- Fixed CharacterController 2D and 3D configs typos (Config.Braking).
- Fixed physics layer matrix drawing in the SimulationConfig Unity version 2018.3 and newer.
1.2.4
Major Features:
Filters: it is now possible to define custom entity filters in the DSL files. Filters will result in iterators over active entities that match the desired composition of components.
Breaking Changes:
A NavMesh re-import and re-bake is required for all existing navmesh assets due to internal changes to data structures.
A Map re-bake is required because of new data structures used for 3D physics.
Extended the signature of NavMesh methods by INavMeshRegionMask which is implemented by the Frame class.
Removed NavMeshAgentConfig.ProximityFactor and replaced it with an absolute AvoidanceRange.
Changed the signature of the QuantumGameCallbacks.InputConfirmedDelegate to remove allocation. The allocation will still occur when input recording is enabled.
Known Issues:
If using 3D physics on mobile platforms, these are the minimum Unity and runtime versions required:
- IL2CPP builds: Unity 2017.2 and up.
- Mono builds: Unity 2018.1+ and runtime 4.x (3D physics will fail with 3.5 mobile mono builds).
Re-bake all maps to correctly initialize new data structures.
F1 (Stable) (Dec 13, 2019)
- Breaking Change: Re-baking all NavMeshes is required.
- Fixed an issue with NavMeshAgent.SetTarget() when the target position is exactly lying on a triangle edge.
- Fixed an issue with validating NavMeshAgent start and target positions when using regions and multiple navmeshes in one map.
- Fixed a StackOverflowException during the AOT file generation when having valid circular dependencies of types in Quantum assets (e.g. Buff references another Buff).
- Fixed processing List<> fields in AOT file generation.
- Fixed an issue in EntityPreviewUpdater that caused exceptions when Prefab is set to null.
- Fixed an issue when baking Quantum Animations using the Exit state which is now replaced by the default state.
- Fixed an issue with 3D BoxBox narrow phase collision checks that would ignore the collision if one box would be fully inside the other.
- Fixed an issue that would cause 3D manifolds initial pool to be empty (would allocate on first use fine).
- Fixed an issue with 3D Shape Overlaps where normals where not always pointing towards the shape being tested.
- Changed Quantum animation baking to stop and throw an error when detecting states without a motion clip.
- Changed NavMeshAgent.MaxSpeed to be public which can be used to change the agent speed at run-time.
- Disabled 0414 warnings from CodeGen.Gen.cs.
- Added Forward, Back, Up, Down, Left, Right property getters to Transform2D and Transform3D.
- Fixed some UI issues and warnings with Unity 2019.3.
RC2 (Nov 19, 2019)
- Fixed an issue with 3D box-box collision detection with aligned rotations in which the normal would be the zero-vector.
- Fixed an issue with KCC ComputeRawMovement() in which the penetration value would be passed as a negative number on callbacks.
- Fixed an issue with the 2D contact point calculation during OverlapShape() when using a circle against a rotated polygon.
- Fixed an issue with dynamic bodies (2D and 3D) that are set to kinematic (InitKinematic) during user collision callbacks.
- Fixed an issue that caused the navmesh steering callbacks to be executed while SimulationConfig.NavMeshAgent.EnableCallbacks was toggled off.
- Fixed an issue with EntityPrefabViewUpdater.CreateEntityPrefabInstance() that was ignoring the y component when using QUANTUM_XY.
- Fixed DebugDraw.Rectangle() gizmo rendering for QUANTUM_XY.
- Fixed GizmoUtils.DrawGizmoPolygon2D() to correctly draw polygon normals when the transform/matrix has scaling information. The normals of a QuantumStaticPolygonCollider2D are only drawn when the GameObject is selected.
- Added the automatic generation of QuantumAOT.cs (by the quantum.codegen.unity tool) which fixes issues when deserializing the DB under IL2CPP (check out the Asset Linking manual how to disable it).
- Added an optional QuantumRunner.StartGame signature (String, StartParameters) that uses StartParameters.PlayerCount and StartParameters.LocalPlayerCount to support multiple local players joining an online game.
- Added a virtual ApplyTransform() method to EntityPrefabRoot.cs so developers can override and apply their interpolation without modifying the original script.
- Added an info box in SimulationConfig inspector to warn about an active AutoLoadSceneFromMap toggle (when moving towards a custom way of starting the Quantum simulation this option can cause problems with reloading scenes that are tricky to debug).
- MapData is now saving references to the collider source scripts/GameObjects it used to bake Quantum colliders from. Associating source and baked data was only possible by changing the baking script.
- Changed the interpolation methods in EntityPrefabRoot.cs to use more verbose parameters and make EntityPrefabViewUpdater.cs follow this pattern: always use clock aliasing interpolation except during forced teleports, use error based interpolation only in online games.
- Changed internal methods in CustomEditorsHelper.cs to be public.
- Changed FPVector2.CalculatePolygonCentroid() so it will throw an ArgumentException instead of a DivideByZeroException when passing invalid polygons.
- Removed CommandSetup.cs from the upgrade packages.
RC1 (Oct 30, 2019)
- Fixed an issue with KCC 3D that would cause glitches in triangle transitions and when moving into walls.
- Fixed an issue with KCC 2D that would cause glitches when moving into walls.
- Fixed an issue in which KCC 2D collisions with Polygon and Circle shapes could be ignored.
- Fixed KCC default steering (Move method) to better handle horizontal movement on controlled slopes.
- Fixed an issue with clamping 2D dynamic objects to a non-uniform grid.
- Fixed an issue that returned an inverted normal on 2D shape overlapping box vs. circle.
- Fixed an issue that caused the experimental avoidance being applied while UseLegacyAvoidance is toggled on.
- Fixed an interpolation issue when running in lockstep mode.
- Fixed NavMesh baking and gizmo rendering when using QUANTUM_XY (toggle NavMeshDefinition.EnableQuantum_XY).
- Fixed the grid gizmo rendering for non-uniform grid sizes and QUANTUM_XY.
- Fixed the gizmo rendering of the QUANTUM_XY 2D circle collider height.
- Fixed an issue that could cause an exception when displaying the Frame Differ.
- Updating the demo menu scene by deactivating all panels and setting the default player count to 4.
- Added Dynamic Shape Config 3D class (and custom drawer) to simplify DynamicBody3D data-driven initialization (equivalent to the 2D version).
- Added surface normal to 3D Raycast/Linecast (when this option is not disabled).
- Changed the upgrade/quantum_unity.zip file to also contain Unity meta files.
Beta Status Disclaimer
B2 was expected to be the last Beta version before moving to RC (release candidate) status. However, we decided to add one new feature and one internal refactoring that would break the semantics of an RC version (meaning we should keep changes to a minimum, focusing on bug-fixes only).
For this reason, B3 is being released as a short-term beta as a preview to the RC version. We expect to give access to the RC version in a short time.
B3 (Beta) (Oct 22, 2019)
- Breaking Change: Removed unused data (Region) from the NavMeshVertex data structure. Please, re-bake all your maps.
- Added support for rectangular map sizes by replacing Gridsize with GridsizeX and GridsizeY. The original variable was kept to make sure serialized maps will load properly. Modifying X and Y directly overwrites the original single size.
- Added new Local game mode that does not incur in rollbacks (for testing purposes, the old behavior is now called LocalDebug).
- Added a public property to set Max Ticks Per Update in
Session
(replacing hard coded value of 180). - Added a public property to set the QuitBehaviour in
QuantumNetworkCommunicator
(was private). - Added a public property to set DeltaTimeType in
QuantumRunner
(was private). - Added an option to prevent Session.Update() being called in QuantumRunner (OverrideUpdateSession).
- Added an option to improve the NavMesh baking time (
Generating Triangle Center Grid
in particular): Select SpiralOut as theClosest Triangle Calculation
mode on the NavMesh inspector. As a consequence of using this option, starting and targeting position too far off the navmesh can result in No Path. - Added a debug option to draw the raw triangle path in QuantumEditorSettings (only the last call to pathfinder is shown here).
- Added CharacterController3D and 2D default config files (included in the upgrade package and will be placed at Resources/DB/Configs/)
- Fixed a DivisionByZero exception during Linecast2D when the segment length is 0.
- Fixed a desync caused by 2D and 3D physics island detection in conjunction with multi-threading.
- Fixed a desync caused by 3D physics sleep detection in conjunction with snapshots from the server.
- Fixed issue with Map in which the first baked 3D static collider would not be added to the broadphase.
- Fixed an issue that caused a non-optimal initial time synchronisation due to extensive file loading during the OnGameStarted callback.
- Fixed an issue that causes the PUN wizard to pop up during upgrading the Unity project from 2018 to 2019.
- Fixed the grid gizmo drawing when using different dimensions.
- Fixed an OutOfBounds exception in NavMeshPathFinder.FindPath() when the starting triangle is invalid.
- Fixed a DivisionByZero exception in NavMeshAgent.UpdateDesiredVelocity() when delta time is set to 0.
- Fixed an issue that generated slightly bend paths close to active NavMesh regions. This requires the agent to be using the
Best
path quality. - Fixed the “No path to funnel” error message.
- Fixed an issue where NavMeshPathFinder.PathSize was not reset when not finding a path.
- Fixed an issue where the Quantum NavMesh region script was not saving changes to the GameObject.
- Fixed issues that prevented the NavMesh baking to be executed properly during runtime.
- Fixed an issue there the NavMesh baker would throw an error when not using import from Unity.
- Fixed CharacterController2D/3D to prevent collide-with-self-entity from happening.
- Fixed an issue in which Exporting database would not copy all mesh binary files to target directory.
- Fixed issues with 2D and 3D Linecast/Raycast DDA implementations.
- Fixed a thread safety issue with 2D/3D overlap/cast when running simulation on server.
- Fixed an issue with accuracy of FPQuaternion.AngleAxis.
- Fixed an issue with 3D Raycast-Sphere in which spheres behind the line start could be added as a hit.
- Fixed an issue with collision counter on CharacterController2D/3D
- Fixed an issue in ray-edge collision checks.
- Fixed an issue with the new interpolator when instantiating new prefabs near the origin.
- Fixed an issue with different file ordering when loading DSL files in certain platforms would lead to inconsistent internal entity/component IDs (now sorting DSL files with localization prior to running the parser).
- Fixed an issue on the server plugin input replacements in which max-predict-distance would be observed in all situations.
- Fixed an issue in which server predicted inputs not correctly cloning data arrays could lead to desyncs on late joins.
- Improved Kinematic Character Controller 3D performance.
- Improved NavMeshAgent performance.
- Improved initial synchronized clock value to not be affected by scene loading, frame initialization and user callbacks.
- Improved broadphase initialization cell checks to reuse Manifolds from the pool, avoiding heap allocations.
- Improved internal handling of DeterministicConfig, now with Local and Global copies (devices can now run lockstep vs non-lockstep in same match).
- Removed the usage of Quantum.Log from map and navmesh baking scripts.
- Removed the spamming “Starting from tick” messages during snapshot reconnects.
B2 (Beta) (Aug 13, 2019)
- Breaking Change: Changed the signature of the OnInputConfirmed callback again to unwrap the Tuple parameters.
- Breaking Change: Changed the data structure of the navmesh again. Re-bake all your navmeshes.
- Breaking Change: Changed the data structure the 3D collider inside the map. Re-bake all your maps.
- Breaking Change: Added an option to enable the navmesh callbacks. This is off by default. If you use any of the callbacks toggle SimulationConfig.NavMeshAgent.EnabledCallbacks.
- Fixed an exception in EntityPrefabRoot.UpdateFromTransform() that could be thrown when the simulation is catching up and the last frame predicted is outside the rollback window.
- Fixed a compilation error in the QuantumSimplerReplaySave script on platforms other than Standalone, Android and iOS.
- Fixed an edge case where the Navmesh agent would trigger a re-path when setting a target outside the grid every frame.
- Fixed an issue in Navmesg.FindClosestTriangle where in certain cases and adjacent triangle would be returned instead of the right one when point is inside navmesh.
- Fixed duplicated points inside the funneled NavMeshAgent.Path.
- Fixed map grid rendering for the QUANTUM_XY setting.
- Fixed an issue with ErrorCorrectionRateMin and ErrorCorrectionRateMax values on EntityPrefabRoot being off by a factor of ten.
- Fixed an issue with duplicate settings for some error correction parameters on the EntityPrefabRoot script.
- Fixed an issue with null ref being thrown inside EntitPrefabViewUpdater if unity GameObject was destroyed before the entity.
- Fixed allocation inside EntityPrefabViewUpdater when iterating over active prefabs.
- Fixed an issue with FPVector3.ToString() method that returned incorrect values shown in Visual Studio editor during debugging for example.
- Fixed an issue that recreated the PhotonServerSettings file during an upgrade from Unity 2018 to 2019 when the Library folder was deleted.
- Fixed an issue when detecting intersection between circle and segment (LineIntersectsCircleManifold)
- Fixed an issue where the EntityPrefabViewUpdater was instantiating a prefab at a truncated 3D position (noticeable on trail renderers).
- Fixed an issue where static collision callbacks with triangles and 2D edges could be duplicated in one tick (against the same static).
- Fixed an issue where the DB can cause a checksum error for different system locale.
- Added an option to enable multithreading for NavMesh agent steering, avoidance and pathfinding (SimulationConfig.NavMeshAgent.IsMultithreaded). Be careful when using this with navigation callbacks as only the local entity can be modified during the callback.
- Added an option to toggle the grid rendering: MapData.DrawGridMode and change its color: QuantumEditorSettings.GridColor.
- Added DrawGizmoVector()/Diamond() methods to GizmoUtils.
- Added AngleBetween() method to FPMath to simplify computing the angle delta between two unwrapped angles.
- Added ‘ErrorPositionMinCorrection’ value to EntityPrefabRoot to allow controlling the smallest error correction that can be applied.
- Added navmesh region normals that will result in nicer paths around deactivated regions.
- Added an option to keep the agent inside the navmesh using non-physics based experimental avoidance:
ClampAgentToNavmesh
. - Changed agent priority of experiential avoidance to work identically to the original avoidance: greater value = higher priority.
- Added Nintendo Switch CustomAuthenticationType enum value.
- Updated the StaticPolygonCollider2D editor to make deleting and creating vertices zoomed out possible. Use
shift
andcontrol
to display the buttons. - Added the 2D version of the Kinematic Character Controller (CharacterController2D) component, including pre-build steering and jumping, or optional raw callbacks.
- Added a helper that deletes nested assets to the Unity AssetDatabaseExtensions scripts (DeleteAllNestedAssets).
- Added canceled/confirmed callbacks to non-synced events (into QuantumGame.Callbacks).
- Improved 3D math performance by inlining FPQuaternion.
- Named the Photon server plugin “QuantumPlugin”. Add this to RoomOptions.Plugins when connecting via PUN. This will give better feedback when trying to connect to an AppId without activated plugin.
- Removing allocations in QuantumGame.PlayerIsLocal() by writing out the Linq function.
B1 (Beta) (July 17, 2019)
- Fixed compilation errors in the quantum.systems project when compiling with higher .Net versions. #83
ECS internals:
- Changed internal entity management meta-data to a double linked list. Now entity Create/Destroy are guaranteed optimal O(1) asymptotic performance, while iterators (including filters) are guaranteed optimal O(n) asymptotic performance (where n is the number of active matching entities).
Physics:
- Added friction and bounciness combine functions to physics material asset (legacy, max, min, average and multiply). #91
- Added option to Map to export 2D static polygon colliders as individual edges (better collision performance). #75
- Added relative point to AddForce and a new AddTorque method to DynamicBody3D.
- Added Unity Terrain exporter to 3D Physics. #75
- Added StaticMeshCollider3D for static meshes to be exported to Map; #75
- Added a Kinematic Character Controller (KCC) component, including pre-build steering and jumping, or optional raw callbacks.
- Added [Serializable] attribute to Transform2D and Transform3D components.
- Added static collider getters to Map.cs.
- Added FirstHitOnly to DynamicScene3D.LinecastOptions (this optimizes long raycasts/linecasts when only the first hit is needed).
- Fixed an issue with inverted normals on type-safe collision callbacks due to C# lambdas used on reciprocal narrow phase check functions. # 87
- Fixed an issue with DynamicHits/DynamicHits3D.Sort() method that was allocating data on heap (replaced Array.Sort with a custom quicksort).
Navmesh:
- Fixed a bug that could lead to strange waypoints due to vertex normals not being generated correctly.
- Fixed a bug that could lead to bad paths due to borders generated in wrong places when using Unity navmesh import.
- Fixed an issue with loading the binary navmesh file with an empty DB AssetPath on Standalone
- Optimized the navmesh import and baking performance.
- Added dynamically toggleable navmesh regions.
- Added a funneling step after finding a path to improve the visual path quality (see NavmeshAgentConfig.PathQuality).
- Added a LineOfSight method that generates the closest hit position (towards p0).
- Added another FindClosestTriangle method that searches surrounding grid cells for a closest position on the navmesh.
- Added run-time debug rendering of the Quantum navmesh (see QuantumEditorSettings.DrawNavMesh).
- Added a callback when the agent cannot find a path (see INavMeshCallbacks.OnSeachFailed). The agent gets automatically deactivated when this happens.
- The navmesh definition GameObject translation will now affect the baking of the navmesh triangle positions and the rendering gizmo.
Navmesh Agent:
- Removed UpdateInterval from NavMeshSteeringData, instead get the value from Frame.SimulationConfig.NavMeshAgent.UpdateInterval.
- Fixed a bug that could lead to overshooting the angular rotation when agent avoidance was kicking in causing the agents looking direction to jitter.
- Fixed a bug that could make the agent go faster than its max speed for one frame.
- Improved the generation of the fallback triangle cell lookup.
- Fixed the math how agents avoidance force is applied: now added to the desired velocity of the agents and also influences its speed.
- Added NavMeshAgent.InternalTarget which is the corrected Target position (to prevent triggering a repath when setting the same target every tick when the target is corrected).
- Added an optional border check when validating agent targets outside the navmesh which is more accurate than the default validation: NavMeshAgentConfig.FindValidTargetCellRange. Range 1 will evaluate all cells surrounding the origin position for example.
- Exposed agent repath timeout value. Repathing is forced between waypoints in this interval: NavMeshAgentConfig.MaxRepathTimeout (seconds).
- Added the option to disable breaking on waypoints (NavMeshAgentConfig.BreakingOnWaypoint).
- Added an experimental new agent avoidance system which requires more computations but yields much better visual results (toggle off SimulationConfig.UseLegacyAvoidance to test). The agent priority is flipped for this setting and works similar to Unitys priority (lower value -> higher priority).
- Added a public getter for Waypoints.
- Added NavMeshAgent.Init(config) method. Use this when creating the agent instead of just assigning the config.
- Added AgentConfig parameter LineOfSightWaypointRange to enable LineOfSight checks when getting close to a waypoint. This helps in some cases if many agents tend to clutter around waypoints.
Unity:
- Fixed rendering of physics layers on the SimulationConfig inspector for Unity 2018.3+
- Fixed the radius of DebugDraw Circle and Sphere gizmo rendering (was always drawing half the size).
- Added a new error-based interpolator to EntityPrefabRoot. #98
- Added two ways to disable the Quantum AssetBaseEditor (to enable custom or third-party editor code): QuantumEditorSettings.Instance.UseQuantumAssetInspector (soft), scripting define DISABLE_QUANTUM_ASSET_INSPECTOR (hard)
- Added a data-driven quit behaviour to QuantumNetworkCommunicator.cs: decide between LeaveRoom (default), LeaveRoomAndBecomeInactive and Disconnect.
- Added a data-driven way to chose the client id when starting the game from the demo menus, instead of creating a new GUID every time (Qauntum.Examples.ClientIdProvider). Using the same id will result in getting the same Quantum player slot after reconnecting to a running session.
- Added another version number to Quantum SDK version showing the build number: 1.2.4.X
- Added import physics layers from 2D or 3D options to the SimulationConfig inspector. #84
- Added a Unity Editor menu entry to open the Quantum simulation (Assets/Open Quantum Project), change the sln-path in QuantumEditorSettings.QuantumProjectPath.
- Changed the usages of Photon.LeaveRoom() in the demo menus to always pass “false”, indicating to leave the room immediately, instead of becoming inactive.
Asset Generation:
- Fixed the menu order of generated asset scripts to be alphabetically on three layers Assets->Physics->NavMeshAgent for example. When adding a custom one you can use this
order = (X * 26 * 26) + (Y * 26) + (Z))
where XYZ are Quantum/Assets/Physics/NavMesh Agent Config alphabet positions (A = 0). - Added an option to override the asset name shown in the Unity Editor create asset menu: [AssetObjectConfig(CustomCreateAssetMenuName=””)]
- Added an option to override the asset menu order in the Unity Editor create asset menu: [AssetObjectConfig(CustomCreateAssetMenuOrder=66)]
- Added an option to override the asset script generation destination folder by creating an app config file in the
tools\codegen_unity
folder (see Asset Linking manual).
1.2.3
Breaking Changes:
The way quantum emits array of primitive types defined in the DSL has changed.
It now emits a fixed size buffer public fixed Int32 IntegerDataProperty[8]; instead of the previous field list and array accessor method.
Added an option to enable and disable the 2D verticality feature completely: SimulationConfig.UseVerticalTransform. Default is false. #34
Changed the signature of custom steering callback data object to supply more information about the current state of the agent: replaced normalized Direction by Waypoint,
added FP braking factor (based on turn angle for waypoint), added Boolean IsTarget (in case waypoint is agent target position).
F3 (Stable) (Aug 08, 2019)
- Added optimized input encoding/decoding to improve server plugin scalability.
- Added commit hash and version number/suffix to pre-build DLL descriptions.
- Fixed an issue where the DB can cause a checksum error for different system locale.
F2 (Stable) (Jun 04, 2019)
- Fixed an issue with the ComponentTypes enum when more than 32 component types were defined.
F1 (Stable) (Apr 13, 2019)
- Fixed an exception in Unity Editor 2018.3 (AdvancedDropdown) while clicking the AddComponent button.
- Fixed the rendering of prediction culling debug gizmos when QUANTUM_XY is used.
- Fixed an issue with constant resolution for #pragma constants_class_name.
- Added region code "hk" (Hong Kong) to the CloudRegionCode enum.
RC3 (Apr 02, 2019)
- Added lock protection around loading of statics (Layers, DB, LUT) to guarantee thread-safety when running simulation on server.
- Added thread-safe object pools to standalone instances of NavMeshPathFinder.
- Added new plugin callbacks for client input received (OnDeterministicInputReceived) and when generating input for non connected players (OnDeterministicServerInput).
- Changed physics engine integration to update position and rotation changes before applying drag to velocity.
- Fixed FPAnimationCurve to work with tangent mode in Unity 2018.1 and newer. The editor will convert deprecated Keyframe.TangetMode is it was used at all.
- Fixed issue on custom plugin sample where server simulation could lag behind clients (added adaptive delta time to the server session update).
- Fixed an issue with custom plugin sample that could break DB deserialization when multiple plugin versions were loaded on the same photon enterprise cluster (added custom type binder settings to JSON serialization).
- Fixed issue which would not allow a custom plugin to inject PlayerData for a non-connected player (can be done now).
- Fixed issue with local client input predictor that could cause desyncs under severe network conditions.
- Fixed issue with local client input predictor that would cause the Commands flag to be set on subsequent frames after a successful command was received.
- Fixed an issue in EntityPrefabViewUpdater that prevented the clock fix interpolation to be applied for 3D transforms.
RC2 (Feb 06, 2019)
Major Features:
Replaced the _active boolean on entities with a _flags field instead, currently available flags are: Active, DestroyPending and Culled.
The ‘IsActive’ property has been deprecated and marked as obsolete but retains its old behavior. You should instead use the new ‘Flags’ property to query the flags of an entity.
When an entity is scheduled for destruction at the end of frame via a call to DestroyEntity() or DestroyEntityType() the DestroyPending flag will be set.
The GetAllEntityType() and GetAllComponentType() methods will by default not return entities scheduled for destruction anymore.
If your code depends on the old behavior of returning all entities you can set ‘#pragma legacy_entity_active_semantics 1’ in the DSL.
Implemented a prediction culling system for when quantum is running in ‘Expose Verified Status In Simulation’ mode.
Prediction culling has to be explicitly enabled in the simulation config by toggling the Use Prediction Area
setting on.
Prediction culling allows you to not run the prediction simulation for entities or parts of the simulation which are not inside an area that’s needed to provide
an accurate visual representation of the game for the local client.
- Added a getter for EntityRef.Index.
- Added an option to use unscaled delta time when updating the simulation and renamed SimulationConfig.UseEngineDeltaTime to SimulationUpdateTime
- Added the [Flags] attribute to physics enumerations OverlapOptions and LinecastOptions.
- Added the FP version of ClosestPointOnTriangle (in FPCollision).
- Added the system callback ISignalOnNavMeshUpdateAvoidance to overwrite Quantum internal avoidance system.
- Added checks to session startup to make sure that you don’t create a quantum game with more player slots than configured in the DSL.
- Added mapping between Quantum player index and Photon actor id via the methods PlayerToActorId, ActorIdToFirstPlayer, ActorIdToAllPlayers on Frame.
- Added proper exception logging to plugin.
- Added Serialize() overloads for FP, FPVector2, FPVector3 and FPQuaternion to BitStream.
- Added prediction culling system when ‘Expose Verified Status In Simulation’ is enabled.
- Removed the _active boolean on Entity and replaced it with a _flags field instead.
- Added implicit cast operators from String and AssetObject to AssetLink.
- Fixed an issue in PUN 1.93 that caused the RTT values to not be set when running against a local server.
- Fixed an issue that caused a hiccup on late joining players during a buddy snaphost reconnect by adding the InitialTick parameter to the Join method.
- Fixed an issue that caused an exception in the Quantum state inspector.
- Fixed an issue in the NavMesh steering callback that could lead to stale data on the parameter object.
- Fixed an Unity 2018.1.* API compatibility issue (PrefabUtility.GetCorrespondingObjectFromSource).
- Fixed issue with code generation for bitsets with a size of less than 32.
- Fixed issue with constant resolution in #pragma definitions.
- Fixed issue in input deserialization on null or zero length predicted inputs which could cause more rollbacks than necessary.
- Fixed issue in plugin where the player slots count would be locked to the photon room size instead of pulling the value from the quantum configuration.
- Fixed an issue when quantum was running in local mode which would cause one input skips when calling SendPlayerData or SendCommand.
- Fixed an issue with Command serialization which would cause all commands to serialize all values to their defaults.
- Fixed an issue where EntityTypeSelector would throw exception on an invalid entity type string.
- Fixed an issue in the AutoMap scene that failed to start the game when only one MapAsset is found.
RC1 (Jan 24, 2019)
- Upgraded PUN to version to 1.93 (this is required to support the raised size limits for RuntimePlayer and the new Deterministic Commands API). This version of PUN also adds official support for Unity 2018.3.
- Added DeterministicCommands API for easier communication from Unity into the Quantum simulation, see the online documentation for more details.
- Improved the serialization used for sending inputs from server to client making it much more bandwidth efficient.
- Input serializer now uses the same bit packing serialization as the game state serializer.
- Added #pragma auto_input_serializer 0 (DSL) which allows you to override the default input serializer by declaring a partial method called UserSerialize in the Input struct.
- Added the option of enabling fixed size input, this stops quantum from writing the size of the input data to the byte stream when sending input from server to client (DeterministicInput.FixedSizeInput).
- Added DeterministicSession.Resync to enable session recovery from a DeterministicFrame snapshot (requires the use of DeterministicSession.PrepareForResync to be called before the custom snapshot data is request).
- Added the system callback ISignalOnNavMeshUpdateSteering to overwrite the Quantum internal navmesh agent steering. See the "Navigation System" online documentation for more details. #60
- Added an option to use Unity.deltaTime to update the simulation (SimulationConfig.UseEngineDeltaTime). Activating this will make the simulation not catch up after pausing the Editor for example and it also can smooth out any view movement/animation you are drivin from the simulation callbacks.
- Changed the OnUpdateView callback invocation so it is guaranteed to be called every rendered frame. Under some circumstances it was omitted which could lead to stutters in the view rendering (see line above).
- Added inlining attribute to Quantum math function (only takes effect when the simulation runs in .Net, e.g. via the console-runner).
- Added an animation speed variable to the Quantum animator component to control the playback speed during run-time. Default speed is 1. #63
- Added the generation of a GetHashCode() method for the Input struct. #33
- Added a session getter to IDeterministicGame interface.
- Added shape overlap functionality to DynamicScene3D. #59
- Added normal vector computation to 2D OverlapShape() method. Opt out to save computation time by adding Core.DynamicScene.OverlapOptions.SkipNormal. #32
- Added "immediate" parameter to Quantum.Runner.ShutdownAll() to delay the actual destruction of the session until Session.Update() has finished, which fixes errors that occur when calling this from a Quantum event for example. #42
- Added a virtual Reset() method to the AssetBase class and generate Reset() code to automatically set a valid guid when creating new assets. #45
- Added a visual improvement to the AssetBaseEditor (Quantum Asset Inspector) to make Quantum asset data clearly distinguishable from Unity data on Quantum assets.
- Added a plus button to the AssetLinkDrawer when no asset is linked that creates a new asset file of the linked type in the DB root folder. #46
- Added an optional invoke order to the MapBake-callbacks: [MapDataBakerCallback(100)]. #44
- Added a new Unity scene (MenuAuto.unity) that utilizes the PUN utility script ConnectAndJoinRandom to automatically create, join a room and start the Quantum game. Caveat: sometimes simultanously started apps do not connect to the same room due to a known race-condition.
- Added focus on selected vertices function to the manual NavMesh editing tool (pressing F key).
- Added the NavMesh manual editing tool feature "Duplicate And Flip" to the undo stack.
- Added visual improvements to the NavMesh editor: drawing edges when "Toggle Draw Mesh" is active, added a progress bar to "Import From Unity".
- Added a toggle to the MapNavMeshDefinition script that optimizes the gizmo rendering performance (does not work when editing the NavMesh manually).
- When starting the simulation on a client from your own snapshot and sending InitialTick with the Join message, the server only sends you relevant inputs back.
- Fixed an issue with the internal job system that degraded performance on Android devices when using the physics multi-threading option. #36
- Fixed an issue when running the simulation on the server where shared broadphase data in the physics engine was causing interference between game instances. Broadphase data is now stored on the FrameContext.
- Fixed an issue that could cause errors on the client when the Join message is delayed or other messages are send during the Quantum game start routine.
- Fixed an issue that could corrupt the FPAnimationCurve drawer data when having multiple curve objects on one asset.
- Fixed the performance of map grid gizmo rendering.
- Fixed the "asset missing" label visibility that is shown on-top of AssetLinks in the Unity Inspector.
- Fixed issues with the Quantum Animator when using a 1D blend tree that imported false weights and could cause an divide-by-zero exception. #65
- Fixed an issue that would send non-optimal clock adjusting for late joins.
- Fixed an issue that reconnecting players did not get the same player id when using the same clientId during QuantumRunner.StartGame().
- Fixed an issue in the plugin that caused unnecessary input cancellations after snapshot-based reconnects.
1.2.2
Breaking Changes:
SimulationConfig, DefaultPhysicsMaterial and DefaultNavMeshAgentConfig are now part of the DB and can be attached to the RuntimeConfig.
Removed SimulationConfig parameter from QuantumRunner.StartParameters and from UnityDB.Init()
Removed obsolete properties from QuantumGame and moved the class outside of Unity to the quantum.systems project.
(If applicable) The QUANTUM_FLIP_EVENT_ORDER define needs to be added to the quantum.systems project.
See upgrade_instructions.txt and migration_notes.md for more details.
Known Issues:
Enabling multi-threading for physics might degrade performance on some Android devices.
We advise to not use this setting on mobile platforms until we release the revised internal job system.
Stable (Jan 15, 2019)
- Fixed an issue with 3D Linecast() not returning collision results with boxes.
- Fixed an issue that caused FPAnimationCurve.Evalute() to always return 0 when using Unity 2018.3 and IL2CPP.
RC3 (Dec 20, 2018)
- Fixed an issue with the new input predictor from RC1 that could cause input desyncs.
- Fixed an issue in the server plugin that assigned a new player slot when reconnecting with the same client id.
- Fixed an issue in the server plugin that resulted in errors on the client during the session start routine when the join message is delayed.
- Fixed an issue where NavMesh.FindClosestTriangle() would always returns false when querying a valid navmesh position.
- Fixed an issue the could cause a null-reference exception in the collision code when destroying entities during a shape overlap test. #47
- Fixed an issue that could spam a warning log in AnimatorTransition and cause performance issues in the Editor.
- Fixed a compilation issue when using .Net 4.6 scripting runtime (Tuple).
- Fixed performance issues when editing larger NavMeshes in Unity by speeing up the gizmo drawing (Toggle Optimized Gizmos to acticate) and the Validate Navmesh calculations. #51
- Changed the NavMesh gizmo drawing so it draws the outline too when the DrawMesh option is selected.
RC2 (Nov 22, 2018)
- Fixed an issue where 2D raycasts were not returning hits when used in conjunction with 2D dynamic body verticality.
- Fixed an issue that could cause a crash when navmesh vertex count is greater than 4K.
- Fixed an issue where Quantum debug drawing did not render gizmos.
- Fixed an ArgumentException in the AssetLinkDrawer when an asset is missing while the guid is valid.
- Fixed an issue in EntityPrefabViewUpdater where entities are not created/updated when starting the game from a snapshot at not using AutoLoadSceneFromMap.
- Fixed an issue that caused NavMesh agents to rotate incorrectly when using a high angular velocity.
- Fixed an issue that could cause an exception when a QuantumCallbacks derived game object is disabled during the callbacks.
RC1 (Nov 05, 2018)
- Added multi-threaded optimization to 2D and 3D Physics (see upgrade/features_1.2.2 for more information).
- Added resting (sleeping) body detection to 2D and 3D Physics. Optionally via island detection (seeupgrade/features_1.2.2 for more information).
- Added physics solver parameters to SimulationConfig (Penetration Allowance, Penetration Correction, Min Linear Integration).
- Added tangent impulse calculation (friction) to 2D physics even when UseAngularVelocity is set to false.
- Added scripts that implements turnkey "Instant Replays", "Killcam"-like game features.
- Added a new event action/callback that optionally passes the IDeterministicGame instance together with the event data (EventName.OnRaisedFromGame).
- Added a data structure and tooling for an one-dimensional deterministic animation curve (FPCurve).
- Added platform independent checksums.
- Added an option for replays to export a frame checksum list that can be verified during a re-run inside Unity or the console runner.
- Added Transform3D support to the EntityPrefabViewUpdater.
- Added correct Disposing of the DB.
- Added CreateBehaviour property to EntityPrefabRoot (Non-Verified, Verified) specifying from which frame the prefab instance life cycle is controlled.
- Added console.runner project to the quantum_code solution.
- Added running replay in a loop for the console.runner.
- Added optional checksum verification to the console.runner.
- Added configurable collider gizmo colors to the QuantumEditorSettings.
- Added new public FP constants EN1, EN2, ..
- Added Dispose() methods to DB, UnityDB and AssetBase classes.
- Added replacements for FPVector3.AsFPVector2 in form of XY(), XZ() and YZ().
- Added replacements for FPVector2.AsFPVector3 in form of XOY(), XYO() and OXY().
- Changed the 2D physics solver (reduced the jitter on 2D physics objects in some situations).
- Changed gravity parameter on SimulationConfig to be represented as an FPVector3.
- Changed the scaling of the menu scene to be more visible on mobile devices.
- Changed NavMeshAgent behaviour to ignore acceleration when set to 0.
- Changed NavMeshAgent behaviour to ignore angular speed when set to0.
- Changed the input and replay recording API to be part of the QuantumGame class.
- Changed and marked QuantumInputRecorderStarter obsolete.
- Fixed an issue where the desync callbacks were not being called on checksum errors.
- Fixed an issue with QuantumNetworkCommunicator that could lead to unnecessary input replacements.
- Fixed an issue where SimulationConfig.Instance-getter would yield a broken asset after starting a second session.
- Fixed an issue in the EntityPrefabViewUpdater that destroys objects during rollbacks by iterating over the verified frame for creating/destroying prefabs.
- Fixed an issue the PlayerNotPresent flag was not used on client disconnects.
- Fixed an issue with recording incomplete inputs (from other players) in the end of replay which could provoke a NullRefException.
- Fixed the issue that the FP.Epsilon constant was not being initialized correctly.
- Fixed an issue with the AssetBaseEditor that hid fields on partial asset classes.
- Fixed an issue with the SimulationConfigEditor that failed to display the LayerMatrix for newer Unity versions.
- Fixed an issue that could cause the lockstep simulation to never stop stalling.
- Fixed an issue with snapshop-based late joins that caused the client to go though more input then necessary.
- Fixed an issue that caused NullReferenceExceptions when the NavMesh border count was > 2048 (supporting 16K now).
- Fixed an issue with too small buffer sizes when s huge state is send during a snaphost reconnect.
- Fixed an issue with the input prediction when could yield non optimal result during rollbacks (especially for Buttons).
- Removed quantum_code/quantum.systems/Systems/Core/PhysicsSystemPost.cs
- Removed quantum_unity/Assets/Quantum/QuantumGame.cs
- Removed quantum_unity/Assets/Quantum/QuantumGame.EventDispatcher.cs
- Removed quantum_unity/Assets/Quantum/Replay/QuantumInputRecorder.cs
- Removed quantum_unity/Assets/Quantum/Replay/ReplayTools.cs
- Removed quantum_code/quantum.systems/Replay/ReplayDeterministicGame.cs
- Removed quantum_code/quantum.systems/Replay/ReplayDeterministicGame.EventDispatcher.cs
1.2.1
Breaking Change:
Quantum navmeshes baked before 1.2.1 are not compatible and need to be re-baked.
DSL: Generated entity fields under the fields tag are now nested inside an struct called Fields.
In some scenarios access to these fields needs to be changed. See migration_notes.txt for more details.
- Removed RttBias, SoftTolerance and InputDelay from DeterminsticSessionConfig.
- Added the following settings to DeterministicSessionConfig to control local player input offset calculation: Input Offset Min, Input Offset Max, Input Offset Ping Start.
- Added support for enum base types to .qtn files.
- Added replays (see upgrade/replay_notes.md for more information)
- Added custom serialization to all code generated classes to prepare optional snapshot-based reconnects.
- Added support for converting Unity navmeshes into a Quantum navmesh including tools to handle workflow with NavMeshSurfaces.
- Added the undo feature to the Quantum navmesh editor.
- Added a CustomEditor for all Quantum Assets (derived from AssetBase) to omit the Settings variable foldout.
- Added a CustomEditor for the SimulationConfig and integrated the physics layers into it.
- Added an additional callback to the map baking process that is called before in order to be able to chain navmesh generation into the workflow (MapDataBakerCallback.OnBeforeBake).
- Added a shortcut to execute refreshing the database (Ctrl+Shift+D).
- Added an alphabetic order value to the CreateAssetMenu attributes of the generated Unity asset scripts.
- Added a tool for editing 2D polygon colliders.
- Added normal generation to DynamicScene.Raycast() method for circle, box and polgon intersections.
- Added entity Quantum state inspection by creating a custom inspector for EntityPrefabRoot.
- Added a new ScritableObject that makes the Quantum DB path customizable (QuantumEditorSettings).
- Protocol compatibility is now checked via the assembly attribute DeterministicProtocolVersion of the used PhotonDeterministic.dll.
- Fixed an issue that caused unexpected game play behaviour when creating entites with phyics during collision callbacks. All callbacks and triggers are now deferred and called after the complete manifold generation is complete.
- Fixed an issue in the navmesh baking process that could cause border edges to me missing.
- Fixed an issue in the navmesh baking process that could result in a non optimal grid-triangle lookup table.
- Fixed API methods Map.CalculateNodeGridXZ(), Map.CalculateNodeGridIndex() and NavMesh.FindClosestTriangle() to return and use correct grid indecies.
- Fixed an issue that caused a NullReferenceException in the map class caused by an uninitialized StaticColliders3D array.
- Fixed an issue where 3D static colliders could overwrite each other during initialization.
- Fixed an issue with 3D raycast checks against boxes where hits were not generated.
- Fixed an issue with 3D raycast checks against spheres where contact points were calculated wrongly.
- Fixed an issue where the Agent code could throw an assertion when no path could be found.
- Fixed an issue where the Unity code generation tool would crash when a dependency could not be resolved.
- Fixed an issue where the number of local players joining a debug game was hard-coded to one.
- Fixed an issue that could cause a desync of physics object during rollbacks.
- Fixed an issue that would make frame dumps not respect CultureInfo.InvariantCulture.
- Fixed an issue with the PhysicsMaterial that although the freeze rotation feature was activated some rotation data was leaking into the AngularVelocity.
- Fixed Unity warnings originating from Quantum code.
- Fixed an issue with the pathfinder and navmesh agent code (seee Frame.NavMeshAgent.Waypoint3) that made the simulation drift after rollbacks or just caused the checksum to desync.
- Fixed the Room Wait Time parameter on DeterministicSessionConfig. It's actually used now, if you experience a high delay when entering the game, tune this down to 1.
- Fixed an issue with OOBB collision detection where some collisions where ignored.
1.2.0
Breaking Change:
The online session startup procedure changed. Now there's no need to set RuntimePlayer object in advance (RuntimeConfig doesn't have a Players array anymore).
RuntimePlayer instances for the local players may now be set assynchronously at runtime as long as there's a deterministic session running.
See migration_notes.txt on the upgrade folder for more details.
Important: The network protocol of 1.2.0 is incompatible with previous versions. This means
you have to update your backend plugin after you've upgraded to client SDK 1.2.0.
- Added new static function QuantumGame.SetPlayerData(Int32 playerIndex, RuntimePlayer data) to inject custom player data assynchronously during session runtime.
- Added new signal ISignalOnPlayerDataSet to receive custom data from RuntimePlayer object.
- Added [2.5D physics] vertical properties (height and vertical offset) to the scripts for 2D physics static colliders and debug gizmos.
- Added [2.5D physics] new overloads to Raycast/Linecast/OverlapShape with height and/or vertical offset parameters.
- Added prefab instance highlighting to the Fixed Point custom drawer.
- Added [Experimental] basic 3D physics (Transform3D and DynamicBody3D Components, raycasting static tooling for 3D sphere and box colliders and gizmos). Warning: not optimized code, so performance should not be expected.
- Added runtime version checking between client SDK and photon server plugin when creating/joining a session.
- Improved memory use for static broadphase data (physics 2D, physics 3D and navmesh agents).
- Fixed an issue where dynamic box or polygon collision could cause a desync because of stale runtime data during predict/rollbacks.
- Fixed an issue in the polygon-polygon collision code that could result in faulty penetration calculation.
- Fixed an issue with OverlapShape throwing an exception when used with a polygon collider.
- Fixed 2D physics gizmos rotation when using QUANTUM_XY on Unity.
- Fixed an issue that made the Asset Types generation fail when the target directory is missing.
- Fixed an issue when removing a data asset class would cause the Unity project to not compile and not be able to re-generate asset scripts (this step is now done by a new executable tool which is run from outside Unity when quantum.systems is compiled)
1.1.8 hotfix
- Added the option to flip the event invoke order, define QUANTUM_FLIP_EVENT_ORDER in the unity Script Define Symbols and the events will be invoked in the order they are raised.
- Fixed an issue with events raised in OnInit and OnEnable during startup were not invoked.
- Fixed an issue in background thread mode where you could sometimes miss event callbacks and verified frames if the game was running too slow.
- Fixed an issue where dynamic box or polygon collision could cause a desync because of stale runtime data during predict/rollbacks.
- Fixed an issue in the polygon-polygon collision code that could result in faulty penetration calculation.
1.1.8
Breaking Change
The Quantum.EntityTypes enum is now 1-indexed instead of 0-indexed, this is done so that
default(EntityRef) does not resolve to a valid entity. Most likely this will not affect anyone
but if you had a Quantum.EntityTypes enum field on a MonoBehaviour or other asset serialized in
Unity it will no longer have the correct value.
- Lowered memory usage of physics engine and navmesh.
- Improved error message when adding an asset with duplicate guids during runtime.
- Improved accuracy of initial clock synchronization during game startup.
- NavMeshAgent avoidance now influences agent rotation.
- Type specific EntityRef's now throw a System.InvalidCastException instead of System.Exception upon casting error.
- DynamicCollisionInfo and StaticCollisionInfo now exposes a property called 'IgnoreCollision' which if set to true in a collision callback will cause the collision to be ignored during impulse resolution.
- Added 'asset import <SubClassAsset>' syntax for importing non root-assets into the DSL.
- Added NavMeshAgent debug draw configuration option.
- Fixed an issue in the code generator where an asset_ref<T> that was only used inside an array would not get generated.
- Fixed an issue with the IL patcher where it would not be possible to debug-step into the quantum.state dll.
- Fixed an issue where casting default(EntityRef) to an type-specific entity ref would throw an exception.
- Fixed an issue inside of the code generator relating to the type safe collision signals that would lead to a compile error.
1.1.7
Important: The network protocol of 1.1.7 is incompatible with previous versions. This means
you have to update your backend plugin after you've upgraded to 1.1.7.
- Added built in NavMeshAgent component.
- Added support for statically typed collision signals for entities.
- Added support for time dilation in the client to slow down time if one of the clients cant keep up (off by default).
- Added Transform2DVertical component (extrusion-based 3D collision checks for the 2D physics engine - bodies may have height and vertical position - collisions are solved in 2D space);
- Implement IEnumerable<T> to DynamicHits and Buffer<T> classes to allow iteration using linq/foreach.
- Fixed a bug with iOS builds where the memcpy reference for Nintendo Switch would be included causing build errors.
1.1.6
Important: You must have upgraded your project and server plugin to 1.1.4 before applying the 1.1.6 upgrade.
New Platform:
Quantum now supports Nintendo Switch.
Breaking Change:
GridSize and GridNodeSize on the map asset have both been restricted with the following checks:
Has to be an even number
Has to be greater than or equal to 2
Removed all calls to Quantum.Profiler from internal code.
Added DB.AddAsset(Frame f, AssetObject asset) to allow adding assets to the database during runtime.
Added OverlapShape which allows you to perform overlaps using an arbitrary physics shape.
Added Frame.EntityExists method to check if an EntityRef is valid
Added Frame.<EntityType>Exists methods to check if an <EntityType>EntityRef is valid.
Added NullableFPVector2 and NullableFPVector3.
Added FPVector2.MoveTowards and FPVector3.MoveTowards
Added EntityRef.None field to ease clearing out entity refs.
Added <EntityType>EntityRef.None field to ease clearing out entity refs for a specific entity type.
Added EntityPrefabRoot.EntityRef field to make it easier to access an entity from an instantiated prefab.
Added #pragma warning disable for the empty switch warning in the generated code.
Nullable FP, FPVector2 and FPVector3 are now usable from the DSL by default. Use FP?, FPVector2? and FPVector3?.
EntityRef now implements == and != operators.
<EntityType>EntityRef now implements == and != operators.
<EntityType>EntityRef now overrides Equals(Object obj).
<EntityType>EntityRef now implements the IEquatable<T> interface.
Fixed issue with lexer not parsing negative numbers correctly.
Fixed issue in FPVector3.Lerp where it would pass clamp arguments in the wrong order.
Fixed issue with 64bit iOS 11.0+ builds.
1.1.5
Important:
You must have upgraded your project and server plugin to 1.1.4 before applying the 1.1.5 upgrade.
Breaking Change:
The collision signal API has been reworked, we now provide four signal interfaces:
ISignalOnCollisionDynamic
ISignalOnCollisionStatic
ISignalOnTriggerDynamic
ISignalOnTriggerStatic
Any code that previously used the ISignalOnCollision interface needs to be updated to
use either ISignalOnCollisionDynamic or ISignalOnCollisionStatic instead.
Breaking Change:
StaticTriggerData struct has been renamed to StaticColliderData.
Breaking Change:
In the inspector for the quantum static colliders in Unity the field named 'Trigger Asset' has been renamed to
just 'Asset' as it's now available for non-trigger collisions with static colliders also.
Breaking Change:
Trigger callbacks are now invoked for these cases also:
- Static Collider <> Kinematic Trigger
- Kinematic Collider <> Static Trigger
- Kinematic Collider <> Kinematic Trigger
- Added ability to define constants in .qtn files with the '#define <name> <value>' syntax. Currently only integer constants are supported.
- Added StaticColliderData to DynamicHit struct to provide access to information about the static collider you hit with a raycast or overlap.
- Added StaticColliderData.ColliderId so each static collider can be uniquely identified during runtime.
- Added StaticColliderData.IsTrigger to allow for checking if a static collider is a trigger or not in a trigger callback.
- Added OnEntityCreated and EntityDestroy signal which are invoked whenever an entity is created or destroyed.
- Added On<EntityType>Created and On<EntityType>Destroy signal which are invoked whenever an entity of <EntityType> is created or destroyed.
- Added setting 'Expose Verified Status In Simulation' which allows you to query the Frame.IsVerified and Frame.IsPredicted state inside the simulation.
- Deprecated DynamicHit.entity and DynamicHit.point, use DynamicHit.Entity and DynamicHit.Point instead.
- Implemented proper GetHashCode methods for generated types to reduce hash collisions in event system.
- Improved the event dispatcher on the Unity side to reduce hash collisions.
- Improved performance of signal callbacks.
- Improved performance of array methods.
- Removed obsolete DynamicBody.InitStatic methods, use the new DynamicBody.InitKinematic methods instead.
- Removed obsolete AssetLink.Asset property, use the new AssetLink.Instance property instead.
- Fixed issues with 'Skip Rollbacks When Possible' setting, it should now work properly.
- Fixed issue with static collider broadphase init using too much CPU during runtime.
- Fixed issue with synced events being invoked multiple times in some cases.
- Fixed last remaining issues with QUANTUM_XY script define symbol.
- Fixed issue with transparency not being used with the Quantum.Draw methods.
- Fixed bug in polygon<>circle collision code.
- Fixed issue where signals with no arguments would generate invalid C#.
- Fixed issue where signals would be invoked on disabled systems.
- Fixed bug in generated IL code which would cause IL2CPP on iOS to not build.
1.1.4
Important:
The network protocol of 1.1.4 is incompatible with previous versions. This means
you have to update your backend plugin after you've upgraded to 1.1.4.
- Massive physics performance improvements.
- Exposed DynamicBody.PhysicsMaterial property.
- Exposed DynamicBody.IsKinematic property.
- Exposed Replay API via the IDeterministicReplayProvider interface which can be set on the RuntimeConfig object.
- Removed the obsolete Frame.GameConfig property, use the Frame.RuntimeConfig property instead.
- Renamed DynamicBody.InitStatic to DynamicBody.InitKinematic, InitStatic is marked as obsolete.
- Added Quantum.LayerMask which mimics the behaviour of the LayerMask struct in Unity.
- Added ability to run the Quantum simulation in a background thread, currently marked as experimental.
- Added 'Aggressive Send Mode' to the quantum configuration options, see settings inspector for more details.
- Added #pragma syntax to DSL for setting compiler directives.
- Added UnityDB.FindAsset<T>(AssetObject asset) to make it easier to get a unity asset from a quantum AssetObject.
- Added InitUser(), FreeUser(), AllocUser(), CopyFromUser(Frame frame) to allow easy extension of the Frame class from a partial user defined implementation.
- Added IEntityManifoldFilter which lets you filter collision manifolds for entities and disable collisions between certain entities.
- Fixed issue with lockstep input replication which could cause a lot of simulation stalling.
- Fixed issue with Polygon<>Box collisions causing them to not be calculated.
- Fixed issue with invalid input data throwing array out of range exceptions.
- Fixed issue with DynamicShapeConfig property drawer not having the correct height for 'None' and 'Box' collider types.
- Fixed issue where you could invoke methods on null pointers without getting a null reference exception.
- Fixed issue with not being able to create arrays out of asset_ref<T> types.
- Fixed issue in IL patcher where it would remove Assert calls for array accessor methods.
- Fixed issue where release mode dll's build with mono toolchain would make IL patcher produce invalid IL.
- Fixed issue with clock synchronizer which could lead to prediction count being high on some clients.
- Fixed issue with DeterministicInputFlags not being correct for input sets which were received before local client had simulated the frame for those inputs.
- Fixed memory leak in lockstep simulator caused by no input sets ever being recycled and re-used.
- Fixed issue where checksums callbacks would not be invoked when running with lockstep simulator.
- Fixed issue in network communicator call-order which could cause inputs to be delayed more than necessary.
- Fixed issue with input insertion when local input offset changed that could cause prediction spikes on remote clients.
- Fixed some issues related to switching quantum to the XY plane in unity with the QUANTUM_XY script define symbol.
- Fixed issue in code generator which allowed pointer types to be declared where not valid.
- Fixed issue in code generator which allowed the use of the nothashed keyword where not applicable.
- Fixed issue with importing animations that only has scale animation.
- Fixed null ref being thrown by the DB class when an asset link struct with a null guid was passed in.
1.1.3
- Added Lockstep mode that allows the quantum simulation to be run without rollbacks and predictions.
- Added [AssetObjectConfig] attribute to allow customization of the unity code generation for asset classes.
- Fixed issue where 'Rollback Window' setting was locked to the same as 'Simulation Rate'.
- Fixed issue in generated code that would cause a rare null-ref when calling GetEntity(EntityRef entity_ref)
- Fixed issue with MapDataBaker API where it would not always load the math lookup tables when in editor.
- Fixed array index out of range issue in NavMeshPathFinder that could occur in rare cases.
- Fixed issue with simulator that could in very rare cases hang client in an infinite loop.
- Fixed issue with animator not exporting speed parameter.
- Fixed issue with some transitions in animator not triggering.
- Fixed issue with 'Can Transition To Self' not being respected on Any State transitions in animator.
- Fixed potential null ref from QuantumRunner.OnDestroy call.
- Fixed issue with RuntimePlayer object order being incorrect compared to the PhotonPlayer order they were created for.
1.1.2
- Entities driven by physics are now clamped to the playable area.
- Added new type 'DynamicShapeConfig' which can be used inside quantum assets classes to setup a collider type that can later be used during runtime.
- Added new overloads for DynamicBody.InitDynamic and DynamicBody.InitStatic that take the new 'DynamicShapeConfig' as first parameter.
- Added DynamicBody.Enabled property to check enabled status of a body.
- Added AssetLink.Instance property, deprecated AssetLink.Asset property.
- Added support for root motion to animator. Mecanim AnimationControllers need to be reimported.
- Added "Local" game mode, which allows the Quantum to run locally with several players for games which require split screen, etc.
- Added debug gizmos for dynamic colliders.
- Removed "Singleplayer" game mode, replaced with "Local" game mode with one player.
- Fixed some issues with the DeterminsticConfig asset inspector not allowing certain valid values to be set.
- Fixed issue with static broadphase for physics causing box colliders to not be added to broadphase correctly.
- Fixed issue with missing property drawer for AnimatorGraphLink struct.
- Fixed issue with missing property drawer for PolygonColliderLink struct.
- Fixed issue with static colliders not respecting their scale when they were baked to map data.
- Fixed issue with event dispatcher that could cause an infinite loop.
- Fixed issue with GetAll[ComponentName] method calls always returning a zero count.
- Fixed issue with the navmesh pathfinder sometimes causing allocations.
1.1.1
- Massive improvement in physics performance for static colliders.
- QuantumCallback method for map changing is now properly named OnMapChangeBegin.
- Entire MapData bake API is now usable during runtime.
- Implemented MapDataBakerCallback base class for easy extension of the map data baking API.
- Added FPBounds2 struct for 2D bounds calculations.
- Signals now include the Frame as the first parameter.
- Added RaiseCollisionEventsForStatics to physics settings to allow toggling of collision callbacks for static colliders.
- Added missing QuantumStaticColliderBox2D script for baking static box colliders.
- Added missing method DynamicBody.AddTorque.
- Added DynamicBody.AddAngularImpulse.
- Added DynamicBody.Enable, DynamicBody.Disable and DynamicBody.Destroy
- Added relative point parameter to DynamicBody.AddForce and DynamicBody.AddLinearImpulse.
- DynamicBody.IsTrigger is now public so it can be set from code.
- Improved performance of linecast and raycast against box colliders.
- Exposed QuantumGame.RuntimeConfig and QuantumGame.SimulationConfig as static properties.
- Exposed Frame.SimulationRate that holds the current update rate of the simulation.
- Deprecated Frame.GameConfig, use the new Frame.RuntimeConfig instead.
- Added QuantumGame.FrameInterpolationFactor which provides a normalized value to use for interpolating between the two latest predicted frame.
- Added position interpolation between frames to EntityPrefabViewUpdater.
- EntityPrefabViewUpdater now instantiates prefabs at the correct transform position.
- Added RNGSession.Next(FP min, FP max), RNGSession.Next(Int32 min, Int32 max) and RNGSession.HighPrecisionInteger(Int32 precision)
- Added temporary error log to FPVector2.Normalize to try to track down issue where the square magnitude of a vector turns into a negative value.
- Destroying entities are now deferred until all Systems have executed.
- Renamed Frame.EntityGet to Frame.GetEntity.
- Layer collision matrix is now imported from the Unity Physics settings.
- Fixed error spam when creating a new AnimatorGraph asset.
- Fixed a bug where layers would not be checked before collision was resolved for two bodies.
- Fixed a bug with baking static colliders that would invert their rotation.
- Fixed a bug with ToFPRotation2D extension method that inverted the rotation.
- Fixed a bug in the code generator related to complex array types.
- Fixed a bug in Animator updater where it would not use the correct delta time.
- Fixed a bug in DynamicScene.OverlapCircle causing it to always intersect all Box colliders.
- Fixed a bug where the Animation "Any State" was not working. Mecanim AnimationControllers need to be reimported.
1.1
- Initial ECS Release
1.0
- Initial Quantum Release