-
Notifications
You must be signed in to change notification settings - Fork 0
/
release_history.txt
5213 lines (3357 loc) · 273 KB
/
release_history.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# 2.1.8.1
## Stable
### Build 1434 (Apr 16, 2024)
**Bug Fixes**
- Fixed: GetDrawerTypeForType() errors for Unity 2022.3.23+
# 2.1.8
## Stable
### Build 1389 (Mar 18, 2024)
**What's New**
- The context `LayerInfo` is now exposed in `FrameThreadSafe.Layers` property, similarly to `Frame.Layers`
- `Session.IsDestroyed` and `QuantumGame.IsSessionDestroyed` properties to be able to check for destroyed sessions
- CodeGen: Support for casting in the attribute list. E.g.: `[DrawIf("SomeField", (long)SomeEnum.SomeValue)] Int32 IntField;`
- Set of core DLLs that increase max component count to 512. See Manual/Quantum ECS/Components/Max Component Count doc for details
- NavMeshRegions support 3D colliders during NavMesh baking
- Assertion error in Debug with meaningful message when LUTs are not loaded and trigonometric functions are called
- Added `OnSimulateBeginUser(Frame)` and `OnSimulateEndUser(Frame)` partial methods to easier extend `QuantumGame`
- Marking callback methods in `QuantumGame` as `virtual` (e.g. OnGameStart(), OnSimulate, ..)
- Added the optional paramter `arrayCapacity` to `RuntimeConfig.ToByteArray(RuntimeConfig config, int arrayCapacity = 8192)` and `RuntimePlayer.ToByteArray(RuntimePlayer player, int arrayCapacity = 8192)`
- `ColorRGBA.Lerp` and `.LerpUnclamped`
**Improvements**
- Layer properties in 2D and 3D colliders now clamp the value if outside the valid layer range
- Improved detection of degenerate triangles when baking static mesh colliders
**Changes**
- Upgraded Photon Realtime SDK to version `4.1.8.0`
- 2D and 3D PhysicsBody Force and Torque fields are now exposed as public getter properties
- Upgraded Custom Quantum Plugin SDK Newtonsoft dependency to `13.0.3`
**Bug Fixes**
- 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
- 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 navmesh baking that could cause wrongs borders being generated, another epsilon has been introduced on the `MapNavMesh.ImportSettings` called `FixTrianglesOnEdgesHeightEpsilon`, which is set to 0.05 as default
- Fixed: The sleep detection when the flag IsAwakenedByForces is enabled in 2D and 3D simulation for the Legacy Gauss collision solver
- Fixed: The sleep detection when the flag IsAwakenedByForces is enabled in 2D simulation for the collision solver Hybrid Jacobi and Legacy Gauss
- Fixed: An issue that could cause flipped navmesh border normals around overlapping 3D navmesh parts
- Fixed: Serialization issue in FrameMetaData that could cause a soft desync when expanding internal hash collections
- Fixed: Possible desync on late-joins when switching a Map and disabling the Physics Engine system before it updates to the new Map
- Fixed: An issue that could cause an exception inside the QuantumStats script after a plugin error during late-joining
- Fixed: QuantumPrefabAssetImporter: long import times for projects with a large number of addressables
- Fixed: `ComponentSet.IsSubsetOf` not computing the returned value correctly
- Fixed: An issue that caused `Frame.GetPlayerData()` to return valid data before the `OnPlayerData` callback was called and potentially causing a desync
- Fixed: Issues that could cause the player input flags to be PlayerNotPresent during the OnPlayerDataSet() callback
- Fixed: Heap Allocation Tracker giving a false positive when adding shapes to a Compound and expanding the buffer
- Fixed: Issue in the 2D Polygon-Polygon overlap check that could cause DivisionByZero exceptions
- Fixed: Issue in 2D and 3D Physics that could cause queries and colliders that were touching but not penetrating to be ignored
- Fixed: Quantum Prefab assets initial import failing due to Resources not being yet accessible
- Fixed: An issue on the server that was introduced recently which caused an exception when disconnecting while the simulation is starting
- Fixed: Issues with broad-phase shape overlap and cast queries in case the internal query buffer had to expand, on the frame when that happened
- Fixed: An issue on the server that would cause redundant snapshot requests when heavily using commands at that time
- Fixed: An issue on the server that could cause player RPCs to be unreasonably delayed
- Fixed: Potential NullReferenceException on `MapData.DrawGizmos` due to math LUTs not being loaded
- Fixed: An issue in pathfinding that caused the `OnSearchFailed` callback to be only called for one agent, when multiple agent path seaches fail at the same tick
- Fixed: Possible memory corruption when using the 2D or 3D Physics Legacy Gauss-Seidel solver
- Fixed: An issue on the `FPAnimationCurvePropertyDrawer` that ignored the `WeightedMode` for keys
- Fixed: Issue in the volume computation of 3D boxes, which could affect the inertia tensor of dynamic bodies with compound-shape colliders that included box shapes
# 2.1.7
## Stable
### Build 1164 (Jun 14, 2023)
**Changes**
- `Map.StaticColliders3DTriangles` is now a `SortedDictionary` instead of a `Dictionary`, so triangle sets are inserted already sorted by their mesh collider ID
- Upgraded to Photon Realtime `4.1.6.25` (05. June 2023)
**Bug Fixes**
- Fixed: An issue that could cause allocation-too-large exceptions when a large number of entities were destroyed or had components removed on a single frame
- Fixed: An issue that could cause Instant Replays to be initialized with the current state of the colliders instead of the state they had when the frame copy was created
- Fixed: An issue that broke the compilation of the `UIRoom.cs` script when creating a component named `Player`. To apply the fix also import `quantum_demo.unitypackage`
- Fixed: An issue on the plugin that sent outdated input to connecting clients when running a very low simulation time
- Fixed: An issue on the plugin that could cause PlayerConnected signals to be missed on the clients when disconnecting and joining a new player at the exact same tick
- Fixed: Serialization issue on QDictionary and QHashCollection (introduced on v2.1.6)
- Fixed: Multi-object editing of `EntityPrototype` components when `Entity Component Inspector Mode` is set to a value different than `Show Mono Behaviours`
# 2.1.6
## Stable
### Build 1155 (May 11, 2023)
**What's New**
- `QuantumEditorSettings.MaxArraySizeForInspector` - if an array's length exceeds the value (1000 by default), it will not be expandable in the Inspector
- Memory allocation tracking tool for the Frame Heap, which can detect memory leaks and trace allocations. The tool can be enabled in the Simulation Config (Debug mode only, disabled by default)
- Debug assertions to check if 2D and 3D Linecast queries have squared magnitude in the FP useable range, logging parameters if an overflow happens
- Profiling samples when performing Frame copies (Host Profiler only)
**Bug Fixes**
- Fixed: Inaccuracies in the 3D EntityView rotation error computation that could cause jitter in the resultant view rotation values
- Fixed: Issue in CCD collisions against 3D mesh colliders that would cause the body velocity to not be partially integrated up to the first time-of-impact
- Fixed: `QuantumPrefabAsset` not unloading properly
- Fixed: Issue when enabling or disabling toggleable static colliders that could cause multiple colliders to be (en/dis)abled when modifying the state of one (bug introduced on v2.1.5)
- Fixed: `RNGSession.NextInclusive(FP, FP)` resolution being always 16 bits
- Fixed: Support for generic assets with `unmanaged, Enum` constraints
- Fixed: Multiple simultaneous calls loading the same Addressable asset ending up in exceptions
- Fixed: Enforce Windows-style slashes in auto-generated nuget.config when code integration is used
- Fixed: Physics OnExit trigger callback not being called if the entity had a trigger collider and the static was not trigger
# 2.1.5
## Stable
### Build 1144 (Mar 14, 2023)
**What's New**
- `UnityDB.FindAssetForInspector(string path)`
**Improvements**
- Reduced the stack frame size used by the 3D box-box narrow collision check
**Changes**
- When baking 2D static edges, if the edge is degenerate (zero length), a warning will be logged and the edge will not be baked
**Bug Fixes**
- Fixed: 3D broad-phase shape cast API `AddShapeCastQuery` query options parameter (optional) having `ComputeDetailedInfo` as default value instead of `HitAll`
- Fixed: Desync when resetting to a snapshot with disabled static colliders from a map that is different from the map initially loaded by the resyncing client
- Fixed: Soft memory leak inside the Frame heap when allocating new QLists
- Fixed: Resolve PluginDisconnect callbacks when using the MultiClient scripts
- Fixed: Typo in `Map.StaticColliders2D` and `.StaticColliders3D` tooltips
- Fixed: Debug assertion checks for null QBuffer Ptr fields
- Fixed: Fixing obsolete warning when using Unity 2022
# 2.1.4
## Stable
### Build 1137 (Jan 25, 2023)
**What's New**
- `AssetObjectConfigAttribute.GenerateAsMainScript` - setting to false will add ".Partial" suffix to the generated file and remove inheriting from the base class. User needs to provide their own script matching the `AssetBase` script's name
- `EntityComponentConfigAttribute.GenerateAsMainScript` - setting to false will add ".Partial" suffix to the generated file and remove inheriting from the base class. User needs to provide their own script matching the `EntityComponentBase` script's name
- Component type name to exception thrown from ComponentDataBuffer
- Component type info to exception thrown from component block iterator
- `QUANTUM_VSINTEGRATION_ENFORCE_RELEASE_CONFIGURATION` - defining it while using `MergeWithVisualStudioSolution` option will add `Release` configuration to the generated solution, if missing
- `EndOfLineCharacters` option to `quantum.codegen.host.exe.config`: an ability to control EOL characters for the codegen. If unspecified, uses whatever `TextWriter`'s default is. See documentation for details
- QuantumCodeIntegration: ability to override paths to mono/dotnet with `QUANTUM_CODE_INTEGRATION_MONO_PATH` and `QUANTUM_CODE_INTEGRATION_DOTNET_PATH` env variables
**Improvements**
- `QuantumTaskRunnerJobs` now implement `IDisposable`, which is called when the Frame Context is disposed, preventing the task runner from holding references to the disposed session's delegates
- Improved the accuracy of the inertia tensor of 2D and 3D physics bodies with compound shapes that only have a single primitive shape
**Changes**
- QuantumCodeIntegration: For MacOS and when .NET Core is in use, `dotnet` command line tool will be used to run Unity code generation
**Bug Fixes**
- Fixed: `AssetBase` generated for `SimulationConfig` is now suffixed with ".Partial" to avoid name clashes in Unity 2022.2.x
- Fixed: `EntityComponent` scripts for some built-in components are now merged into `AssetTypes.Partial.cs` to avoid name clashes in Unity 2022.2.x
- Fixed: Missing serialization of component data buffers' pending removal count.
This issue could cause assertion exceptions in Debug and a desync in the `Frame.ComponentCount` if Commit Commands Mode is set to `OnFrameSimulationBegin` in the Simulation Config and Remove or Destroy commands were issued during the frame being serialized
# 2.1.3
## Stable
### Build 1134 (Dec 19, 2022)
**What's New**
- API documentation module for culling-related methods and systems
**Improvements**
- Increased the maximum size supported for the total frame heap memory from 2GB to 4GB
- A warning message is logged in Debug mode if allocating more than 2GB (previously would crash Unity) and an `ArgumentOutOfRangeException` is thrown if attempting to allocate more than 4GB
- Default `CustomQuantumServer` now wraps the session container servicing logic in a try-catch and destroys the container if an exception is thrown
- `Transform3D.Rotate` methods now normalize the resultant quaternion by default, avoiding rounding towards zero over multiple operations. An optional parameter can be used to disable the normalization
- Improved the API documentation of culling methods
- Map's Physics World Size is now ensured to be in a valid range also when the asset is loaded and not only on the Editor
- Assertion exception message when the 3D Physics tries to initialize an entry with zeroed quaternion as rotation now states the entity ref or the static collider index of the offending entry
**Bug Fixes**
- Fixed: Inability to edit layer 31 in `SimulationConfigAsset` editor
- Fixed: "Do not use ReadObjectThreaded on scene objects!" error when importing scenes (.unity) in any of `AssetSearchPaths` locations
- Fixed: Unity crash due to size overflow in allocator when trying to allocate or clear more than `int.MaxValue` bytes (usually when trying to allocate a very large number of frame heaps)
- Fixed: Serialization issue on collision info structure used to track OnEnter/OnExit physics callbacks, which could cause desyncs
- Fixed: An issue that caused the `NavMeshAvoidanceObstacle` velocity not to be recognized for avoidance calculations in some cases
- Fixed: Assertion exception in the 2D and 3D physics when initializing the simulation with disabled `AllowCCD` and enabling it in runtime
- Fixed: An issue on `QuantumRunner` that caused it to not be accessible by `ShutdownAll()` after getting disconnected by the plugin (e.g. Snapshot request timed out). Removing the runner from the static registry was moved from Dispose() to OnDisable(). This changed the runner shutdown handling slightly and can be disabled by adding `QUANTUM_DISABLE_RUNNER_FIX` to the Unity scripting defines (to all required platforms)
- Fixed: An issue that caused the runner to shutdow twice when stopping a `QuantumInstantReplayDemo`
- Fixed: An issue that caused a NullReferenceException when updating a destroyed session
# 2.1.2
## Stable
### Build 1129 (Nov 01, 2022)
- Upgraded the version of Photon Realtime shipped with the Quantum SDK to 4.1.6.18f2 (23. September 2022 - rev6505)
**What's New**
- `RingBufferInputProvider`, an Input Provider that reuses a fixed number of input sets to feed inputs to a simulation. Used by default in the custom Quantum plugin sample
- `QuantumGameFlag` that can disable interpolatable states in the simulation, reducing memory allocation and frame copies when there is no use for interpolation (e.g. Spectator and Replay console runners and Server simulations)
- 2D and 3D Physics Bodies `MassInverse` properties, a way to access and modify the value directly as it is stored on the component (inverse mass)
**Improvements**
- The distribution of generated hash codes when a large number of `GetHashCode` methods must be code-generated
- Reduced the allocation of frame heaps when the game mode does not need to allocate all frames instances (e.g. Replay, Server sim and console applications)
**Changes**
- On Unity 2019 and newer, Quantum modules are no longer toggled in the Quantum Editor Settings, but are now defined in the `PhotonQuantum` and `PhotonQuantumEditor` assembly definitions.
If these asmdefs are removed from the project, the following modules must be explicitly added to the Project Settings in order to be used: `QUANTUM_ENABLE_PHYSICS2D`, `QUANTUM_ENABLE_PHYSICS3D`, `QUANTUM_ENABLE_AI` and `QUANTUM_ENABLE_TERRAIN`
- Unity 2018 - Addressables packages references are not automatically added when toggling `QUANTUM_ADDRESSABLES` define
**Bug Fixes**
- Fixed: Code-gen issue that could cause an `IndexOutOfRangeException` if a large enough number of `GetHashCode` instances were emitted
- Fixed: Issue in the 2D and 3D Physics engines when creating physics entries for a compound shape and the entries buffer had to be expanded, which could cause an access to memory that had already been disposed
- Fixed: Custom plugin sample not including the server flag in the game flags, which could cause server-only events to not be raised on the server simulation
- Fixed: Missing `Photon.Deterministic.DeterministicLog.InitForConsole()` calls in the default console runners and session containers
- Fixed: `EntityViewUpdater` not performing smooth prediction error correction in `Spectator` mode (rarely necessary) and wrongly performing this correction if the simulation was forced to run in Lockstep
- Fixed: An issue in the 2D and 3D KCC clamping of `MaxSpeed` if the current `Velocity` is in the opposite direction of the intended movement
- Fixed: `TooltipAttribute` being ignored for `FPAnimationCurve` fields
- Fixed: Quantum shortcut Unity window error message spamming
# 2.1.1
## Stable
### Build 1122 (Sep 26, 2022)
**What's New**
- Added `USER_CODE.txt` files to highlight directories inside the Quantum Unity scripts hierarchy that can be used for user generated code that has to be inside the Quantum assembly definition (partial asset classes for example)
- Inspector tooltips on `EntityView` prediction error correction settings
**Changes**
- PhotonQuantum.asmdef and PhotonQuantumEditor.asmdef now auto-detect the presence of Addressables and core modules for Unity 2019.1 and newer. Older version still need to use the toggles in `QuantumEditorSettings` and global defines
**Bug Fixes**
- Fixed: Prototype/View assets of a new prefab not being referenceable without AssetDB refresh
- Fixed: "Unreachable code detected" warning when physics modules are disabled
- Fixed: 2D Quantum static polygon colliders marked to be baked as static edges now also have their gizmos drawn as static edges
- Fixed: Potential `DivideByZeroException` on 2D Physics' Circle-Edge narrow check if the edge extent is small enough but not zero
- Fixed: Static physics callbacks only being called if both the respective static and dynamic callback flags were set
# 2.1.0
**Breaking Changes**
- Unity: Editor code has been refactored and, to simplify future updates, some files have been merged. That means that any changes made to the editor code will need to be reapplied, if necessary. That said, extending inspector and handling Quantum attributes is *much* simpler now and can be done with PropertyDrawers (check LayerAttributeDrawer or RangeAttributeDrawer).
- Unity: Quantum scripts are now contained in `PhotonQuantum` and `PhotonQuantumEditor` assemblies using Assembly Definitions. This allows you to use Quantum in custom and test assemblies, but forces a different approach when it comes to extending Quantum itself: all partial classes need to be a part of `PhotonQuantum` assembly, types from global assembly can't be used and `Assembly Definitions References` list needs to be updated to access types defined in other assemblies. If the transition proves problematic, removing `PhotonQuantum.asdef` and `PhotonQuantumEditor.asmdef` will make Quantum global again. Note that the new assemblies have a missing reference to `PhotonQuantumCode` - this is a placeholder in case you go for full code integration (explained later on) and should not cause any issues.
- Unity: Changed generated Editor scripts location to `quantum_unity/Assets/Photon/Quantum/Editor/Generated`. Old scripts (located in `quantum_unity/Assets/Photon/Quantum/Generated`) need to be removed by hand.
- Unity: `QuantumInstantReplay` has been reworked and simplified. If your code depends on the old implementation, use `Quantum.Legacy.QuantumInstantReplay` instead.
- Unity: `Map` and `NavMesh` assets no longer create extra binary files to be loaded with `IFileLoader`. They use `BinaryData` assets instead. Rebake all your maps with `Quantum/All Scenes` or `Quantum/All Enabled Scenes`. Old binary files will be removed in the process.
- Unity: Removed `QuantumEvent`/`QuantumCallback.Subscribe` parameter `excludeGameMode`. Use `gameMode` and `exclude` parameters instead.
- `AssignEntityRefs` prototype materialization phase has been removed. `EntityRef` fields are now resolved during the `Materialize` stage. This means that any changes to `EntityRef` fields performed in `ISignalOnComponentAdded` signal or in `MaterializeUser` partial method will no longer be overwritten. Remember that just like before, in case of map prototypes querying other entities' components is only safe after all prototypes have been materialized (`ISignalOnEntityPrototypeMaterialized`).
- DrawIfAttribute now uses enum value instead of enum index, if it points to an enum property.
- The navmesh binary data format has changed (pre-calculation of triangle normals for projection): Re-bake all your navmeshes.
- The navmesh binary data file has been converted into a Quantum asset (`BinaryDataAsset`): Relink the new asset files in your debug `MapNavMeshDebugDrawer` instances (if you have any) and remove any leftover navmesh .bytes files from your project.
- Removed the pathfinder radius feature: Different agent radii are nice but they were taking a lot of extra effort and in the end caused more trouble than we saw potential gain. It is still possible to achieve a similar effect by creating different navmeshes for different radii. This is also a much cleaner solution as it closes paths for bigger agents entirely, which was not possible with the radius feature before. Caveat: the avoidance radius needs to be set explicitly now because it does not have the Radius parameter to fall back to: Consider noting down the Radius values in this case before the upgrade or retrieve from a source control diff afterwards.
- Navigation agents that are starting off the navmesh (due to a disabled region for example) are teleported to a valid (closest) position inside the navmesh when they begin their path. Previously they were trying to get out of the non-navmesh zone gracefully, but that was not possible all the time.
- Some Navigation API changes will result in compilation errors and unfortunately need to be fixed by hand while other API changes are marked in code by the `Obsolete` attribute.
- The new Realtime version restricts access to the auth token. As a guideline reconnecting after losing the connection object should always pass through the nameserver again.
- The `SessionContainer` class has been refactored and will show `obsolete` warnings. Use the class from the `Quantum.Legacy` namespace if you are unable to adapt the changes. This change also reflects in the custom server plugin package, checkout the newest version to see how to set up the session container.
- We upgraded Photon Realtime used by the client to version 4.1.5.1. The new Realtime version restricts access to the auth token. As a guideline reconnecting after losing the connection object should always pass through the nameserver again.
- We upgraded the `PhotonHivePlugin.dll` used by the Quantum plugin to version 1.1.0.24499. For Quantum Cloud customers nothing changes but Enterprise customers that want to run this new version need to upgrade their private cloud to Photon Server v5 RC1 (https://doc.photonengine.com/en-us/server/current/plugins/plugins-whats-new#plugins_api_version_upgrade).
```csharp
NavMeshPathfinder {
// OLD
public FPVector2 Target
public FPVector2 InternalTarget
public FPVector2 GetWaypoint(FrameBase f, int index) { }
public void SetTarget(FrameBase f, FPVector2 target, NavMesh navMesh) { }
// NEW
public FPVector3 Target
public FPVector3 InternalTarget
public FPVector3 GetWaypoint(FrameBase f, int index) { }
public void SetTarget(FrameBase f, FPVector3 target, NavMesh navMesh) { }
}
```
`OnNavMeshWaypointReached` changed the waypoint parameter type from `FPVector2` to `FPVector3` inside the callback signature
**What's New**
- Shape Casts (Regular and Broadphase Queries)
- Inertia Tensors for 3D Physics Bodies
- New Collision Solvers: improved performance and parallelism
- Physics Colliders now have an `Enabled` property, so that disabling a collider does not need to incur in removing the component anymore.
- We added proper 3D support for NavMeshes: When using a Transform3D component the navmesh agents will be able to fully move inside the 3D navigation mesh under and over bridges for example. The input target position is passed in 3D and will be projected onto the closest navmesh triangle vertically-wise.
The navigation agent will move on the navmesh by default. But for better visual results there should be static Quantum colliders that the agent can use to vertically position itself on. The heightmap, which is generated alongside the Unity navmesh, can **not** be utilized (access is not exposed).
- Room spectating support: the simulation can be joined with 0 local players to implement spectating clients that cannot influence the simulation
- Quantum Asset Database can optionally be baked into quantum.code.dll to simplify custom server deployment. Export the AssetDB from Unity to `quantum_code/quantum.code/db.json`. The custom plugin project will prioritize loading from disk first and upon failing to find the db file will try to load internal one.
- The multi client test runner similar to the DebugRunner can load multiple online clients into a scene controlled by one Unity Editor (`QuantumMutliClientRunner`)
- Dynamic assets can now be searched by a path. Variants of `Frame`/`FrameThreadSafe.FindAsset` accepting a path now have an additional parameter: `DatabaseType`. Dynamic asset's path needs to be unique only among other dynamic assets.
- Unity: Quantum State Inspector has been completely reworked. The look & feel is now much closer to Unity Hierarchy and Inspector windows. In addition to entities and globals you can now inspect session settings and dynamic assets. Entities and components can now be added and removed from within the inspector, provided `quantum.code` has been built in `Debug` mode.
- Native Strings `QString<N>` and `QStringUtf8<N>` DSL types with `N` being the total size in bytes minus 2 bytes used for bookkeeping, e.g. `QString<64>` will use 64 bytes for a string with a max byte length of 62 bytes (up to 31 UTF-16 characters)
- DSL: `client` & `server` event keywords added. Events marked with `client` are culled immediately when simulation is running as a server plug-in. Marking with `server` has the opposite effect.
- DSL: `FreeOnComponentRemoved` attribute: a way to auto-free lists and dictionaries. Decorating a field with it will emit clean up code that gets ivoked when component gets removed, after `ISignalOnComponentRemoved`. If used on a struct's field, then the code will be emit and invoked for all components that use the struct.
- `Frame`/`FrameThreadBase.TryFindAsset` - a way to look for an optional asset without polluting output logs with missing assets errors
- `quantum.code` project source files can now be entirely moved to the Unity project. Read `tools/codeintegration_unity/README.md` for details.
- `BinaryData`: an asset hosting binary data with a support for lazy decompression.
- Math: `FPMath.SinCos` (much faster than calling `FPMath.Sin` and then `FPMath.Cos`).
- Math: Logarithms (`FPMath.Log2`, `FPMath.Log10`, `FPMath.Ln`, `FPMath.Log`, `FPMath.Log2FloorToInt` and `FPMath.Log2CeilingToInt`).
- Prototypes: Inspector support for dictionaries.
- `AssetGuid.TryParse`
- `EntityRef.TryParse`
- `RNGSession.NextInclusive` and `RNGSession.Peek`.
- `FrameContextUser.ConstructUser` and `FrameContextUser.DisposeUser` partial methods.
- `Frame.Serialize` overload that takes an external byte array to avoid majority of internal allocs
- `DeterministicSession.MaxVerifiedTicksPerUpdate` - a way to limit how many verified simulations are allowed to happen in a single `Update`.
- `JsonAssetSerializerBase`, `QuantumJsonSerializer` and `QuantumUnityJsonSerializer` auto-compression of `BinaryData` (`CompressBinaryDataOnSerializationThreshold` and `DecompressBinaryDataOnDeserialization` properties)
- Unity: `BinaryDataAsset`: a wrapper for BinaryData assets. Supports compression and can point to a TextAsset as their data source.
- Unity: `QuantumMapDataBakeFlags`: `BakeMapPrototypes` and `BakeMapColliders` flags can be used to enable/disable baking of prototypes/colliders to speed up the auto-bake process.
- Unity: `QuantumEvent/Callback`: an optional `DispatchableFilter` argument to `SubscribeManual`
- Unity: `QuantumEvent/Callback`: an optional `onlyIfEntityViewBound` argument to `Subscribe` (makes sure the handler will only be invoked if `EntityView` on the listener has `EntityRef` assigned. `GetComponentInParent` is used to get the `EntityView` instance)
- Added `PositionOffset` and `RotationOffset` to most of the Quantum static collider scripts (these offsets are baked into the map)
- Added support for the `Inspector.Reorderable` attribute inside partial AssetObject implementations to display arrays as reorderable lists in the Unity inspector
- Added an Asset Database Windows toggle inside Quantum shortcuts
- New inspector attributes: DisplayName, ReadOnly, Range, ComponentTypeName
- XML API documentation files alongside core and PhotonDeterministic dlls (assemblies folder). If you don't want them to be copied into the Unity Quantum assemblies folder add this line to each configuration property group (debug, release) in your quantum.code.csproj `<AllowedReferenceRelatedFileExtensions>.pdb</AllowedReferenceRelatedFileExtensions>`
- Quantum Spectator project showcases a way to run the Quantum simulation online with Unity.
**Changes**
- Unity: CustomEditorsHelper has been deprecated, use QuantumEditorGUI instead.
- Math: `FP.Sqrt`, `FPVector3.Normalize` and `FPVector2.Normalize` speed up and precision increased
- Physics: First-hit-only Raycasts' performance improvements
- Synced events are culled immediately when a frame is predicted
- `quantum.codegen.unity` now checks if a file needs an update instead of overwriting it each time
- Unity: Addressables can now be enabled for all platforms only (in `QuantumEditorSettings`)
- Unity: prototypes' lists and dictionares fields that have not been decorated with `FreeOnComponentRemoved` are decorated with a reminder that they need to be freed manually.
- Removed `IFileLoader` and all its implementations
- `AssetGuid.ToString()` format changed to 16 digit hexadecimal number in brackets, e.g. `[0012345789ABCDEF]`
- `EntityRef.ToString()` format changed to `E.IIIII.VVV` format (I - index, V - version), e.g. `E.00123.001`
- `FPSinCos.bytes` replaced both `FPSin.bytes` and `FPCos.bytes`; since Unity packages can't handle file removal, `FPSin.bytes` and `FPCos.bytes` are now 0-sized and can be safely removed
- Removed `PROFILER_REPORT` define constant from the `quantum.code` project (`QUANTUM_REMOTE_PROFILER` on Unity's side remains)
- Unity: Scene loading has been reworked and is now controlled with `SimulationConfig.AutoLoadSceneFromMap` enum. `UnloadPreviousSceneThenLoad` is the new default. The `Legacy` way of loading scenes can still be selected but due to bugs it is discouraged.
- Unity: We added a new menu item `Export Asset DB` and kept the old way of exporting as `Export Asset DB (Through UnityDB)`. The new export will properly locate all assets files using the same process as the Asset Resource object generation instead of locating the files through the UnityDB.
- Unity: AssetBase has a new virtual member: `PrepareAsset()` which is called from `Loaded()`. The code from the Loaded method in `EntityPrototypeAsset` and `MapAsset` have been moved to `PrepareAsset()` because the latter is required to be called when exporting the Asset DB. Make sure to move your code into PrepareAsset() when you use the exported Asset DB.
- Renamed FixedArrayAttribute to ArrayLengthAttribute
- `ComponentTypeSelector.QualifiedName` and `ComponentTypeSetSelector.QualifiedNames` still work, but have been made obsolete. Use ComponentTypeName/ComponentTypeNames instead.
- `JsonAssetSerializeBase` uses Assembly Qualified Names only for user assets defined outside of `quantum.code`; for all other assets it uses `Type.FullName`. This change is backwards-compatible.
**Changes In Navigation**
- Improved quality and performance by updating the **pivot point calculation** for path-finding through triangles when Path Quality is set to `Good` or `Best` (toggle on `DrawPathfinderRawPath` in Editor Settings to observe)
- Under some conditions it is preferable for avoidance agents to be able to **reduce their speed** to convey a more natural avoidance behavior. Of course, this is not advisable for most player controlled units and can be opted in inside NavMeshAgentConfig
- The navmesh **cost** (weights) set under Unity Navigation Areas is exported and used by Quantum regions for heuristic calculations: check out `Cost` in the `MapNavMeshRegion` script
- **NavMeshAgentConfig**
- Removed `Radius` (not used anymore)
- Removed `ClampAgentToNavmeshRadiusThreshold` (not needed anymore)
- Renamed `FindValidTargetCellRange` (integer) into `AutomaticTargetCorrectionRadius` (FP) for hopefully more clarity. Convert by finding out how one navmesh cell width translates to absolute distance.
- Added `AvoidanceCanReduceSpeed` toggle (default is off)
- Added `VerticalPositioning` selection to the steering section
- **SimulationConfig.Navigation**
- Added `HeightThresholdForAvoidance` to filter out agents that are too far from each other (only required for 3D navigation)
- Added `HeightThresholdForWaypoints` to support waypoint detection on different vertical layers (only required for 3D navigation)
- **API**
Old method signatures have been marked `Obsolete`. Please update them.
- **`Navigation/PathFinder.FindPath()`**
- Removed `minDistanceToBorder` parameter
- Changed Int32 `findValidTargetCellRange` to FP `automaticTargetCorrection`
- Now returns a `FindPathResults` object which gives more information about what went wrong (see below) or upon `Success` gives access to the calucalted path:
```csharp
public struct FindPathResult {
public enum Code {
Success,
InvalidStartPosition,
InvalidEndPosition,
NoPathFound
}
public Code Result;
public FPVector3 CorrectedStartPosition;
public FPVector3 CorrectedEndPosition;
public int PathSize { get };
public PathVertex[] Path { get };
}
```
- **`Navigation/NavMesh.LineOfSight()`**
- Requires `FPVector3` inputs
- We changed the algorithm to use navmesh triangle funnelling instead of raycasting the borders, which conveniently also works for 3D and is faster.
- `Raycast2D()` (new method) is the former `LineOfSight()` implementation which is practically a raycast against the navmesh borders. This only works in 2D!
- **`NavMesh`**
- `MovePositionIntoNavmesh()` removed `agentRadius` and removed `radiusThreshold`
- `FindTriangle()` renamed method to `FindTriangle2D()`
- `FindClosestTriangle()` has been completely changed to support 3D:
```csharp
bool FindClosestTriangle(FPVector3 sourcePosition, FP radius, NavMeshRegionMask regionMask, out Int32 triangle, out FPVector3 correctedPosition, MailboxSet8 mailbox = null)
```
- (new) `NavMesh.GetHeightAtTriangleRaw()` use this to project the y-position onto a 3D triangle, the method expects that the 2D projection of the point is inside the 2D projection of the triangle.
- (new) `NavMesh.FindRandomPointOnTriangle()` use this for an excellent randomization of a point inside one triangle.
**Removed**
- Removed the obsolete quantum.systems project (since 2.0) from the quantum_code solution
- Removed the `docs` folder and the quickstart guide while moving the API doc file into the root folder of the SDK, please refer to the online docs for starting guides
- Removed the unnecessary `PROFILER_REPORT` define constant from the quantum.code project (QUANTUM_REMOTE_PROFILER on Unity's side remains)
- Removed `DebugGizmoSize` from Navigation.Constants, the scaling is smartly matching the agent sizes
**Bug Fixes**
- Replays now work for late-joiners
- `FixedArray<T>` contents are used when calculating hash codes of owner structs (instead of just the pointer)
- Fixed the UI rendering of the Quantum shortcuts to better accommodate a wider layout
- Fixed the debug rendering of inactive navmesh region borders
**Shape Casts Details**
2D and 3D Shape Casts are now available as Regular and Broad-phase queries for all dynamic shapes supported. Internally, a custom GJK-based algorithm is used and new settings are available in the `Physics.GJKConfig` section in the Simulation Config. The new settings are intended to allow a trade-off between accuracy and performance, with the default values being a balanced compromise for regularly sized shapes:
- **Simplex Min/Max Bit Shift**: Allows better precision for points in the Voronoy Simplex by progressively shifting their raw values, avoiding degenerate cases without compromising the valid range of positions in the Physics space. Consider increasing the values if the scale of the shapes involved and/or the distance between them is very small.
- **Shape Cast Max Iterations**: The max number of iterations performed by the algorithm while searching for a solution below the hard tolerance. Increasing it might result in more accurate results, at the cost of performance in worst-case scenarios, and vice-versa.
- **Shape Cast Hard Tolerance**: An iteration result (closest distance between the shapes) below this threshold is acceptable as a finishing condition. Decreasing it might result in more accurate results, at the cost of more iterations, and vice-versa.
- **Shape Cast Soft Tolerance**: A shape cast resolution that fails to find an acceptable result below the defined Hard Tolerance within the Max Iterations allowed will still return positive if the best result found so far is below this soft threshold. In these cases, increasing this threshold enhances the probability of false-positives, while decreasing it enhances false-negatives.
## F1
### Build 1116 (Sep 14, 2022)
- Marking 2.1.0 final
## RC2N
### Build 1115 (Sep 13, 2022)
**What's New**
- Asset create shortcut to create a `3D>Character Controller Entity`
### Build 1112 (Sep 08, 2022)
**Improvements**
- When playing on Editor, 2D Joints gizmos are now drawn by polling the frame state, similarly to how it is done for other components
**Bug Fixes**
- Fixed: An issue with the construction of islands in the 3D Physics Engine when using joints (introduced on build 1097)
### Build 1111 (Sep 07, 2022)
**Changes**
- `QuantumRunnerLocalDebug` now hides the `Save and Reload` GUI button by default (toggle `DisplaySaveAndReloadButton` to change)
**Bug Fixes**
- Fixed: The bake flag `QuantumMapDataBakeFlags.ClearUnityNavMesh` now actually clears the global navmesh (when NavmeshSurfaces are not used) after the baking
- Fixed: "namespace modification was detected" warning for `QuantumCustomEditors.cs`
### Build 1110 (Sep 05, 2022)
**What's New**
- `OnReleased` overridable method to all Quantum Events, called when the event instance is released to its internal pool
- The AssetDBInspector window got a search field (search for guid and filename) and improved its gui performance
**Changes**
- The client now sends non-reliable messages as `Unsequenced` which will slightly reduce the bandwith and improve the network performance
### Build 1109 (Sep 02, 2022)
**Bug Fixes**
- Fixed: An issue in the navigation introduced with build 1100 that affected `SetTarget()` with `AutomaticTargetCorrection` disabled. For 3D always enable `AutomaticTargetCorrection`
### Build 1108 (Sep 01, 2022)
**What's New**
- Added feedback on the inspector when default Unity navmesh areas are selected for Quantum Region conversion
**Bug Fixes**
- Fixed: "Failed To Load Script Object" message in the inspector for qprefabs
### Build 1105 (Aug 30, 2022)
**Bug Fixes**
- Fixed: Mismatched enum backing type
- Fixed: Using imported types as dictionary keys
### Build 1104 (Aug 30, 2022)
**What's New**
- Alternative, on the Map asset, to serialize the static triangles metadata or to compute it during deserialization
**Bug Fixes**
- Fixed: Quantum codegen tool parameter usage for the `codeintegration_unity` (introduced in build 1102)
### Build 1103 (Aug 26, 2022)
**What's New**
- 2D and 3D trigger callbacks can now be ignored through the `IgnoreTrigger` property in the callback info
**Bug Fixes**
- Fixed: Physics OnExit callbacks being called even if all collisions were ignored
### Build 1102 (Aug 25, 2022)
**What's New**
- In Debug mode, the Quantum simulator now raises a warning when resetting the frame state to one whose number is smaller than the rollback window
- Overloads to `Photon.Deterministic.Log.Info`, `.Warn` and `Error` methods that explicitly accept 1-3 arguments and can avoid the implict allocation of arguments' array
- Quantum codegen tools now support `--help` command to list their usage and `--version`
### Build 1101 (Aug 24, 2022)
**What's New**
- Frame `IsCullable` method to check if an entity can be culled during predictions if out of a defined prediction area
**Changes**
- `FrameContext.InPredictionArea` is now marked as `virtual` and can be overriden with a custom implementation
- `Schedule` method overrides on built-in multi-threaded systems are no longer marked as sealed
### Build 1100 (Aug 22, 2022)
**Bug Fixes**
- Fixed: Changed `Navmesh.FindClosestTriangle()` to always prefer triangles that fit the x,z position while inside the provided `radius`. The fixes issues where agents get displaced on a 3D navmesh when starting a path. If `automaticTargetCorrection` is set to `false` no correction is attempted anymore., which not recommended for 3D navmeshes
### Build 1099 (Aug 22, 2022)
**Bug Fixes**
- Fixed: Static colliders' `Settings` field being null after `AddComponent`
### Build 1097 (Aug 18, 2022)
**Bug Fixes**
- Fixed: An issue on physics callbacks of CCD collisions where ignoring the first non-trigger collision would not allow subsequent ones to have their callbacks called
- Fixed: QuantumJsonSerializer not recognizing NaN values for float and double fixed-size buffers
### Build 1096 (Aug 17, 2022)
**What's New**
- Float and double fixed-sized buffers support for QuantumJsonSerializer
**Bug Fixes**
- Fixed: An issue that could cause an `AssertException` inside the `AvoidanceBroadphase` when using world positions > 500
### Build 1095 (Aug 16, 2022)
**What's New**
- `Log.Info`, `.Warn` and `.Error` overloads that accept a string format and an explicit number of parameters (1-3) and avoid implicit array allocations
**Changes**
- The physics engines will now ignore and log a warning in Debug mode when an entity's physics collider has a `None` shape
**Bug Fixes**
- Fixed: Local simulation (offline) stalling if feeding the simulator with a delta-time greater than rollback-window (usually triggered when using `Default` as `SimulationConfig.DeltaTimeType` )
- Fixed: An issue that could cause errors on the navigation broadphase when `AvoidanceRanges` were 0 or less
### Build 1094 (Aug 15, 2022)
**What's New**
- Navmesh support for `Transform2DVertical`
### Build 1093 (Aug 12, 2022)
**Bug Fixes**
- Fixed: Fixing an issue with the navmesh agent using `VerticalPositioning.Physics` that caused the raycast always start with height 1 and now uses the navmesh `MinAgentRadius`
### Build 1092 (Aug 11, 2022)
**Bug Fixes**
- Fixed: An issue with 3D navmesh agents using `MovementType.Transform` and `VerticalPositioning.None`, where the y value of the agent position was occationally modified
- Fixed: Correctly clear manually baked navmesh surfaces during BakeAll to avoid Unity namesh asset file duplications
### Build 1091 (Aug 10, 2022)
**Improvements**
- Reduced the upwards bandwidth usage on Quantum clients
### Build 1089 (Aug 09, 2022)
**What's New**
- `QuantumEditorSettings.ColliderGizmosStyle`, `StaticColliderGizmoStyle` and `JointGizmosStyle`
**Changes**
- `GizmoUtils.Draw()` methods do not change the color alpha anymore, `selected` will add a brightness highlight effect instead which is configurable by `QuantumEditorSettings.GizmoSelectedBrightness`
- Meaning of `DeterministicSimulator.FramesPredicted` changed from "How much is prediction ahead of verified state" to "How many predictd frames were simulated in last Unity update"
- Circle gizmos no longer displays wireframe
**Bug Fixes**
- Fixed: Interpolation jitter when simulation IsStalling = true
- Fixed: IsStalling flag now correctly returns true when simulation is stalling
### Build 1088 (Aug 08, 2022)
**What's New**
- The 2D and 3D physics solvers from v2.0 can now be used instead of the new solvers introduced on v2.1 by selecting `Legacy Gauss Seidel` in the `SimulationConfig.SolverType`
- `QuantumEditorSettings.DrawColliderGizmos` - a way to enable/disable gizmos for Quantum colliders
- FrameDiffer now displays the Photon nickname of each diff origin
**Bug Fixes**
- Fixed: `QuantumFrameDiffer` not attaching to CallbackChecksumErrorFrameDump callback in the Editor
### Build 1087 (Aug 05, 2022)
**Bug Fixes**
- Fixed: Issue in the 2D Physics collision solver that could cause miscomputations in the friction impulses applied during the collision resolution
### Build 1086 (Aug 04, 2022)
**Bug Fixes**
- Fixed: 2D and 3D Physics Joints serialization, which could cause desyncs when late-joining using a snapshot
### Build 1085 (Aug 03, 2022)
**Bug Fixes**
- Fixed: An issue that could cause static meshes to be baked with inverted normals if the world scale of the GameObject that holds the component has negative scale in an even number of axes
### Build 1084 (Aug 01, 2022)
**What's New**
- `FPVector3.UseableMin` and `.UseableMax`; and `FPVector2.MinValue`, `.MaxValue`, `.UseableMin` and `.UseableMax`
**Changes**
- `QHashSet` requested capacity on allocation is now automatically rounded up to the next prime number. This prevents issues with invalid capacities (<= 0) and improves hash distribution
### Build 1083 (Jul 26, 2022)
**Bug Fixes**
- Fixed: Not working interpolation of Transform2DVertical
### Build 1082 (Jul 23, 2022)
**Bug Fixes**
- Fixed: Issue in the 3D Hinge Joint that could cause the hinge axis constraints to not be correctly solved in some conditions, causing the hinge to slowly deviate from its anchor axis
### Build 1081 (Jul 22, 2022)
**Bug Fixes**
- Fixed: Race condition in the 2D and 3D Physics Engines when having dynamic bodies with compound shapes and running the simulation in multiple threads, which could also cause desyncs
- Fixed: Code-generated extention method for DSL flags enum `HasFlag` is now named `IsFlagSet`, preventing a fallback to `System.Enum.HasFlag` instead of the extension method, which should be used to prevent the generation of boxing allocation
- Fixed: Missing `using UnityEngine` statement on `QuantumUtils.cs` when using Unity 2019.2 or newer
### Build 1080 (Jul 20, 2022)
**What's New**
- `EnterPlayModeOptionsHandler` editor script - clears static fields upon entering Play Mode (Unity 2019.2+)
- Support for `Reload Domain` being turned off in `Enter Play Mode Options`
**Removed**
- `QuantumRunner.ClearSimulationStatics`
**Bug Fixes**
- Fixed: Scene not being activated after being loaded in some cases
- Fixed: Bug introduced on build RC2N 1076 that could cause temporary mismatch in the component counts and assert exceptions in Debug mode when committing remove-component or destroy-entity commands
### Build 1078 (Jul 19, 2022)
**Changes**
- By default, `Frame.ComponentCount` overloads now do not include entries with pending removal, i.e. removing a component or destroying an entity now have an immediate effect over the component count
### Build 1075 (Jul 14, 2022)
**Bug Fixes**
- Fixed: Compilation errors when activating the `DISABLE_QUANTUM_ASSET_INSPECTOR` define and introducing a new name for it: `QUANTUM_DISABLE_ASSET_EDITORS` (the old name will be removed in a later version)
### Build 1074 (Jul 13, 2022)
**Changes**
- Updated the xml docs NavMeshSignals
### Build 1073 (Jul 13, 2022)
**What's New**
- `ColorRGBA` property drawer
**Bug Fixes**
- Fixed: Navmesh related bug introcuded by last build (1072)
### Build 1072 (Jul 12, 2022)
**Changes**
- Marking `ColorRGBA` struct [Serializable] to be editable in the Unity inspector
**Bug Fixes**
- Fixed: OnEnabled being called on nested systems when disabling parent
### Build 1071 (Jul 11, 2022)
**Bug Fixes**
- Fixed: A couple of `string.Format()` allocation in debug quantum.code.dll
- Fixed: An issue with Navmesh Link baking while using `Quantum_XY`
### Build 1070 (Jul 07, 2022)
**Changes**
- New 2D and 3D KCC config asset instances created will now have the same settings as the respective default configs
- Default `QuantumTaskRunnerJobs` now has the `Schedule` method marked as virtual, so custom extensions can be more easily created
**Bug Fixes**
- Fixed: Issue in the 2D and 3D physics engines that could corrupt pointers internally when having colliders with compound shapes and expanding the physics entries buffer
### Build 1069 (Jul 06, 2022)
**What's New**
- `QuantumRunner.ClearSimulationStatics` - clears all static variables on the simulation side. This is intended to be used when addressing Domain Reloading issues
**Bug Fixes**
- Fixed: `DebugSystem._commandExecuted` not being defined in Release
- Fixed: An issues that could cause Navmesh agents using default KCC3D and traversing a link to have problems detecting the link end waypoint
### Build 1068 (Jul 05, 2022)
**Bug Fixes**
- Fixed: QString printers being stripped from iOS and Android builds
### Build 1067 (Jul 01, 2022)
**Bug Fixes**
- Fixed: Removed drawn sphere and ray by the 3D KCC in Debug mode that could not be disabled
### Build 1066 (Jun 30, 2022)
**Bug Fixes**
- Fixed: Inconsistent line endings for Unity scripts (QuantumProfilingClient.cs, QuantumRunner.cs, UIMains.cs)
### Build 1064 (Jun 28, 2022)
**Changes**
- Moved the `CreateAssetMenu` entries of navmesh related scripts to Quantum>Navigation
### Build 1063 (Jun 27, 2022)
**What's New**
- 2D and 3D KCC `SetConfig` methods, which can be used to change the KCC config without resetting other fields' values like done on `Init`
**Changes**
- DumpFlag_PrintRawValues dump flag also makes collections print raw pointer values
**Bug Fixes**
- Fixed: An AOT compiler issue that caused a `ExecutionEngineException` during desync error dumps (QBoolean was stripped)
### Build 1061 (Jun 23, 2022)
**Bug Fixes**
- Fixed: Handle exceptions on protocol messages gracefully by calling the `OnPluginDisconnect` callback and destroying the session
### Build 1060 (Jun 22, 2022)
**Improvements**
- 2D and 3D KCC de-penetration algorithm, preventing overshoots in certain conditions and range of contact angles
**Bug Fixes**
- Fixed: MacOS build freezing when quitting app
- Fixed: An issue in the navmesh baking that could cause an `IndexOutOfRangeException` during `GenerateTriangleGrid()` when triangle vertices are located exactly on the grid edge
### Build 1059 (Jun 21, 2022)
**Changes**
- `QuantumEditorSettings` toggles `Use XY As 2D Plane` and `Disable Modules ...` now affect all platforms instead of only the current one
### Build 1058 (Jun 20, 2022)
**What's New**
- Inspector tooltips for `Map` asset properties
### Build 1057 (Jun 17, 2022)
**Changes**
- WebGL builds are now forced to run in single-thread, regardless of the Thread Count in the Simulation Config. Clients in other platforms can still run the simulation in multiple threads and cross-play with WebGL clients
### Build 1056 (Jun 17, 2022)
**Bug Fixes**
- Fixed: 2D and 3D Physics engines now always reset force and torque on physics bodies, even when they are sleeping, preventing accumulation when `IsAwakenbyForces` is disabled on the body configs
- Fixed: Backslash in string giving error CS1009 on `LoadbalancingPeer.cs` when WebGL is the target platform
### Build 1053 (Jun 15, 2022)
- Upgraded the version of Photon Realtime shipped with the Quantum SDK to 4.1.6.14
- Updates to `quantum.console.runner` and `quantum.console.spectator` projects are not included in `upgrade/quantum_code.zip`. In order for existing projects to benefit from recent fixes to `QuantumJsonSerializer` enable `Allow unsafe code` and copy `QuantumJsonSerializer.cs` from SDK's `quantum_code/quantum.console.runner` and `quantum_code/quantum.console.spectator`
**Bug Fixes**
- Fixed: QuantumJsonSerializer in spectator and custom plugin not handling fixed buffers of booleans/chars
### Build 1052 (Jun 13, 2022)
**Bug Fixes**
- Fixed: Removed extra empty line in `CodeGen.cs` before namespace when generating code on Mac
- Fixed: `NavMesh.DataAsset` is not disposed after loading the data if the asset is dynamic
### Build 1047 (Jun 01, 2022)
**What's New**
- Package.json for PhotonRealtime, allowing to move PhotonRealtime out of assets and into a local package
**Bug Fixes**
- Fixed: An issue when performing 3D CCD that could cause triangles in a static mesh to not be checked against
- Fixed: Added missing profiler define `QUANTUM_PROFILER_ENABLED` to Debug and ReleaseProfiler configuration to be able to use the Quantum Task Profiler from the code project
### Build 1045 (May 30, 2022)
**What's New**
- A `SessionContainer` can now be started with a different implementation of `IDeterministicPlatformTaskRunner` (defaults to built-in `DotNetTaskRunner`)
**Changes**
- The custom plugin sample now starts the `SessionContainer` with an `InactiveTaskRunner`, forcing the server simulation to run in single-thread despite the runtime config (scales better)
### Build 1044 (May 27, 2022)
**Bug Fixes**
- Fixed: Errors when editing a NavMesh backed by Addressable data asset
- Fixed: Properties that had `[HideInInspector]` added still taking up inspector space
### Build 1043 (May 23, 2022)
**Changes**
- 2D Entity Prototypes can now draw the gizmos of custom polygon colliders that inherit from `PolygonCollider`
### Build 1041 (May 18, 2022)
**What's New**
- Added options to change the default `SimulationConfig.Navigation.RawPathSize` and Allocation strategy: `Fixed` = fail to find larger paths, `Allocate` = grows the raw path array. This replaces `Navigation.Constants.RawPathSize` which has been marked as obsolete
**Bug Fixes**
- Fixed: An exception inside the pathfinding for huge paths
- Fixed: An issue with `FindPathResult.Path.Index` causing the triangle indices to occasionally be wrong
- Fixed: Drawing green path gizmo dots on top of larger magenta raw path dots
### Build 1040 (May 16, 2022)
**Bug Fixes**
- Fixed: Default config assets (e.g. `DefaultCharacterController2D`, `DefaultNavMeshAgentConfig`, etc) now have their guids correctly reset to default values instead of new random guids if they are found with invalid guids during asset DB generation
### Build 1039 (May 13, 2022)
**Bug Fixes**
- Fixed: "Retrieving array element that was out of bounds" error when inspecting an empty array in an asset
### Build 1038 (May 11, 2022)
**What's New**
- Xml comments for `Quantum.Assert` and `PhotonDeterministic.Assert` methods
### Build 1037 (May 10, 2022)
**Bug Fixes**
- Fixed: DynamicAssetDB fallbacks to static resource manager when disposing asset if possible
### Build 1035 (May 04, 2022)
**Changes**
- 2D and 3D physics collider `Layer` fields are now get-set properties and check if values set are within the valid range
### Build 1034 (May 03, 2022)
**What's New**
- Added `release-profiler` assemblies to make the Quantum Task Profiler available for "release" builds. It needs to be added manually when upgrading Quantum: Add another build configuration (ReleaseProfiler) and reference `assemblies/release-profiler/quantum.code.dll`
**Changes**
- Removed `quantum.console.runner` from the upgrade file `quantum_code.zip`, it will still be included in the SDK package
**Bug Fixes**
- Fixed: CodeGen: FP constants generation issues on some platforms
### Build 1033 (May 02, 2022)
**Improvements**
- Improved the computation of 2D and 3D shape cast hit points by using the witness point of the shape being cast instead of the shape being hit
### Build 1032 (Apr 28, 2022)
**What's New**
- Annotating `Quantum.Asserts` with `System.Diagnostics.CodeAnalysis.DoesNotReturn` attributes
**Changes**
- Minor changes on the inspector `PhotonServerSettingsEditor`
### Build 1027 (Apr 25, 2022)
**What's New**
- Added `SimulationConfig` tooltips
### Build 1026 (Apr 22, 2022)
- This version fixes some issues in the avoidance algorithms and could lead to corrected but slightly different agent behavior, please make sure to check your agents still act as expected if you are using the avoidance feature
**What's New**
- `EntityViewUpdater.AutoFindMapData` - controls whether `EntityViewUpdater` will look for the current `MapData` with `FindObjectOfType` (true by default)
**Bug Fixes**
- Fixed: The navigation agent configuration option `Avoidance Can Reduce Speed` which did generate appropriate avoidance candidates but did not actually reduce the agents speed