com.unity.entities 1.0.0-pre.15

com.unity.entities

Notes: processedReleased November 23, 2022

Browse versions

PreviousNext

Unity Compatibility

Minimum Unity: 2022.2 (0f1)

Features

  • Support serializing UnityEngine.AnimationCurves in managed components.
  • Changing shared component data (managed or unmanaged) is now tracked by the entities structural changes profiler module.
  • WorldUnmanaged.GetAllSystems
  • Support for enabling or disabling components in the entity inspector, for components that derives from the `IEnableableComponent` interface.
  • `TypeManager.TypeIndex` type providing type safety and improved debugging working with type indices given from the `TypeManager`.
  • Missing docs for Scratchpad and UpdateAllocator public APIs.
  • `ComponentTypeSet` now has a debugger type proxy, to show the list of components it contains.
  • DotsPlayerSettings can provide their own set of custom scripting defines.
  • UnityObjectRef now implements IEquatable\>.
  • Support for `RefRW`, `RefRO`, `EnabledRefRW` and `EnabledRefRO` parameters in `IJobEntity.Execute()`.
  • Added convenience methods for adding Chunk Components to an EntityQueryBuilder.
  • Docs to provide an overview of prebuilt custom allocators.
  • `SystemAPI.ManagedAPI.HasComponent`, `SystemAPI.ManagedAPI.GetComponent`, `SystemAPI.ManagedAPI.TryGetComponent`, `SystemAPI.ManagedAPI.GetSingleton`, `SystemAPI.ManagedAPI.TryGetSingleton`.
  • managed `EntityQuery.TryGetSingleton`
  • `SystemAPI.Query>` support.
  • `EntityQuery.TryGetSingletonRW` and `SystemAPI.TryGetSingletonRW`
  • Workflow for preparing builds for publishing
  • Workflow for preparing content updates for published builds
  • Runtime functionality to download and update remote content
  • Profiler module for the runtime content manager that tracks loading information.
  • `SystemAPI.IsComponentEnabled`, `SystemAPI.IsBufferEnabled`, `SystemAPI.ManagedAPI.IsComponentEnabled` to get component enabledness from an entity. To do this in jobs, do so in ComponentLookup/BufferLookup.
  • `SystemAPI.SetComponentEnabled`, `SystemAPI.SetBufferEnabled`, `SystemAPI.ManagedAPI.SetComponentEnabled` to set component enabledness from an entity. To do this in jobs, do so in ComponentLookup/BufferLookup.
  • `RequireForUpdateWithSystemComponent` to SystemBase and ISystem to help explain that system components won't normally partake in queries without explicitly mentioning it.
  • EntityQueryBuilder ChunkComponent calls to SystemAPI.EntityQueryBuilder for better symmetry.
  • Added `EntityCommandBuffer.ParallelWriter.SetEnabled(Entity,bool)` method, for parity with the main-thread interface.
  • A isReadOnly field (with default arg) to `TryGetSingletonBuffer` so it matches its cousin `GetSingletonBuffer`
  • ArchetypeChunk.Has and ArchetypeChunk.HasChunkComponent for ease of checking (useful for `IJobEntityChunkBeginEnd`)
  • `IJobEntityChunkBeginEnd` - allowing you to run code at the start and end of chunk iteration.
  • `SystemAPI.GetXTypeHandle` to easily get cached and `.Update`'d handles :3
  • The new tag component `PropagateLocalToWorld` must be added to any entity which needs its children to inherit its full `LocalToWorld` matrix, instead of the more compact `WorldTransform` representation. This path is slightly slower, but supports additional features like `PostTransformMatrix` (for non-uniform scale), and interpolation by the Physics and Netcode packages.
  • Added `ArchetypeChunk.IsComponentEnabled(ref DynamicComponentTypeHandle)`.
  • ContentDeliverySystem.UpdateContent API
  • Added `No aspects` message for Aspects tab in Inspector when no aspect is available for selected entity.
  • Support for sticky data mode to the Entities Hierarchy window and the Inspector window.
  • Support for automatic data mode switching to the Entities Hierarchy window and the Inspector window.

