Как что-то делать с этими сущностями?

Часть 1: Unity ECS - кратко об ecs
Часть 2: Unity ECS - дизайн проекта
Часть 3: Unity ECS - операции с сущностями
Часть 4: Unity ECS - ECS и рабочие места

Основы

EntityArchetype - что это такое и зачем оно вам нужно.

EntityArchetype - это уникальный массив ComponentType. EntityManager использует EntityArchetypes для группировки всех Entity, используя одни и те же ComponentTypes в кусках. (документы: ТАМ)

Я не буду рассматривать идею блоков, поскольку эта серия статей предназначена в основном для начинающих.

Что нам понадобится вначале - инициализация

Непосредственно перед созданием сущностей нам понадобится EntityArchetype - давайте создадим их.

Создайте несколько сущностей - наконец ..

Но ничего не происходит - давайте взглянем на системы.

А ... теперь намного лучше, что-то случилось. Давай причиним вред нашим существам, чтобы они могли достичь нашего Неба.

Хорошо, но они еще живы ..

У нас есть PostUpdateCommands, почему бы просто не использовать EntityManager, поскольку он управляет объектами? Вы помните, о чем говорилось в нашей Части 1?

Но на самом деле вы не хотите добавлять / удалять компоненты через EntityManager. Лучше сделать это после обновления, чтобы не разбить группу (вы получите ошибку при доступе к освобожденному собственному массиву), поэтому вы хотите использовать PostUpdateCommands (EntityCommandBuffer).

Что такое EntityCommandBuffer и зачем он нам нужен?

Это довольно хорошо объяснено в документации ТАМ

Все структурные изменения имеют жесткие точки синхронизации. CreateEntity, Instantiate, Destroy, AddComponent, RemoveComponent, SetSharedComponentData имеют жесткую точку синхронизации. Это означает, что все задания, запланированные через JobComponentSystem, будут завершены, например, до создания объекта. Это происходит автоматически. Так, например: вызов EntityManager.CreateEntity в середине кадра может привести к большой задержке, ожидающей завершения всех ранее запланированных заданий в мире. См. EntityCommandBuffer для получения дополнительной информации об избежании точек синхронизации при создании сущностей во время игры.

Там упоминается JobComponentSystem, о которой я еще не рассказывал, но не волнуйтесь, это будет в следующей части! EntityManager делает недействительными существующие внедренные массивы и группы компонентов, поэтому он испортит наши обновления.
В отличие от JobComponentSystems, PostUpdateCommand (EntityCommandBuffer) в ComponentSystem устанавливается и доступен автоматически.
Этот EntityCommandBuffer позволяет нам ставить в очередь изменения для выполнения, чтобы они могли вступить в силу позже в основном потоке.
Теперь вы точно заинтересованы в использовании вакансий в ECS. Я напишу об этом в следующей части.

Это все? Нет ты устала? Осталась только одна часть:
Часть 4: Unity ECS - ECS и рабочие места

Оставьте отзыв в разделе комментариев, не волнуйтесь, я не возненавижу вас, если вы покажете мне какую-нибудь «аномалию» в моей статье. Если вам понравилась моя статья - ставьте лайк и подписывайтесь на меня. Это побудит меня написать больше статей. Увидимся.

Первоначально опубликовано на странице https://connect.unity.com/p/part-3-unity-ecs-operating-on-entities