GDK for Unity Alpha Release 0.3.4
In this release, we've moved from using chunk-based interest to using query-based interest by default.
To help you with this, we've added an EntityReservationSystem which automatically keeps a pool of reserved entity IDs. The Player Lifecycle module has been integrated with this system, providing the CreatePlayerEntityTemplate callback with the entity ID that the player will have after it is successfully spawned.
This is particularly useful for defining interest queries that are self-referential.
As QBI lets you filter for components a worker should be interested in, the GameObject Creation module has been changed to run for entities that match the minimum component set required by a IEntityGameObjectCreator, instead of any entity that is newly added.
This means that the module no longer cares if an entity is checked out in one frame or across multiple.
In addition, the GDK now lets you pin a runtime version that you wish to use. Initially this has been set to 14.5.0, but you can override this in the GDK Tools Configuration.
We've also included our usual assortment of bug fixes.
Note that this release includes several breaking changes. Please read the upgrade guide here.
Keep giving us your feedback and/or suggestions! Check out our Discord, our forums, or here in the Github issues!
See the full release notes below! 👇
Breaking Changes
- The
DeploymentLauncherproject has an additional required argumentruntime_version. If you invoke this manually throughdotnet, you'll need to provide this argument. #1299 - Schema components in ECS no longer have a
ComponentIdproperty. #1308- You should use
ComponentDatabase.GetComponentId<T>()instead.
- You should use
CustomSpatialOSSendSystemis no longer available. #1308- The Player Lifecycle feature module now provides an
EntityIdin itsCreatePlayerEntityTemplatecallback. #1315- You will have to change your callback from
(string clientWorkerId, byte[] serializedArguments)to(EntityId entityId, string clientWorkerId, byte[] serializedArguments).
- You will have to change your callback from
- Added the
PopulateEntityTypeExpectationsmethod toIEntityGameObjectCreator. #1333- Use this method to define the set of components expected on an entity to be able create GameObjects for a given entity type.
- Added
string entityTypeas an argument toIEntityGameObjectCreator.OnEntityCreated. #1333- This means that your entities must have the
Metadatacomponent to use the GameObject Creation Feature Module.
- This means that your entities must have the
Added
- Added ability to construct a
CodeWriterusing just the raw string content. #1275- This will override anything defined through the ergonomic
CodeWriterAPI.
- This will override anything defined through the ergonomic
- Introduced a new
CodegenJobmodel. #1275 - The SpatialOS Runtime version is now pinned by the GDK. This has been initially set to
14.5.0.- You can override this version in the GDK Tools Configuration. #1289
- This version (or your override) will be used in both local deployments started through the editor and cloud deployments started through the Deployment Launcher.
- The currently selected version will be displayed in the Deployment Launcher. #1302
- Added a
Dump()method toCommandLineArgsto format all the parsed command line arguments into a string. This can aid you in debugging issues relating to command line args. #1312 - Added the
EntityReservationSystemwhich automatically keeps a pool of reserved entity IDs. #1314- The system's
TakeAsync(count)andGetAsync()API can be used to obtain entity IDs for spawning, without needing callbacks. - There is also a non-async
TryTake(count, out EntityId[])andTryGet(out EntityId)version which allows for reservations to fail.
- The system's
Changed
- Downgraded the level of several code generator logs from
InfotoTrace. #1277 - Upgraded the Worker SDK to
14.5.0. #1317 - Upgraded the Platform SDK used by the Deployment Launcher to
14.5.0#1317 - Changed the GameObject Creation module to run for entities that match the minimum component set required by the creator, instead of any entity that is newly added.
- This means that the module no longer cares if an entity is checked out in one frame or across multiple.
Fixed
- Fixed a bug where code generation would happen on every Unity compilation, despite the code generator returning successfully. #1294
- Fixed a bug where dotnet output from the code generator would cause exceptions to be thrown. #1294
- Fixed a bug where the Mobile Launcher window wouldn't find Android devices that contained hyphens in their product name. #1288 #1296
- Fixed a bug where component events were not dropped properly when the entity-component pair was removed from the View. [#1298])(#1298)
- Fixed a bug where Reader/Writer/CommandSender/CommandReceiver fields would not have their state set to invalid when the underlying constraints were not met. #1297
- This bug would manifest itself in situations like a
Readerreference attempting to read data that does not exist in your worker's view anymore.
- This bug would manifest itself in situations like a
- Fixed the Mobile Launcher being unable to find the Android SDK when using the embedded installation. #1319
- Fixed a bug where losing a
Readerdue to QBI would break the monobehaviour that required it. #1326
Removed
- Removed the old
CodegenJobmodel. #1277
Internal
- Ported all modules to the new
CodegenJobmodel. #1276 - Running forced code generation now deletes the
ImprobableCodegen.markerfile. #1294 - Added tests coverage for the interaction between unlinking a GameObject and Reader/Writer/CommandSender/CommandReceiver state. #1295
- Reduce complexity in
ViewDiffandMessagesToSendclasses. #1290 - De-duplicated code for generated
ComponentDiffStorageinstances. #1290 Improbable.Gdk.Core.EntityIdis now a readonly struct. #1290- The Playground project now uses QBI instead of CBI. #1370
- Added
MockWorldandMockBaseclasses to theImprobable.Gdk.TestUtilspackage. These are designed as a framework for testing Core code. #1305 - Switched internal profiling to use new
ProfilerMarkerAPI. #1311 - Changed
MockWorld.Options.AdditionalSystemsfromType[]toAction<World>. #1330