📈 Improvements

  • Entities package test components such as `EcsTestData` are no longer part of the package's public API; they are only intended for internal package testing.
  • WorldUnmanaged.CurrentTime renamed to WorldUnamanged.Time
  • WorldUnmanaged.TryGetSystemStateForId is now internal
  • WorldUnmanaged.IsCreated is now public
  • SystemState.ShouldRunSystem is now public
  • Renamed the fields of `EntityBlobRefResult` to match the C# coding standard.
  • Renamed the `DOTS Hierarchy` window to `Entities Hierarchy`.
  • Renamed the `DOTS` sub-menu from the top-level `Window` menu to `Entities`.
  • Renamed the `DOTS` section in the `Preferences` window to `Entities`.
  • Changed the order of the items under `Window>Entities` to be deterministic.
  • Moved the baking options to the DOTS Editor preferences page.
  • EntityQueries created via EntityManager.CreateEntityQuery or EntityQueryBuilder.Build(EntityManager) will be owned by the EntityManager and be disposed by the EntityManager when it is destroyed.
  • RuntimeContentManager API for loading and managing Unity engine objects loaded from Content Archives.
  • WeakObjectReference can be used to manage weak objects at runtime.
  • Asset bundles are no longer build and loaded for referenced unity objects. AssetBundleManager class has been removed.
  • Bakers for base component types and decorated with `[BakeDerivedTypes]` are evaluated before bakers for derived component types.
  • Renamed `EntityCommandBuffer.*ForEntityQuery` methods to be their singular overload equivalents `EntityCommandBuffer.*`. E.g. `EntityCommandBuffer.DestroyEntitiesForEntityQuery` is now an overload in `EntityCommandBuffer.DestroyEntity`. EntityCommandBuffer is now more in line with EntityManager!.
  • `EntityQuery.CalculateEntityCount(NativeArray)`
  • `EntityQuery.CalculateEntityCountWithoutFiltering(NativeArray)`
  • `EntityQuery.MatchesAny(NativeArray)`
  • `EntityQuery.MatchesAnyIgnoreFilter(NativeArray)`
  • `EntityQuery.ToEntityArray(NativeArray, Allocator)`
  • `EntityQuery.ToComponentDataArray(NativeArray, Allocator)`
  • `Entities.ForEach.WithFilter(NativeArray)`
  • Renamed `BufferLookup.IsComponentEnabled` to `BufferLookup.SetBufferEnabled` and `BufferLookup.SetComponetEnabled` to `BufferLookup.SetBufferEnabled`.
  • Renamed IJobEntity `EntityInQueryIndex` to `EntityIndexInQuery` to match name scheme found in `ChunkIndexInQuery` and `EntityIndexInChunk`
  • Renamed `BlobAssetStore.Remove` to `BlobAssetStore.TryRemove`, to better convey its functionality, as it only removes the BlobAsset if it is present.
  • added some missing xml docs
  • removed cleanup call from RuntimeContentSystem.OnDestroy as this could be called multiple times when there are multiple worlds
  • Baked primary entities no longer have an implicit dependency on the Transform component.
  • Removed the inner TransformData struct from WorldTransform, LocalTransform and ParentTransform (and instead use extension methods and properties). Position/Rotation/Scale can now be accessed directly on the transform type itself.
  • `ComponentTypeHandle`, `BufferTypeHandle`, `DynamicComponentTypeHandle`, and `DynamicSharedComponentTypeHandle` arguments to `ArchetypeChunk` methods are now passed by `ref` instead of by value. This facilitates a caching optimization that will be implemented in a future release.
  • Renamed the PostTransformMatrix component to PostTransformScale, and changed its value type to float3x3.
  • Searching the Entities hierarchy using the component filter now treats multiple entries as AND rather than OR.
  • Updated transform documentation.
  • Improved performance of `EntityManager.DestroyEntity(EntityQuery)`
  • The build settings are no longer stored in the Assets folder.
  • It's now a compile error to schedule with managed code (for IJobEntity and IJobChunk)
  • Blob asset safety verifier rewritten as a Roslyn analyzer (results in domain reload time improvements and IDE support with CodeFixes).
  • Blob assets now create a compile error if it contains a pointer e.g. `fixed byte[16]`.
  • Blob assets now warn on new assignments e.g. `var test = new MyBlob()` and `var test = default(MyBlob)`.
  • `ComponentTypeSet` is now a `readonly` struct, which is passed by `in` instead of by `value`
  • ### Deprecated
  • rename `EntityManager.CompleteAllJobs` to `EntityManager.CompleteAllTrackedJobs`, to more accuractly describe what it is doing.
  • SystemState.Time and SystemBase.Time has been deprecated in favor of World.Time and SystemAPI.Time
  • `[WithEntityQueryOptions]` for IJobEntity becomes `[WithOptions]` to be consistent with `EntityQueryBuilder` and `SystemAPI.QueryBuilder`
  • `SystemAPI.Query.WithEntityQueryOptions` becomes `SystemAPI.Query.WithOptions` to be consistent with `EntityQueryBuilder` and `SystemAPI.QueryBuilder`
  • `ArchetypeChunk.ChunkEntityCount` is now deprecated. It is guaranteed to always have the same value as `ArchetypeChunk.Count`, and the latter should be preferred.
  • SystemAPI duplicated API in `ComponentSystemBase`. `HasSingleton`, `GetSingleton`, `GetSingletonRW`, `GetSingletonBuffer`, `TryGetSingleton`, `TryGetSingletonBuffer`, `SetSingleton`, `GetSingletonEntity`, `TryGetSingletonEntity`. Use SystemAPI alternatives instead.
  • SystemAPI duplicated API in `ComponentSystemBaseManagedComponentExtensions`. `GetSingleton`, `GetSingletonRW`, `SetSingleton`. Use SystemAPI alternatives instead.
  • SystemAPI duplicated API in `SystemBase`. `GetComponent`, `SetComponent`, `HasComponent`, `GetBuffer` and `Exists`. Use SystemAPI alternatives instead.

