Release Notes
3.0.0
Breaking Changes
- The Quantum SDK is now a unitypackage.
- Renamed PhotonDeterministic.dll to
Quantum.Deterministic.dll
and QuantumCore.dll toQuantum.Engine.dll
. - Upgraded network libraries to Photon Realtime 5 (see Realtime changelog separately).
- All Unity-only scripts have been put in
Quantum
namespace and have been givenQuantum
prefix (e.g.MapData
->QuantumMapData
,EntityPrototype
->QuantumEntityPrototype
). - The
PhysicsCollider
2D and 3D components now have a field calledLayer Source
which defines where the layer info should come from. This might require colliders layers to be set again; AssetBase
has been obsoleted as is no longer functional.AssetObject
now derive fromUnityEngine.ScriptableObject
. This means that there is no longer the need forAssetBase
wrapper and all the partialAssetBase
extensions need to be moved toAssetObject
definitions. We provide tools that migrate asset data without data loss.AssetObjects
need to be created withAssetObject.Create<T>
orT.Create
.- To add a new list of assets (e.g. with Addressables), mark a method with
[QuantumGlobalScriptableObjectLoaderMethod]
attribute. AssetObjects
referencing otherAssetObjects
directly (not byAssetRef<T>
) are supported, but will no longer be fully serializable by the defaultIAssetSerializer
. This should be a concern for when any non-Unity runner is used or such assets are used in theDynamicDB
.- Removed "standalone assets" /
QPrefabs
. They have been fully replaced with standalone prototypes. All_data
files should be removed. - Removed built-in support for AssetBundles.
RuntimeConfig
andRuntimePlayer
are serialized with Json when send to the server.MapDataBakeCallbacks
implemented in a custom assembly it has to be made known by adding this[assembly: QuantumMapBakeAssembly]
to the script.- Changed the timing around the
GameStarted
callback. It is now only called once per started Quantum session and, when waiting for a snapshot, it will be called after the snapshot has arrived withisResync
= true. Frame.Heap
is no longer aHeap*
but instead a reference to a managedFrameHeap
instance, which shares the same API and adds allocation tracking capabilities. Direct usages offrame.Heap->
can be replaced byframe.Heap.
instead.- Added the
isResync
parameter to theGameStarted
callback (which is true, when the callback is invoked after the game has been re-synced for example after a late-join). - Changed
QuantumNavMesh.ImportSettings.LinkErrorCorrection
type frombool
tofloat
(representing a distance). NavMeshRegionMask.HasValidRegions()
now returnstrue
for the "MainArea", useHasValidNoneMainRegion
instead to only query for non-MainArea regions- AppSettings.RealtimeAppId was replaced by AppSettings.QuantumAppId, the Unity inspector will automatically swap them when the PhotonServerSettings asset is inspected.
- The Quantum3 server will automatically block all non-protocol messages and all Photon Realtime player properties. Unblock them using the Photon dashboard and set
BlockNonProtocolMessages
andBlockPlayerProperties
tofalse
. - Removed
DeterministicGameMode.Spectating
(useMultiplay
) because all online Quantum simulation are started in spectating mode by default until a player is added. - Also check out other references
- Migration Guide:
https://doc.photonengine.com/quantum/v3/getting-started/migration-guide
- What's New:
https://doc.photonengine.com/quantum/v3/getting-started/whats-new
- Photon Realtime 5 changelogs (
Assets\Photon\PhotonLibs\changes-library.txt
,Assets\Photon\PhotonRealtime\Code\changes-realtime.txt
)
- Migration Guide:
What's New
- Added input delta compression.
- Increasing minimum Unity version to 2021 LTS.
- New start online protocol to support adding and removing players at runtime.
- Added Quantum webhooks for the Photon public cloud.
- Increased maximum player count to 128.
- Predicted commands.
- A new graphical demo menu (requires the import TextMeshPro local assets upon opening the scene for the first time).
- Added async support for connection handling.
- Native physics libraries (Windows only in Preview).
- Support for assets that are neither a Resouce nor Addressable. Direct references to such assets are stored in
QuantumUnityDB
. QuantumUnityDB.Get[Global]AssetGuids
- ability to iterate over GUIDs, based on asset types.- Support for
netstandard2.0
andnetstandard2.1
. - Full support for Odin inspector.
- Quantum Unity inspector polish and adding code documentation foldouts.
- Newtonsoft-powered Json deserializer can now read
[SerializeReferences]
. - QuantumHud window displays onboarding information and installs Quantum user scripts and assets.
- Creating Quantum system instances can now be done in a data-driven way by adding a
SystemsConfig.asset
to theRuntimeConfig
. - The multiclient script now can add local players without creating a new client connection.
- Added
AllowedLobbyProperties
dashboard variable to restrict lobby property usage for Photon matchmaking. - Added
Quantum.Log.dll
dependency, which introduces theQuantum.LogType
and can clash withUnityEngine.LogType
when migrating. - Quantum debug dlls can be toggled in the BuildFeatures section on the
QuantumEditorSetting
inspector and in the Quantum menu.
Changes
- Unified Quantum CodeGens into one tool.
- Unified QuantumRunner and SessionContainer into the
SessionRunner
class and moved it to theQuantumGame
project. - Component prototype suffix has been changed from
_Prototype
toPrototype
. - Component prototype wrapper prefix changed from
EntityComponent
toQPrototype
(e.g.EntityComponentTransform2D
->QPrototypeTransform2D
). Frame.Assets
is now obsolete. UseFrame.FindAsset<T>
instead.AssetObjectConfigAttribute
is obsoleted and no longer functional.AssetObject
is no longer restricted to being in the same assembly as Quantum simulation code. If the simulation code needs to access such assets, it can either use a base class or an interface. This allowsAssetObjects
to be extended with any Unity-specific data.AssetRefT
generated types are now obsolete, useAssetRef<T>
instead.asset T;
andimport asset T;
are no longer needed in .qtn files. Any type derived fromAssetObject
is already a fully functional Quantum asset now and can be used withAssetRef<T>
fields.AssetObject.Guid
is now deterministic by default, based on Unity's GUID andfileId
. When needed can be overridden (e.g. for assets imported from Quantum 2.1) - such overrides are stored inQuantumEditorSettings
. TurningAssetGuids
deterministic speeds upQuantumUnityDB
by an order of magnitude.UnityDB
has been obsoleted andAssetResourceContainer
has been removed.QuantumUnityDB
replaced both and uses more consistent method naming.- Prototype assets for new prefabs are created as standalone assets, with
EntityPrototype
suffix andqprototype
extension. This fully decouples loading prototypes during simulation from their source prefab, improving asset load times and avoiding deadlock issues with Unity's job system. - All Quantum assets located in asset search paths are now marked with
QuantumAsset
label. - Moved NavMesh baking to the
Quantum Simulation
project to bake parts deterministically (not the Unity navmesh export). - Removed the
MovementType.DynamicBody
andMovementType.CharacterController2D
from the NavmeshAgentConfig. SelectMovementType.Callback
instead and perform movement during theISignalOnNavMeshMoveAgent
callback. The removed options were only good for prototyping and led to a lot of questions. - Changed
QuantumNavMesh.BakeData
and related data structures to only use fixed point vectors. - Replaced non-deterministic code (Triangle Normal Computation) in
BakeNavMesh()
with fixed point math. - Moved navmesh link detection and error correction from
BakeNavMesh()
toImportFromUnity()
,StartTriangle
andEndTriangle
now are set onBakeData.Links
. - Increased max navmesh region count to 128
- The MainArea of the navmesh now has its own valid navmesh region (always index 0) and can be toggled on/off and can be properly used for navmesh queries like
LineOfSight()
orFindClosestTriangle()
- Changed
BakeNavMesh
signature to only use relevant data types. - Replaced the signal
OnPlayerDataSet(PlayerRef player)
withOnPlayerAdded(PlayerRef player, bool firstTime)
wherefirstTime
signals this is the first time that this player was assigned.. - Added
OnPlayerRemoved(PlayerRef player)
signal. - Added a parameter to the
GameStarted
callback (isResync
: true, when the callback is invoked after the game has been re-synced for example after a late-join). - Removed the
ReleaseProfiler
configuration from the code solutions and replacing it with a flag inStartParameters.GameFlags
calledQuantumGameFlags.EnableTaskProfiler
. - Removed API that was deprecated in Quantum 2.1.
- All Quantum Unity MonoBehaviours now derive from
QuantumMonoBehaviour
. - All Quantum Unity ScriptableObjects now derive from
QuantumScriptableObject
. - The state inspector now shows all relevant configs when selecting the Runner.
- Restructured the Quantum Unity menus.
Navigation.Raycast2D()
provides information about the border index that generated the closest hit.
Preview
Build 1463 (May 09, 2024)
Changes
- Added a new stable algorithm for capsule collision check
- Frame Heap now throws an
OutOfMemoryException
when it fails to allocate
Build 1462 (May 08, 2024)
Bug Fixes
- Fixed: Installing the Quantum Menu after the Asteroids sample will still add the asteroids scene to the
QuantumMenuConfig
- Fixed: An issue that was introduced in the last build which caused the last generated event to be not called and throw an error
Build 1461 (May 07, 2024)
What's New
GameResult
webhook - add game result information to the partial GameReault class and trigger the event from the simulation to generate a GameResult webhook, see the webhook online documentation for more detailsPlayFab
integration for webhooks- All webhooks send the
AppId
property PrototypeMaterializationContext.UserData
- a way to pass custom data to component prototype materializationPrototypeMaterializationContext
public constructor
Changes
- Upgraded to Photon Realtime 5.0.6
Bug Fixes
- Fixed: Union drawer not being used for prototypes containing EntityRefs
- Fixed: An issue that could result start Quantum with an empty ClientId
- Fixed: An issue with webhooks to properly send the Photon user is instead of the Quantum client id (AddPlayer, PlayerAdded, PlayerRemoved, GameConfigs)
Build 1459 (May 04, 2024)
Bug Fixes
- Fixed: False-positive desync when late-joining and receiving a snapshot where a Compound Shape had its internal buffer expanded
Build 1458 (May 03, 2024)
Changes
- Moving the default place of
Quantum.Unity.asmref
intoQuantumUser/View/Generated
, the current place suggested that all view script have to be added to the Quantum.Unity assembly reference
Bug Fixes
- Fixed:
QuantumCodeDoc
label applied on .xml files outside of Photon/Assets - Fixed: An issue in the Quantum Menu that caused AuthenticationValues to be overwritten when using custom auth
- Fixed: An issue in the RawInputCache that caused
Cache is full
errors and will now grow the buffer at runtime
Build 1455 (May 01, 2024)
Bug Fixes
- Fixed: Debug assert that could fail when resetting or reinitializing a map on the 2D or 3D physics engines
Build 1452 (Apr 30, 2024)
Changes
FPQuaternion.LookRotation(FPVector3, bool)
overload is now deprecated (optional bool parameter was never used) andFPQuaternion.LookRotation(FPVector3)
was added in replacement
Bug Fixes
- Fixed: An issues in the
QuantumRunnerRegistry
that kept old runner instances when using domain reload off in Unity Editor
Build 1448 (Apr 26, 2024)
Breaking Changes
- The
QuantumMenuConfig
AvailableScene type (PhotonMenuSceneInfo
) now includes a complete replacement of theRuntimeConfig
instead of indivdual properties likeMap
andSystemsConfig
. Both properties have to be linked again on existingQuantumMenuConfig
assets for each scene
What's New
[CodeGen(UnityWrapperFolder, "FolderPath")]
- a way to override a folder where Unity prototype wrapper is emit into- The Asteroid game sample can be installed with the QuantumHub
- The Quantum Menu game screen now detects a menu camera and disabled it during the game
Bug Fixes
- Fixed: Support for multiple [CodeGen] attributes
- Fixed: An error log caused by an empty Map asset inside the MapData script
Build 1442 (Apr 24, 2024)
Bug Fixes
- Fixed: Null ref from overlay when sdk not installed
- Fixed: Gizmos not getting removed with the component
Build 1439 (Apr 23, 2024)
Bug Fixes
- Fixed: NullReferenceException when late-joining a game and having at least on physics engine system disabled (2D or 3D)
Build 1438 (Apr 20, 2024)
Changes
- Upgrading Photon Realtime to version 5.0.4
Build 1435 (Apr 17, 2024)
Bug Fixes
- Fixed: The normal of the collision between a capsule and a box when the first is completely inside the second
- Fixed: Physics gizmos not obeying the proper config
Build 1428 (Apr 16, 2024)
Bug Fixes
- Fixed: Broadphase queries that stopped to work after add frame teleport to the transforms
- Fixed: Replace toolbar in overlay for performance
- Fixed: An issue in the party code generation of the Quantum menu that caused the wrong region being decoded
Build 1427 (Apr 15, 2024)
Breaking Changes
- We changed the replay file format one more time and also renamed it to
QuantumReplayFile
, making the old name obsolete. Asset DB, RuntimeConfig and InputHistory are now saved with a Json friendly wrapper that works around how verbose the Unity Json tool saves byte arrays, reducing the replay file size when saved in Unity a lot
What's New
Frame.PlayerConnectedCount
Build 1425 (Apr 12, 2024)
Breaking Changes
- Photon Realtime 5.0.3 changed a few public methods, read the
changes-realtime.txt
andchanges-library.txt
for details - The Quantum navmesh asset serialization changed - rebake all navmeshes
What's New
- Built-in position and rotation teleport support on Transform2D, Transform3D and QuantumEntityView
- Reduced the navmesh binary asset size, control the serialization options under
NavMesh.SerializeType
. By default meta data is now recomputed during runtime, set toNavMeshSerializeType.FullWithMetaData
to disable it
Changes
- Upgraded to Photon Realtime 5.0.3
- Moved the navmesh baking code from the Simulation code to the Quantum.Engine.dll
Build 1421 (Apr 11, 2024)
Bug Fixes
- Fixed: Gizmo and editor code not obeying defines
- Fixed: Potential desync when late-joining and receiving a version of a modified in-Frame map different from a loaded map with the same Guid
Build 1420 (Apr 10, 2024)
What's New
- Quantum Component syntax for
QuantumEntityViewComponent
s, e.g.GetPredictedQuantumComponent<PlayerLink>()
Bug Fixes
- Fixed: Prediction area not working in gizmos
- Fixed: Dynamic spawned physics gizmos not working
- Fixed: Prediction gizmo code not applying the gizmo style when drawing
- Fixed:
non-SerializedProperty checks only work for top-level properties
error when opening the gizmo scriptable object - Fixed: Physics gizmos fill option not showing up in the gizmo overlay
- Fixed:
NullReferenceException
when trying to save a component prototype with an array ofentity_ref
Build 1419 (Apr 09, 2024)
What's New
- The replay menu default connection args can now configure the start protocol client timeout
StartGameTimeoutInSeconds
- Drawing debug shapes for development builds must now be opted in by defining the
QUANTUM_DRAW_SHAPES
define (QuantumEditorSettings
has a shortcut to toggle it) - Draw.Shape() overload to draw Quantum debug shapes directly
Bug Fixes
- Fixed: An issue with
QuantumRunner.IsSessionUpdateDisabled
which did not disable upating the session runner internally and relays or instant replays ran much quicker than anticipated - Fixed: The errors on capsule drawing when the flag QUANTUM_XY is enabled
- Fixed: An issues that could cause an infinite recursive call when using
Draw.Box()
Build 1418 (Apr 06, 2024)
Breaking Changes
- Added the
$type
property to Json serializedRuntimeConfig
andRuntimePlayer
to be able to deserialize the file outside of Unity, useQuantumUnityJsonSerializer.SerializeConfig(Stream stream, IRuntimeConfig config)
to export RuntimePlayer and RuntimeConfig or add"$type":"Quantum.RuntimeConfig, Quantum.Simulation"
or"$type":"Quantum.RuntimePlayer, Quantum.Simulation"
to the respective Jsons - The
RuntimeConfig
field inside the ReplayFile has been deprecated, theRuntimeConfigBinary
field now always contains a binary serialized version of the config created byAssetSerializer.ConfigToByteArray(config)
What's New
QuantumUnityJsonSerializer.TypeResolver
- A Dotnet console replay runner app project is now generated alongside the non-Unity simulation project. The format of
QuantumDotnetBuildSettings
has been altered and the projects will be generated into theQuantum.Dotnet
folder inside the Unity project root
Changes
- Replays can be self containing files now, they optionally integrate the asset db and checksums which makes it easier to handle than being split into multiple files, make sure to not use this when working with replays in a production environment where file sizes are a concern
- Renaming a few members on ReplayFile and Session.Arguments to a more common scheme (InitialTick, InitialFrameData)
Bug Fixes
- Fixed:
GetDrawerTypeForTypeDelegate
error in Unity 2022.3.23 or newer - Fixed:
QEnum
s now implementSystem.IConvertible
and can be used without.Value
suffix in `DrawIfAttribute - Fixed:
IRuntumeConfig
andIRuntimePlayer
are now interfaces as intended
Build 1417 (Apr 03, 2024)
Changes
FrameBase.FindAsset<T>(AssetRef, out T)
marked obsolete. UseTryFindAsset
instead
Build 1416 (Apr 02, 2024)
Bug Fixes
- Fixed: Incorrect normal between box collisions when a shape is totally inside the other
- Fixed: 3D Physics scene mesh always updating to the
Frame.Map
, even when a specific map is provided when forcingInit
on the physics engine - Fixed: Not being able to reinitialized the 3D Scene Mesh from outside the Frame simulation loop, even if in a Verified frame
- Fixed: 3D Scene Mesh structure not resetting the current tracked Map when calling
ResetMap
in the engine API
Build 1412 (Mar 27, 2024)
Breaking Changes
- The draw capsule API was changed to receive the extent instead of the height. Also, an override was added to use a capsule shape as an argument
Bug Fixes
- Fixed: 3D Physics issue when disabling
UseAngularVelocity
, which could cause some collision constraints to be ignored on every solver iteration - Fixed: Serialization of
PhysicsQueryRef
, which is now ensured to have a deterministic Version value
Build 1402 (Mar 25, 2024)
What's New
- Quantum gizmo selection screen overlay GUI to toggle Quantum gizmos more conveniently, open the overlay on the GizmoSettings inspector
Bug Fixes
- Fixed: CodeGen:
AssetRef<T>
incorrectly appearing asAssetRef
when used in collections - Fixed: An issue on the plugin that caused large snapshot downloading to fail and cause disconnects or exceptions during late-joining
Build 1393 (Mar 21, 2024)
Changes
- Logging a more precise error on session start time outs
Bug Fixes
- Fixed: DllNotFoundException when starting a game on platforms other than Windows
- Fixed: Desync caused by serialization of the PhysicsQueryRef
Build 1390 (Mar 19, 2024)
What's New
- Quantum runtime logging can now be toggled by a
LogLevel
inside theEditorSettings
, the default isWARN
- A tool to quickly convert Unity colliders to Quantum colliders
GameObject/Quantum/Convert Colliders
- Create
SystemSignalsOnly
template
Bug Fixes
- Fixed: Warnings in
QuantumAssetObjectSourceStatic.AssetType
andQuantumAssetObjectSourceStaticLazy.AssetType
Build 1388 (Mar 16, 2024)
Changes
- Removing code from the navmesh baker that was needed when the MainArea was not a region
Map.SerializeTrianglesMetadata
is now obsolete and triangle metadata is never serialized
Bug Fixes
- Fixed: Draw capsule function to use the correct scale
- Fixed: Static capsule 3D gizmo drawning to use the correct scale
- Fixed: Correctly enabling
QUANTUM_ENABLE_TEXTMESHPRO
for com.unity.ugui version 2.0.0 and up - Fixed: An issue on the server that cause input to be not accepted for late-joines for a while when lots of commands are issued by other clients
Build 1383 (Mar 14, 2024)
What's New
FrameThreadSafe.GetGlobal()
extension method- Obsolete methods imitating legacy serialization API:
Serialize/DeserializeAssets/Replay/Checksum
Compress
andDecompress
editor buttons forBinaryData
FP.AsDoubleRounded
andFP.FromRoundedDouble_UNSAFE
- these variants do not convert to exact values, but rather ones with the least significant digits, within FP's precision rangeFP.FromDouble_UNSAFE
Changes
QuantumAssetSourceStatic.Prefab
->QuantumAssetSourceStatic.Object
Removed
QuantumEditorSettings.FPDisplayPrecision
- no longer needed, FPs behave in same way as doubles
Bug Fixes
- Fixed:
BinaryDataAttribute
being ignored when using Odin - Fixed: An issue with the physics layer matrix editor tool in the
SimulationConfig.Physics
inspector - Fixed: Compile errors for 2022.2 related to
FindObjectSortMode
- Fixed:
SimulationConfig's
Import Layers` buttons not marking asset as dirty
Build 1378 (Mar 13, 2024)
What's New
- FPVector3.XYO, .XOZ and .OYZ swizzle properties
Build 1372 (Mar 12, 2024)
Changes
FP.ToString
improvements: each FP value emits a unique string and is rounded towards shortest value within the rounding error- Introducing
QUANTUM_ENABLE_AI_NAVIGATION
to toggle Unity navigation addon related code
Bug Fixes
- Fixed: An issues that caused the debug draw shapes from the simulation not being displayed when using the URP
- Fixed: Exception when trying to obtain
GetDrawerTypeForType
MethodInfo - Fixed: Using NamedBuildTarget accross the board
- Fixed: Occasional exception in loading of LUT in the editor
Build 1369 (Mar 08, 2024)
Bug Fixes
- Fixed: QuantumUnityDB not available resulting in a flood of error messages when inspecting
AssetObject
Build 1368 (Mar 07, 2024)
What's New
- Photon room information on the
QuantumRunner
inspector
Bug Fixes
- Fixed: Potential deadlocks when the simulation is using all Job threads and an asset which is sync-loaded triggers an async mesh/texture load
- Fixed: An issue in the Quantum menu that could result in not being able to start a game when the loading a fallback map failed with an exception
Build 1366 (Mar 06, 2024)
What's New
- The context
LayerInfo
is now exposed inFrameThreadSafe.Layers
property, similarly toFrame.Layers
Changes
- Setting the default
DeltaTimeType
used in the menu toEngineDeltaTime
Build 1365 (Mar 05, 2024)
What's New
- The QuantumStart room property can be controlled by the server using dashboard variables or webhook configuration, check out the CreateGame dashboard configuration or webhook documents for more information
Changes
- Wrapping event dispatching callbacks into HostProfiler markers
Removed
SessionConfig
andSessionConfigPlayerCountIsVariable
dashboard configs, please use webhooks instead
Build 1364 (Mar 04, 2024)
Breaking Changes
IAssetSerializer
interface changed, it also deals withRuntimePlayer
andRuntimeConfig
serializationQuantumUnityJsonSerializer
output format changed; asset data is no longer stored as a JSON-escaped string
What's New
- PlayerRef now implements IEquatable<PlayerRef>
QuantumUnityJsonSerializer.NullifyUnityObjectReferences
- enabling will serialize all Unity references as JSON-null. (true by default)QuantumUnityJsonSerializer.EntityViewPrefabResolver
- a custom handler for resolving entity view prefabs- Added a few new markers for the Unity profiler
- Added another simulation debug draw shape
Draw.Capsule
Changes
- Solid colored simulation debug shapes now use the depth buffer when rendering, replace the default materials setting
DebugMesh.DebugMaterial
andDebugMesh.DebugSolidMaterial
Bug Fixes
- Fixed: Overflow in internal physics capacity fields when going above 64K entries in triangles, manifolds and other types
- Fixed: Compile error (collection literals not supported in out TC setup)
- Fixed: Global objects no loading in a build due to assembly attributes being stripped
- Fixed: Compile error in
QPrototypePhysicsCollider2D
when both 2D & 3D physics are disabled - Fixed: An issue that inverted the meaning of
QuantumEntityViewFlags.DisableSearchChildrenForEntityViewComponents
- Fixed: Making simulation debug draw consistently drawing in debug builds
Build 1356 (Feb 27, 2024)
Changes
- The
RuntimePlayer
list on the QuantumMenu connection args is now an array and it initializes itself with one entry by default, this way freshly installed menu scenes have oneRuntimePlayer
that is added automatically and the list now can be empty if players get added differently to the running game
Build 1355 (Feb 24, 2024)
What's New
- Running the CodeGen now throws an error when a UnityEditor restart is needed after a package upgrade
QuantumSceneViewComponent
can be used to create standalone (without an Entity) view component scripts that get updated by the EntityViewUpdater, to create simple view scripts that have access to the simulation
Changes
- Navmesh serialization logs the name and guid on errors
Build 1354 (Feb 23, 2024)
Bug Fixes
- Fixed: An issue that could cause false navmeshborders being generated by introducing
QuantumNavMesh.ImportSettings.FixTrianglesOnEdgesHeightEpsilon
Build 1353 (Feb 22, 2024)
Changes
- CodeGen: All extension methods for flags are now grouped under
Quantum.FlagsExtensions
class - CodeGen:
ComponentTypeIdGen
,StaticDelegates
andTypeRegistry
merged into a singleStatics
class
Bug Fixes
- Fixed: CodeGen: using
AllocateOnComponentAdded
attribute resulting in a compile warning - Fixed: An issue that caused the simualtion to end with an exception when the delta input cache is full (e.g. breakpoint for 30+ sec), now a PluginDisconnect callback is triggered with
ERROR #41
and the simualtion is destroyed - Fixed: An issue that could cause navmesh border normals to be flipped
Build 1352 (Feb 21, 2024)
Changes
- Frame.AllocateCollection (List, HashSet and Dictionary) overloads that receive a copy of the collection Ptr are now obsolete. Use either the overload that does not receive a Ptr or the one that does so as an 'out' parameter
Bug Fixes
- Fixed: Missing script on an asset preventing
QuantumUnityDB
from being generated - Fixed: The sleep detection when the flag IsAwakenedByForces is enabled in 3D simulation for the Legacy Gauss colision solver
- Fixed: The sleep detection when the flag IsAwakenedByForces is enabled in 2D simulation for the collision solver Hybrid Jacobi and Legacy Gauss
- Fixed: Migration:
QUANTUM_ENABLE_MIGRATION
being defined ignoringQUANTUM_ENABLE_MIGRATION_Q3PREVIEW
Build 1350 (Feb 17, 2024)
What's New
QuantumUnityDB.Global
can be set manually now. This enables async/Addressables workflows
Changes
- Global ScriptableObjects are by default instantiated from a loaded Resource, if requested during Play mode in Editor
QuantumGlobalScriptableObjectLoaderMethodAttribute
is now obsolete. UseQuantumGlobalScriptableObjectAddressAttribute
orQuantumGlobalScriptableObjectResourceAttribute
to point to custom a runtime location or use the global object's setter instead
Bug Fixes
- Fixed: Adding/removing sources from
QuantumUnityDB.Global
in Playmode no longer modifies the asset itself by default - Fixed:
QuantumUnityDB
is loaded from Resources (rather than AssetDatabase) in Playmode
Build 1349 (Feb 16, 2024)
Bug Fixes
- Fixed: Serialization issue in FrameMetaData that could cause a soft desync when expanding internal hash collections
Build 1348 (Feb 15, 2024)
What's New
QuantumUnityDB.RemoveSource
Build 1347 (Feb 14, 2024)
Changes
QuantumUnityDB.DisposeAsset
only returns false if an asset does not exist
Bug Fixes
- Fixed: Making the menus current scene saved in playerprefs more robust against changes in the menu config
Build 1346 (Feb 13, 2024)
Bug Fixes
- Fixed: Assets left in
Disposing
state when unloading with the Quantum Unity DB Inspector
Build 1344 (Feb 12, 2024)
Breaking Changes
- Delete the folder
Assets/Photon/Quantum/Assemblies/Dotnet
before or after upgrading. We had to change the way how to handle non-Unity Quantum dependencies inside the unitypackage and placed them into a zip folder atAssets/Photon/Quantum/Editor/Dotnet
. Although properly excluded the unarchived dlls were causing random issues with builds
Bug Fixes
- Fixed: Retaining
Quantum-Menu.unitypackage
meta file between upgrades
Build 1342 (Feb 09, 2024)
Changes
- Replaced
QuantumEntityView.GameObjectNameIsEntityRef
with the view flagDisableEntityRefNaming
- Loading entity view components now also searches game object children, disable with the view flag
DisableSearchChildrenForEntityViewComponents
- ViewContexts are also searched in children of the entity view updater game object
Bug Fixes
- Fixed:
QuantumEntityView.SetViewFlag()
was missing a way to unset flags - Fixed: An issue on the server that caused the simulation to start prematurely on the server when using the CreateGame webhook
Build 1340 (Feb 08, 2024)
What's New
- CodeGen:
import component
andimport singleton component
support. This directive registers an existing component without emitting the type itself, so components can now be defined outside of a QTN file. When defining a component type, these are the requirements: - implements
IComponent
interface - has
const int SIZE
- has
public static void Serialize(void* ptr, FrameSerializer serializer)
- has
ComponentChangedDelegate OnAdded
static property (may return null) or staticOnAdded
method matching the delegate signature. - has
ComponentChangedDelegate OnRemoved
static property (may return null) or staticOnRemoved
method matching the delegate signature - AssetScript template under the create asset menu
- Qtn file icon
Changes
- Generated
AllocatePointers
andClearPointers
first parameter changed fromFrame
toFrameBase
Build 1339 (Feb 07, 2024)
Changes
QuantumEntityView
now usesInlineHelp
instead of duplicating the comments for tooltips
Build 1338 (Feb 06, 2024)
What's New
Assets/Create/Quantum/Asset...
menu item
Changes
- Improving the Quantum asset menu sorting
Bug Fixes
- Fixed: An issue on predicted commands that could cause a desync by executing the same command on different verified frames
- Fixed: An issue that caused changes to the navmesh settings on the Quantum map (e.g. GridSize) not be baked on to the Quantum navmesh
Build 1335 (Feb 03, 2024)
Changes
- Physics Materials' Friction coefficients are no longer clamped between 0-1, but only > 0. Restitution is now clamped between 0-1
Bug Fixes
- Fixed: Unable to find style 'FloatFieldLinkButton' warning when installing the QuantumMenu
Build 1334 (Feb 02, 2024)
Breaking Changes
- When upgrading a Quantum 3 preview project use the online migration notes
https://doc.photonengine.com/quantum/v3/getting-started/migration-guide-preview
- Built-in component prototypes are a part of the SDK now and Unity script guids of
QPrototypeTransform2D
etc. have changed, use the scripting defineQUANTUM_ENABLE_MIGRATION_Q3PREVIEW
as mentioned on the migration notes when upgrading - Moving all QuantumMenu Unity scripts and assets to a separate unitypackage
Assets/Photon/QuantumMenu/Quantum-Menu.unitypackage
and added assembly definitions, this way the menu can be easily removed from the SDK if desired, to migrate import the unitypackage manually - Renamed
Game
andRuntime
folders insideAssets/QuantumUser/
toSimulation
andView
to better represent which library its content belongs (Quantum.Simulation.dll and Quantum.Unity.dll respectively), to migrate change the code-generation destination folders inQuantumCodeGenSettings.User.cs
as described in the migration notes - Renamed the final game assembly from
Quantum.Game.dll
toQuantum.Simulation.dll
, to migrate open allSystemsConfig
assets with a text editor and replaceAssemblyQualifiedName:.. Quantum.Game
withAssemblyQualifiedName:.. Quantum.Simulation
and rebake all maps - Collections used in events are now passed by their appropriate pointer type (e.g.
list<T>
->QListPtr<T>
). Was:Ptr
- The default backing type for
flags
in DSL is now Int32 (was: Int64)
What's New
- Adding entity view pooling, add
QuantumEntityViewPool
to the entity view updater game object - Introducing
EntityViewComponent
s, a quick way to add view logic to the Quantum entity views - Use the
IQuantumEntityViewContext
to quickly inject data into the view components - Standalone Quantum dll build tools using the
QuantumStandaloneBuildSettings
andQuantumStandaloneProjectSettings
scriptable objects - CodeGen: Support for casting in the attribute list. E.g.:
[DrawIf("SomeField", (long)SomeEnum.SomeValue)] Int32 IntField;
- CodeGen: Support for
AssetRef
andasset_ref
types without angle brackets FramePrinter.IPrintable
- if a struct/component implements this interface,FramePrinter
will use it to do the printing instead of the default reflection-based printing- Support for QUANTUM_ENABLE_MIGRATION_Q3PREVIEW define
QuantumUnityJsonSerializer.IntegerEnquotingEnabled
andQuantumUnityJsonSerializer.IntegerEnquotingMinDigits
- helps with the cases where resulting JSON is processed by a serializer that treats all numbers as floating points, resulting in loss of precision for long-backed Guids etcQuantumUnityJsonSerializer.EntityViewPrefabResolvingEnabled
Changes
- Upgrading Photon Realtime to version 5.0.2
- The default location for Quantum code generated script files is not
QuantumUser/View/Generated
(wasRuntime/Generated
) - Collections pointer are readonly structs now
- The menu can now be started and used without scenes added to the MenuConfig, it will use the first Quantum scene that can be found
- Renamed
JsonAssetSerializerBase.IsPrettyPrintEnabled
toPrettyPrintEnabled
- Added
[InitializeOnLoadMethod]
toQuantumUnityLogger.Initialize
- Assertion in QuantumUnityDB.DisposeEntry logs more info now
- Moving the
Quantum
menu toTools/Quantum
to comply with AssetStore guidelines
Removed
- The game sample scene from the SDK, an initial test scene is generated by the Hub during installation and new Quantum game scenes can be generated by the Create Asset menu
- Simple connection scene, which now can be generated by the Hub
PathUtils.MakeRelativePath()
, usePathUtils.TryMakeRelativeToFolder()
or even betterPath.GetRelativePath()
ReflectionUtils.GetShortAssemblyQualifiedName()
, useSerializableType.GetShortAssemblyQualifiedName()
insteadQuantumUnityJsonSerializer.SerializeEntityViewPrefabInstanceId
Bug Fixes
- Fixed:
LayerMatrixGUI
error on latest Unity 2023.2 - Fixed: The gizmos in 2d simulation when a capsule shape is added to the scene
- Fixed: CodeGen: possible incorrect recognition of
QUANTUM_ENABLE_MIGRATION
define - Fixed: Globals auto init/clear pointers not being called automatically.
AllocatePointers
is executed beforeInitUser
andClearPointers
is executed beforeFreeUser
- Fixed: The static collision on the broadphase in predict mode by using the static collider state to check if the meshes are enable in the frame
- Fixed: Issue in 3D Ray and Linecast Broad-Phase queries when using FirstHitOnly=false causing some hits to be missed
- Fixed:
AssertException
when saving a dirty scene, after exiting from play mode - Fixed:
[ExcludeFromPrototype]
applied onentity_ref
fields not restoring prototype's partial status
Build 1307 (Jan 18, 2024)
Bug Fixes
- Fixed: The computation of the support offset of capsule 3D to solve issues with the CCD collision with capsules
Build 1306 (Jan 17, 2024)
Changes
- Updating Quantum System templates by adding
using Photon.Deterministic;
for convenience
Build 1303 (Jan 13, 2024)
Bug Fixes
- Fixed: The computation of the support offset of capsule 3D to solve issues with the CCD collision with capsules
Build 1302 (Jan 12, 2024)
Breaking Changes
- Rebake all Quantum navmeshes
NavMeshRegionMask.HasValidRegions()
now returnstrue
for the "MainArea", useHasValidNoneMainRegion
instead to only query for non-MainArea regions
Changes
- The MainArea of the navmesh now has its own valid navmesh region (always index 0) and can be toggled on/off and can be properly used for navmesh queries like
LineOfSight()
orFindClosestTriangle()
Bug Fixes
- Fixed: Migration: compile errors for
UnityDB.ResourceManager
- Fixed: Odin: warnings for
QuantumStaticEdgeCollider2DEditor
andQuantumStaticPolygonCollider2DEditor
- Fixed: An issue with the remote profiler that caused the Unity Editor to freeze after quitting the app
Build 1301 (Jan 11, 2024)
What's New
- Quantum system script templates under
Create/Quantum/System
Bug Fixes
- Fixed: Warning about
StaticEditorFlags.NavigationStatic
for Unity Editor 2022 and newer
Build 1299 (Jan 10, 2024)
Breaking Changes
- Rebake all navmeshes and run the code generation
Changes
- Increased max navmesh region count to 128
Bug Fixes
- Fixed:
ComponentSet.IsSubsetOf
not computing the returned value correctly
Build 1298 (Jan 06, 2024)
Bug Fixes
- Fixed: Unity crashing when using an undefined type in QTN
Build 1297 (Jan 05, 2024)
What's New
IResourceManager
query capabilitiesResourceManagerStatic.AddAssets
Changes
QuantumUnityDB
is not aIResourceManager
itself, cutting down some asset management complexitiesResoureManagerStatic
treats assets as not loaded by default
Bug Fixes
- Fixed: CompareExportedAndUnityDB losing track of the scene it was supposed to delete
Build 1296 (Jan 04, 2024)
Bug Fixes
- Fixed: Typo in GUID Override Warning dialog
Build 1294 (Dec 22, 2023)
Bug Fixes
- Fixed: Trigger and query collisions between two 2D or 3D capsules
not being correctly detected - Fixed: Solve the CCD issues on capsule colliders 3D and 2D
- Fixed: Adding a camera to the demo menu scene to prevent the warning overlay for missing camera
Build 1293 (Dec 21, 2023)
What's New
QuantumUnityJsonSerializer.SerializeEntityViewPrefabInstanceId
QList.Sort()
andQList.Reverse()
methods
Bug Fixes
- Fixed:
EntityView
serializingPrefab
reference asinstanceId
when exporting the DB usingQuantumUnityJsonSerializer
- Fixed:
EntityView.Prefab
being null after a deserialization usingQuantumUnityJsonSerializer
, when the DB was created with another process. WhenEntityView
is deserialized, itsPrefab
field is resolved withQuantumUnityDB.Global
Build 1292 (Dec 20, 2023)
Bug Fixes
- Fixed: An issue with delta compression in local mode
SessionConfig.OffsetMin
(input deply) was greater then0
Build 1288 (Dec 16, 2023)
What's New
- Odin: dedicated drawer for
DictionaryEntry
UnionPrototype
Odin-dedicated drawer
Bug Fixes
- Fixed: Odin: errors when inspecting fields with
OptionalAttribute
orDictionaryAttribute
- Fixed: CodeGen: Type not found exception for QString when used as dictionary key but not defined anywhere else on the DSL
- Fixed: An issue that caused the command prediction to fail under higher pings
Build 1287 (Dec 15, 2023)
- Upgraded to Photon Realtime 5.0.1
Breaking Changes
- Delete the folder
Assets/Photon/PhotonRealtime
before importing the new Unity package. Unfortunately we had to do last minute changes to a few meta files of the new Photon Realtime scripts:change-realtime.txt
,ConnectionHandler.cs
andCustomTypesUnity.cs
What's New
- Support to 2D Capsule shape, including queries and on dynamic and static colliders
Build 1285 (Dec 13, 2023)
What's New
- CodeGen: support for AssetRef<T> (as an alternative to asset_ref<T>) in QTN
Bug Fixes
- Fixed:
UnionPrototype
drawers throwing an exception - Fixed:
StructPrototype
andUnionPrototype
types not having[Quantum.Prototypes.Prototype]
attribute - Fixed: An issues that caused the menu to not use the selected preferred region
Build 1284 (Dec 12, 2023)
What's New
- AssetRef.IsValid
Bug Fixes
- Fixed:
AssetRef<>.Equals
always returning false
Build 1283 (Dec 11, 2023)
What's New
- Adding meaningful assertion methods when using misconfigured navmesh agents
- When exporting a SessionConfig to Json the max possible player count is set instead of 0
Changes
- Renaming
Room Wait Time
setting on theSessionConfig
inspector to resemble more the property nameSession Start Wait Time
and correct the code doc summary
Bug Fixes
- Fixed: Toggling prototype's AssetGuid override removing all prototypes from the DB, until the next reimport
- Fixed:
Assert
when installing Quantum for the first time - Fixed:
QuantumEditorSettings
clearing guid overrides for prototypes on full reimport - Fixed: Migration: keep GenericAssets.cs when running CodeGen
Build 1275 (Nov 29, 2023)
What's New
QuantumUnityDBUtilities.SetQuantumUnityDBRefreshMode
- QuantumUnityDBUtilities.RefreshGlobalDB has
force
parameter
Changes
Frame.Create(AssetRef<EntityPrototype> prototype)
throwsArgumentOutOfRangeException
in case it fails to find the prototype- If the asset postprocessor detects changes in
AssetObjects
,QuantumUnityDB
gets refreshed inEditorApplication.delayCall
- Tests: Added AssetPostprocessor performance tests
Bug Fixes
- Fixed: Compiler warnings when no events or buttons are defined in QTN
- Fixed: Restored original GUIDs of some test assets (broken after 596d7256d85ca456b9465f7d110a2a45363ebf07)
- Fixed: An issue that cause the AppVersion to be saved on the
PhotonServerSettings
when using the sample connection scene - Fixed: An issue that caused the command prediction to not work properly
- Fixed: Occasional assert in
QuantumAssetSourceAddressable.UnloadInternal
- Fixed: An issue that caused input being polled incorrectly
- Fixed: An issue that failed to add multiple runtime players added to the menu game object
- Fixed: An issue on the plugin that failed to add players when adding multiple local players at the same time
- Fixed:
SessionRunner.Arguments.StartGameTimeoutInSeconds
to be a nullable and default toSessionRunner.Arguments.DefaultStartGameTimeoutInSeconds
which is set to 10 seconds - Fixed: QuantumUnityDB not refreshing on incoming new assets
Build 1268 (Nov 27, 2023)
Breaking Changes
- The files inside Assets/Photon/Quantum/Game/Core have been moved, delete this folder by hand before upgrading the Quantum 3 SDK
What's New
- CodeGen: Prototype adapters now have
partial void ConvertUser
method if user needs to include their own convert logic
Changes
QuantumUnityDBImporter
does not stop processing assets after an asset causes an error- Package: Quantum/Game/Core folder is gone, contents moved to Quantum/Game
- Package: Quantum/Game/Core/Core.cs moved to Quantum/Game/QuantumGameCore.cs
- Migration: TransferAssetBaseGuidsToAssetObjects won't perform any destructive operation unless each and every
AssetBase
andAssetObject
scripts are ready for the operation - Migration: CodeGen will run on .qtn changes during migration, with the same options as initial CodeGen
- Package: Hierarchy of
Quantum/Editor
folder simplified
Bug Fixes
- Fixed: RealtimeAppIds are still shown in the PhotonServerSettings inspector when not null
- Fixed: An issue that caused the simulation to assert with a unrelated error after causing an error when creating systems with the SystemsConfig asset
- Fixed: Legacy
AssetRefT
not being registered in MemoryLayoutVerifier - Fixed:
[Flags]
attribute usage in qtn without being fully qualified - Fixed: Migration: Addressable sections not checking for a legacy define
QUANTUM_ADDRESSABLES
- Fixed: Compilation errors with disabled Unity ai module
com.unity.modules.ai
- Fixed: Addressables did not build with migration enabled due to missing
#if UNITY_EDITOR
Build 1260 (Nov 09, 2023)
- Initial preview release