Samples updated for 1.0.0-pre.15

This commit is contained in:
Brian Will 2022-12-17 08:13:13 -08:00
Родитель 3fb73f20bf
Коммит ac418a08c3
12 изменённых файлов: 85 добавлений и 187 удалений

67
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,67 @@
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
#
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Mm]emoryCaptures/
[Uu]ser[Ss]ettings/
# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Builds
*.apk
# Crashlytics generated file
crashlytics-build.properties
# Custom
Assets/SceneDependencyCache*
Assets/NetCodeGenerated*
.idea/
.DS_Store
RiderScriptEditorPersistedState.asset

Просмотреть файл

@ -39,7 +39,7 @@ For instance, the `EntityManager` has these key methods:
| :- |
| For the sake of the job safety checks, read or write access of a component's enabled state requires read or write access of the component type itself. |
🕹 *[See examples of checking and setting the enabled state of components](../examples/components_systems.md#enableable-components).*
🕹 *[See examples of checking and setting the enabled state of components](./examples/components_systems.md#enableable-components).*
In an `IJobChunk`, the `Execute` method parameters signal which entities in the chunk match the query:
@ -50,7 +50,7 @@ In an `IJobChunk`, the `Execute` method parameters signal which entities in the
| :- |
| The `chunkEnabledMask` is a *composite* of all the enabled states of the enableable components included in the query of the job. To check enabled states of individual components, use the `IsComponentEnabled()` and `SetComponentEnabled()` methods of the `ArchetypeChunk`. |
🕹 *[See an example `IJobChunk` that correctly accounts for disabled components](../examples/jobs.md#ijobchunk).*
🕹 *[See an example `IJobChunk` that correctly accounts for disabled components](./examples/jobs.md#ijobchunk).*
<br>

Просмотреть файл

@ -13,7 +13,7 @@ Baking a Sub Scene is done in a few main steps:
2. The Baker of each authoring component in the Sub Scene is executed. Each Baker can read the authoring component and add components to the corresponding entity.
2. The baking systems execute. Each system can read and modify the baked entities in any way: set components, add components, remove components, create additional entities, or destroy entities. Unlike Bakers, baking systems should not access the original GameObjects of the Sub Scene.
&#x1F579; *[See examples of authoring components, Bakers, and baking systems.](../examples/baking.md)*
&#x1F579; *[See examples of authoring components, Bakers, and baking systems.](./examples/baking.md)*
When modified, a Sub Scene is re-baked:
@ -58,7 +58,7 @@ The [`SceneSystem`](https://docs.unity3d.com/Packages/com.unity.entities@latest?
| [`GetScenePath()`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.ICleanupComponent.html) | Returns the path of a scene asset (specified by its GUID). |
| [`GetSceneEntity()`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.ICleanupComponent.html) | Returns the entity representing a scene (specified by its GUID). |
&#x1F579; *[See examples of loading and unloading entity scenes and sections.](../examples/baking.md#scene-loading)*
&#x1F579; *[See examples of loading and unloading entity scenes and sections.](./examples/baking.md#scene-loading)*
| &#x26A0; IMPORTANT |
| :- |

Просмотреть файл

Просмотреть файл

@ -1,8 +0,0 @@
The [Systems window](editor-systems-window.md) displays information about the systems of the worlds, including their update order. Systems are represented with these icons:
|**Icon**|**Meaning**|
|---|---|
|![](images/editor-system.png)| A system. |
|![](images/editor-system-group.png)| A system group. |
|![](images/editor-system-start-step.png)| A system set to execute at the beginning of a system group by the [OrderFirst](xref:Unity.Entities.UpdateInGroupAttribute.OrderFirst) argument of the [`UpdateInGroup`](xref:Unity.Entities.UpdateInGroup) attribute.|
|![](images/editor-system-end-step.png)| A system set to execute at the end of a system group by the [OrderLast](xref:Unity.Entities.UpdateInGroupAttribute.OrderLast) argument of the [`UpdateInGroup`](xref:Unity.Entities.UpdateInGroup) attribute.|

Просмотреть файл

@ -118,7 +118,7 @@ An [`EntityQuery`](https://docs.unity3d.com/Packages/com.unity.entities@latest?s
A query can also specify component types to *exclude* from the matching archetypes. For example, if a query looks for all entities having component types *A* and *B* but *not* having component type *C*, the query would match entities with component types *A* and *B*, but the query would *not* match entities with component types *A*, *B*, and *C*.
&#x1F579; *[See examples of creating and using queries](../examples/components_systems.md#querying-for-entities).*
&#x1F579; *[See examples of creating and using queries](./examples/components_systems.md#querying-for-entities).*
<br>
@ -139,7 +139,7 @@ In order to allow entity indexes to be reused after an entity is destroyed, each
The most common, basic kind of component type is defined as a struct implementing [`IComponentData`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.IComponentData.html).
&#x1F579; *[See examples of creating and using `IComponentData` components.](../examples/components_systems.md#icomponentdata)*
&#x1F579; *[See examples of creating and using `IComponentData` components.](./examples/components_systems.md#icomponentdata)*
An `IComponentData` struct is expected to be unmanaged, so it cannot contain any managed field types. Specifically, the allowed field types are:
@ -179,7 +179,7 @@ If a managed component type implements `ICloneable`, then any resources it conta
A [`DynamicBuffer`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.DynamicBuffer-1.html) is a component type which is a resizable array. To define a `DynamicBuffer` component type, create a struct that implements the [`IBufferElementData`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.IBufferElementData.html) interface.
&#x1F579; *[See examples of creating and using `DynamicBuffer` components](../examples/components_systems.md#dynamicbuffers-ibufferelementdata).*
&#x1F579; *[See examples of creating and using `DynamicBuffer` components](./examples/components_systems.md#dynamicbuffers-ibufferelementdata).*
The buffer of each entity stores a `Length`, a `Capacity`, and a pointer:
@ -228,7 +228,7 @@ A `DynamicBuffer<T>` can be '[reinterpreted](https://docs.unity3d.com/Packages/c
An aspect is an object-like wrapper over a subset of an entity's components. Aspects can be useful for simplifying queries and component-related code. The [`TransformAspect`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Transforms.TransformAspect.html), for example, groups together the standard transform components ([`LocalTransform`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Transforms.LocalTransform.html), [`ParentTransform`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Transforms.ParentTransform.html), and [`WorldTransform`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Transforms.WorldTransform.html)).
&#x1F579; *[See examples of creating and using aspects](../examples/components_systems.md#aspects)*.
&#x1F579; *[See examples of creating and using aspects](./examples/components_systems.md#aspects)*.
Including an aspect in a query is the same as including the components wrapped by the aspect, *e.g.* a query that includes `TransformAspect` includes the standard transform matrix components.

Просмотреть файл

@ -6,7 +6,7 @@ You can offload the processing of entity data to worker threads with the [C# Job
- [`IJobChunk`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.IJobChunk.html), whose `Execute()` method is called once for each individual chunk matching the query.
- [`IJobEntity`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.IJobEntity.html), whose `Execute()` method is called once for each entity entity matching the query.
&#x1F579; *[See examples of IJobChunk](../examples/jobs.md#ijobchunk) [and IJobEntity](../examples/jobs.md#ijobentity).*
&#x1F579; *[See examples of IJobChunk](./examples/jobs.md#ijobchunk) [and IJobEntity](./examples/jobs.md#ijobentity).*
Although `IJobEntity` is generally more convenient to write and use, `IJobChunk` provides more precise control. In most cases, their performance is identical for equivalent work.

Просмотреть файл

@ -1,116 +0,0 @@
# Entities and Components
An **entity** is a lightweight, unmanaged alternative to a [GameObject](https://docs.unity3d.com/Manual/class-GameObject.html):
- Unlike a GameObject, an entity is not a managed object but simply a unique identifier number.
- The **components** associated with an entity are usually struct values.
- A single entity can only have one component of any given type. For example, a single entity cannot have two components both of type *Foo*.
- Although entity component types can be given methods, doing so is generally discouraged.
- An entity has no built-in concept of parenting. Instead, the standard `Parent` component contains a reference to another entity, allowing formation of entity transform hierarchies.
Entity component types are defined by implementing these interfaces:
|**Kind of component**|**Description**|
|---|---|
| [`IComponentData`](components.md) | Defines the most common, basic kind of component type.|
| [`IBufferElementData`](components-buffer.md) | Defines a dynamic buffer (growable array) component type.|
| [`ISharedComponent`](components-shared.md) | Defines a shared component type, whose values can be shared by multiple entities.|
| [`ICleanupComponent`](components-cleanup.md) | Defines a cleanup component type, which facilitates proper setup and teardown of resources.|
There are also two additional interfaces ([`ICleanupSharedComponent`]() and [`ICleanupBufferElementData`]()) and [chunk components](components-chunk.md) (which are defined with `IComponentData` but added and removed from entities by a distinct set of methods).
A component type defined with `IComponentData` or `IBufferElementData` can be made **'enableable'** by also implementing [`IEnableableComponent`](components-enableable.md).
An `IComponentData` component type which contains no data is known as a *tag component*. Despite storing no data, adding a tag component to an entity can be used to mark the entity. For example, you might add a *Monster* component to all of your entities which represent monsters, and then you can effectively query for all monster entities.
<br>
## Worlds and EntityManagers
A [`World`]() is a collection of entities. An entity's ID number is only unique within its own world, *i.e.* the entity with a particular ID in one world is entirely unrelated to the entity with the same ID in a different world.
A world also owns a set of [systems](concepts-systems.md), which are units of code that run on the main thread, usually once per frame. The entities of a world are normally only accessed by the world's systems (and the jobs scheduled by those systems), but this is not an enforced restriction.
The entities in a world are created, destroyed, and modified through the world's [`EntityManager`](xref:Unity.Entities.EntityManager). Key `EntityManager` methods include:
|**Method**|**Description**|
|---|---|
| [`CreateEntity()`]() | Creates a new entity. |
| [`Instantiate()`]() | Creates a new entity with a copy of all the components of an existing entity. |
| [`DestroyEntity()`]() | Destroys an existing entity. |
| [`AddComponent<T>()`]() | Adds a component of type T to an existing entity. |
| [`RemoveComponent<T>()`]() | Removes a component of type T from an existing entity. |
| [`HasComponent<T>()`]() | Returns true if an entity currently has a component of type T. |
| [`GetComponent<T>()`]() | Retrieves the value of an entity's component of type T. |
| [`SetComponent<T>()`]() | Overwrites the value of an entity's component of type T. |
| &#x1F4DD; NOTE |
| :- |
| All of the above methods, except `GetComponent` and `SetComponent`, are [structural change](concepts-structural-changes.md) operations. |
## Archetypes
An **archetype** represents a particular combination of component types in a world: all of the entities in a world with a certain set of component types are stored together in the same archetype. For example:
- All of a world's entities with component types *A*, *B*, and *C*, are stored together in one archetype,
- ...the entities with component types *A* and *B* (but not *C*) are stored together in a second archetype,
- ...and the entities with component types *B* and *D* are stored in a third archetype.
Effectively, adding or removing components of an entity changes which archetype the entity belongs to, necessitating the `EntityManager` to actually move the entity and its components from its old archetype to its new one.
When you add or remove components from an entity, the `EntityManager` moves the entity to the appropriate archetype. For example, if an entity has component types *X*, *Y*, and *Z* and you remove its *Y* component, the `EntityManager` moves the entity to the archetype that has component types *X* and *Z*. If no such archetype already exists in the world, the `EntityManager` creates it.
Even if all the entities are removed from an archetype, the archetype is only destroyed when its world is destroyed.
| &#x26A0; IMPORTANT |
| :- |
| Moving too many entities between archetypes too frequently can add up to significant costs. See the documentation on [structural changes](concepts-structural-changes.md). |
## Chunks
The entities of an archetype are stored in 16KiB blocks of memory belonging to the archetype called *chunks*. Each chunk stores up to 128 entities, with the precise number depending upon the number and size of the archetype's component types.
The entity ID's and components of each type are stored in their own separate array within the chunk. For example, in the archetype for entities which have component types *A* and *B*, each chunk will store three arrays: one array for the entity ID's, a second array for the *A* components, and a third array for the *B* components.
The ID and components of the first entity in the chunk are stored at index 0 of these arrays, the second entity at index 1, the third entity at index 2, and so forth.
A chunk's arrays are always kept tightly packed:
- When a new entity is added to the chunk, it is stored in the first free index of the arrays.
- When an entity is removed from the chunk (which happens either because the entity is being destroyed or because it's being moved to another archetype), the last entity in the chunk is moved to fill in the gap.
The creation and destruction of chunks is handled by the `EntityManager`:
- The `EntityManager` creates a new chunk only when an entity is added to an archetype whose already existing chunks are all full.
- The `EntityManager` only destroys a chunk when the chunk's last entity is removed.
## Entity ID's
An entity ID is represented by the struct [`Entity`]().
In order to look up entities by ID, the worlds `EntityManager` maintains an array of entity metadata. Each entity ID has an index value denoting a slot in this metadata array, and the slot stores a pointer to the chunk where that entity is stored, as well as the index of the entity within the chunk. When no entity exists for a particular index, the chunk pointer at that index is null. Here, for example, no entities with indexes 1, 2, and 5 currently exist, so the chunk pointers in those slots are all null.
![entity metadata](http://url/to/img.png)
In order to allow entity indexes to be reused after an entity is destroyed, each entity ID also contains a version number. When an entity is destroyed, the version number stored at its index is incremented, and so if an IDs version number doesnt match the one currently stored, then the ID must refer to an entity that has already been destroyed or perhaps never existed.
![entity metadata version numbers](http://url/to/img.png)
## Queries
An `EntityQuery` efficiently finds all entities having a specified set of component types. For example, if a query looks for all entities having component types *A* and *B*, then the query will gather the chunks of all archetypes having those two component types, regardless of whatever other component types those archetypes might have. So such a query would match the archetype with component types *A* and *B*, but the query would also match the archetype with component types *A*, *B*, and *C*.
A query can specify component types to *exclude* from the matching archetypes. For example, if a query looks for all entities having component types *A* and *B* but *not* having component type *C*, the query would match the archetype with component types *A* and *B*, but the query would *not* match the archetype with component types *A*, *B*, and *C*.
[todo "Any" of a query]
A [change filter]() on a query filters the matching chunks based on whether the values of certain component types may have changed since a prior time.
A [shared component filter]() on a query filters the matching chunks sharing a certain shared component value.
*[Examples of creating and using queries]().*
| &#x1F4DD; NOTE |
| :- |
| The archetypes matching a query will get cached until the next time a new archetype is added to the world. Because the set of existing archetypes in a world tends to stabilize early in the lifetime of a program, this caching tends to improve performance. |

Просмотреть файл

@ -17,7 +17,7 @@ An `EntityCommandBuffer` has many (but not all) of the same methods as `EntityMa
| [`AddBuffer()`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.EntityCommandBuffer.AddBuffer.html) | Returns a `DynamicBuffer` which is stored in the recorded command, and the contents of this buffer will be copied to the entity's actual buffer when it is created in playback. Effectively, writing to the returned buffer allows you to set the initial contents of the component. |
| [`SetBuffer()`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.EntityCommandBuffer.SetBuffer.html) | Like `AddBuffer()`, but it assumes the entity already has a buffer of the component type. In playback, the entity's already existing buffer content is overwritten by the contents of the returned buffer. |
&#x1F579; *[See examples of creating and using an `EntityCommandBuffer`](../examples/jobs.md#ijobchunk).*
&#x1F579; *[See examples of creating and using an `EntityCommandBuffer`](./examples/jobs.md#ijobchunk).*
| &#x1F4DD; NOTE |
| :- |
@ -82,7 +82,7 @@ If an `EntityCommandBuffer` is created with the `PlaybackPolicy.MultiPlayback` o
An [`EntityCommandBufferSystem`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.EntityCommandBufferSystem.html) is a system that provides a convenient way to defer `EntityCommandBuffer` playback. An `EntityCommandBuffer` instance created from an `EntityCommandBufferSystem` will be played back and disposed the next time the `EntityCommandBufferSystem` updates.
&#x1F579; *[See examples of creating and using an `EntityCommandBufferSystem`](../examples/components_systems.md#entitycommandbuffersystems).*
&#x1F579; *[See examples of creating and using an `EntityCommandBufferSystem`](./examples/components_systems.md#entitycommandbuffersystems).*
You rarely need to create any `EntityCommandBufferSystem`'s yourself because the automatic bootstrapping process puts these five into the default world:

Просмотреть файл

@ -21,7 +21,7 @@ The unmanaged collection types of `Unity.Collections` have a few advantages over
On the downside, you are responsible for calling `Dispose()` on every unmanaged collection once it's no longer needed. Neglecting to dispose a collection creates a memory leak, and the disposal safety checks will throw an error.
*[See more information about unmanaged collections](../cheatsheet/collections.md).*
*[See more information about unmanaged collections](./cheatsheet/collections.md).*
## Allocators
@ -41,7 +41,7 @@ The C# Jobs system allows us to schedule work to be executed in a pool of worker
- A job type is created by defining a struct that implements [`IJob`](https://docs.unity3d.com/ScriptReference/Unity.Jobs.IJob.html) or one of the other job interfaces (`IJobParallelFor`, `IJobEntity`, `IJobChunk`...).
- To put a job instance on the job queue, call the extension method `Schedule()`. Jobs can only be scheduled from the main thread, not from within other jobs.
&#x1F579; *[See an example IJob](../examples/jobs.md#ijob).*
&#x1F579; *[See an example IJob](./examples/jobs.md#ijob).*
<br>
@ -145,7 +145,7 @@ JobHandle handle = job.Schedule(
100); // batch size
```
&#x1F579; *[See more examples of IJobParallelFor](../examples/jobs.md#ijobparallelfor).*
&#x1F579; *[See more examples of IJobParallelFor](./examples/jobs.md#ijobparallelfor).*
When the job runs, its `Execute()` will be called *`count`* times, with all values from 0 up to *count* passed to `index`.

Просмотреть файл

@ -1,45 +0,0 @@
# Entities Profiler modules
The Entities package adds two modules to the [Profiler window]((https://docs.unity3d.com/Manual/Profiler.html)):
* **Entities Structural Changes:** Displays stats about [structural change operations](), which includes creating entities, destroying entities, adding components to entities, and removing components from entities.
* **Entities Memory**: Displays the memory usage of each [archetype]() in your project.
To open the Profiler window, go to **Window &gt; Analysis &gt; Profiler**. To enable or disable modules, use the **Profiler Modules** dropdown in the top-left.
>[!IMPORTANT]
>The Profiler doesnt collect any data for modules that arent enabled during the profile capture.
To profile baking, capture profiles in Edit Mode to profile the editor itself.
![](images/profiler-entities-structural.png)<br/>_Profiler window with the Entities Profiler modules displayed_
## The Entities Structural Changes profiler module
![](images/profiler-entities-structural.png )<br/>_Profiler window with the Entities Structural Changes module displayed_
The Entities Structural Changes Profiler module records stats for each frame of four kinds of [structural change operations]():
* **Create Entity**
* **Destroy Entity**
* **Add Component**
* **Remove Component**
For each of these four operations, the bottom pane displays a hierarchical view of the worlds, system groups, and systems that performed the structural change, along with the costs (cumulative running time in milliseconds) and counts of the operation.
## The Entities Memory profiler module
![](images/profiler-entities-memory.png)<br/>_Profiler window with the Entities Memory module displayed_
The Entities Memory profiler module records the memory usage of each [archetype](concepts-archetypes.md) for each frame.
- **Allocated Memory:** the amount allocated for the whole archetype.
- **Unused Memory:** the amount of the archetype's allocated memory which is unused.
The bottom pane is just like the [Archetypes window](editor-archetypes-window.md), but this pane displays the information recorded for the selected frame.
## Additional resources
* [Profiling your application](https://docs.unity3d.com/Manual/profiler-profiling-applications.html)
* [Memory in Unity](https://docs.unity3d.com/Manual/performance-memory-overview.html)

Просмотреть файл

@ -2,7 +2,7 @@
A **system** is a unit of code which belongs to a [world]() and which runs on the main thread (usually once per frame). Normally, a system will only access entities of its own world, but this is not an enforced restriction.
&#x1F579; *[See example systems](../examples/components_systems.md#system-and-systemgroup).*
&#x1F579; *[See example systems](./examples/components_systems.md#system-and-systemgroup).*
A system is defined as a struct implementing the [`ISystem`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.ISystem.html) interface, which has three key methods:
@ -25,7 +25,7 @@ A system may additionally implement `ISystemStartStop`, which has these methods:
The systems of a world are organized into **system groups**. Each system group has an ordered list of systems and other system groups as its children, so the system groups form a hierarchy, which determines the update order. A system group is defined as a class inheriting from [`ComponentSystemGroup`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.ComponentSystemGroup.html).
&#x1F579; *[See example system groups](../examples/components_systems.md#system-and-systemgroup).*
&#x1F579; *[See example system groups](./examples/components_systems.md#system-and-systemgroup).*
When a system group is updated, the group normally updates its children in their sorted order, but this default behavior can be overridden by overriding the group's update method.
@ -61,7 +61,7 @@ When automatic bootstrapping is disabled, your code is responsible for:
Alternatively, automatic bootstrapping can be customized by creating a class that implements [`ICustomBootstrap`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.ICustomBootstrap.html).
&#x1F579; *[See examples of world creation and customized bootstrapping](../examples/bootstrapping.md).*
&#x1F579; *[See examples of world creation and customized bootstrapping](./examples/bootstrapping.md).*
<br>
@ -110,6 +110,6 @@ The `SystemAPI` methods rely upon [source generators](https://docs.microsoft.com
`SystemAPI` provides a special [`Query()`](https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/api/Unity.Entities.SystemAPI.Query.html) method that, through source generation, helps conveniently create a foreach that loops through the entities and components matching a query.
&#x1F579; *[See examples of using `SystemAPI.Query()`](../examples/components_systems.md#querying-for-entities).*
&#x1F579; *[See examples of using `SystemAPI.Query()`](./examples/components_systems.md#querying-for-entities).*
<br>