API Changes

  • `ISystemBase` as the old name for good, use the new name `ISystem`
  • Removed the `Journaling` sub-menu from the `DOTS` top-level menu. `Enable Entities Journaling` can be set through the `Preferences` window or from the `Journaling` window. `Export to CSV` can be triggered from the `Journaling` window.
  • The "Add missing partials keyword to systems" menu item has been removed. It was intended to help older DOTS projects update to the 0.50.x, and is no longer necessary for 1.0 and beyond.
  • Removed `BufferAccessor` constructor from the public API. Use methods like `GetBufferAccessor()` to create instances of this type.
  • Removed unit-test helper method `ArchetypeChunkArray.CalculateEntityCount(NativeArray)` from the public API.
  • `LayoutUtilityManaged` and `LayoutUtility`. Component equality comparisons are handled by the TypeManager and FastEquality system internally and no longer require the LayoutUtility.
  • Removing dependencies on `com.unity.jobs` package.
  • Removed the previously-deprecated methods which limited their operation to a caller-provided `NativeArray`. These methods were never particularly efficient, and are increasingly prone to producing incorrect results. If necessary, the functionality can be replicated in user-space using a `NativeHashSet` as an early-out mechanism.
  • GameObjectSceneSystem and ability to load GameObject scenes from the Entities SceneSystem
  • Removed the `DotsPlayerSettings` type.
  • Removed `View All Components` label for Aspects tab in Inspector.
  • Dependencies on com.unity.platformspackage has been removed.

🔧 Bug Fixes

  • Store `Allocator` in EntityCommandBufferSystem's `Singleton`.
  • IJobEntity now gives proper error when trying to add multiple of same type to `Execute` signature.
  • Fixed an issue where inspecting an Entity in play mode would mark its chunk as changed every frame.
  • WorldUnmanaged.GetAllUnmanagedSystems previously returned all systems rather than just unmanaged ones
  • Missing documentation added or updated for various system and EntityManager API
  • EntityQueryBuilder.Build(SystemState) made a copy of SystemState which could lead to a NullReferenceException or ObjectDisposedException. It now takes (ref SystemState).
  • Entity inspector no longer throws index out of range exception when modifying the content of integer fields.
  • Systems window no longer throws exceptions when encountering invalid worlds.
  • Using WithChangeFilter on Entities.ForEach or SystemAPI.Query would add the component type as ReadWrite. It now adds ReadOnly.
  • Subscene entity names are trucated to 64 characters during incremental baking.
  • Components with `long` or `ulong` enum fields will no longer cause an exception when displayed in entity inspector. As temporary measure until 64 bit integers are supported by `UnityEngine.UIElements.EnumFlagsField`, a text field with the numerical value of the enum will be displayed.
  • Change API name from `SetAllocatorHandle` to `SetAllocator` for entity command buffer allocator.
  • RectTransform components are no longer skipped when baking transform hierarchies.
  • Disabled GameObjects are baked and rendered as expected when activated at runtime.
  • NetCodeClientSetting should not add FRONTEND\_PLAYER\_BUILD scripting define.
  • EntityQueryBuilder will correctly emit error when used without constructing with an Allocator.
  • `EntityQuery.ResetFilter()` now resets order version filtering to its default value (disabled) as well.
  • BlobArray.ToArray() throws if the element type T contains nested BlobArray or BlobPtr fields.
  • IJobEntity scheduling calls no longer ignores calls to `JobHandle.CombineDependencies()` passed as its `dependsOn` parameter.
  • IJobEntity scheduling calls now can contain calls to SystemAPI calls and other JobEntity scheduling
  • IJobEntity scheduling calls now ensure they only add automatic dependency assignment, when jobhandle is explicitly passed to scheduling functions.
  • Chunk.GetEnableMask did not update the lookup cache correctly, causing the cache to invalidated and exception thrown in some situation (ex: more than one chunk passed to the job)
  • Issue where SystemAPI, and JobEntity schedules would not work inside an expression bodied statement.
  • If changing an entity's `Parent` would leave the previous parent entity's `Child` buffer empty, the empty `Child` component is now automatically removed by `ParentSystem`.
  • Differ was missing modified entities under some particular conditions.
  • Drag n drop issue that can cause the Editor to enter an infinite loop
  • Disable dragging GameObjects from scene to subscene, and from subscene to scene in playmode
  • An exception that occurs when opening properties window from the Entities Hierarchy "Properties ..." context menu item.
  • `SystemAPI.GetBuffer` to get BufferLookup as ReadWrite (as to be consistent with rest of GetBuffer methods.)
  • Fixed a performance issue in the Entities Hierarchy when it's docked behind another window while GameObject events happen.
  • Dynamically loaded subscenes are now correctly displayed in the Entities Hierarchy.
  • `SystemAPI.Query>` where MyTag is a zero-size component, will now return `default(MyTag)` instead of throwing.
  • Entities Hierarchy truncates long node names to fit in 64 bytes instead of throwing errors.
  • Fixed a bug which could put the "enabled" state of an `IEnaleableComponent` in an undefined state after removing a different `IEnableableComponent`.
  • Ensure Autocomplete popup is triggered when using c= (component search) in Hierarchy and in Systems Window.
  • Issue where having a local function inside a function using SystemAPI/Entities.ForEach/IJobEntity scheduling would cause build failures with IL2CPP
  • Styling issue in Entities Hierarchy when switching data modes.
  • Leaking when using EntityIndexInQuery with `IJobEntity` or `Entities.ForEach`.
  • Searching in Entities Hierarchy is now supported when no world currently exists.
  • Entities Hierarchy: GameObject change events are now processed over multiple frames and will not accumulate when the hierarchy is sitting docked behind another window.
  • Fixed an issue where Transform live properties do not work sometimes.
  • Reverting the baker state of a previous iteration can have unexpected side effects in some cases.
  • `ArchetypeChunk.IsComponentEnabled` and `ArchetypeChunk.SetComponentEnabled` now consistently fail if the provided type handle does not correspond to one of the chunk's component types.
  • `ArchetypeChunk.IsComponentEnabled` and `ArchetypeChunk.SetComponentEnabled` now consistently fail if the provided `indexInChunk` argument is negative.
  • Components window now correctly shows all components.
  • Addressed an exception when streaming in multiple scene sections at once
  • On rare occasions, streaming scenes in would fail due to a corrupt free list in the reused streaming world. This has been fixed.
  • Issue causing the Entities Hierarchy to throw errors when entering playmode when the window is docked and not visible.
  • Remove unnecessary Repaint invocation in the SubSceneInspectorGUI
  • Entities Hierarchy visibility detection issue that potentially causes the window to not properly initialize.
  • Under Relationships tab of Entity Inspector, systems with same name will display with added namespace for distinguishment.
  • blob asset references would infrequently become invalid after a live baking pass.
  • Entities Hierarchy now properly retrieves subscenes' asset names.
  • Companion GameObjects (e.g. lights, reflection probes, audio sources, etc.) transforms stopped updating during live baking.