ECS и Jobs, как реализовать взаимодействие сущностей

Программирование на Юнити.

ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение KoteKotovK 13 июл 2019, 15:07

Доброго времени суток. Вопрос такой, вот мы имеем обобщенный интерфейс IJobForEachWithEntity<T, A, ...>, где мы в обобщении указываем набор компонентов, которые образуют архетип, и позже, в Execute, используем их по назначению ...WithEntity ещё даёт нам доступ к сущности, чтобы мы могли работать с ней через буфер, хотя сейчас что-то поменялось и я не совсем разобрался что и как, но суть не в этом. Всё вроде логично, системы могут работать с сущностями, но как в этой реализации через Job'ы сделать взаимодействие разного кол-ва сущностей? Была идея некой системы, которая ищет 2 разных архетипа (по сути, две разные сущности, или больше чем две), которые имеют общий компонент с int ID, чтобы потому отфильтровать по этому ID все оставшиеся архетипы. То есть, у нас есть архетип определяющий съедобность сущности, а есть архетип абстрактно определяющий сущность, которая может его съесть (имеет голод и вот это всё) и суть в НЕЯВНОМ взаимодействии этих двух сущностей (неявно, потому что они не знают о существовании друг друга, ни у одного из них нету ссылок друг на друга, боже упаси каких-то функций), все взаимодействия сущностей должна просчитать система, но как? У нас вроде нету сейчас, может это только сейчас, функции позволяющей сразу искать несколько архетипов (не обязательно это будут разные сущности, зависит от ваших целей, ну а ещё от внутреннего устройства самого ECS). Мы конечно можем получить EnitityQuery отфильтровав все сущности с компонентом и переменной ID, и от туда достать NativeArray сущностей, или пойти дальше и работать со всеми чанками где есть этот компонент, для этого использовать свой IJobParallelFor, но это какие-то дебри для простой реализации взаимодействий сущностей. Как же быть?
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение ~AvA~ 17 июл 2019, 14:04

Советую посомтреть все видео в том плейлисте, но вот это конкретно то, что тебе нужно
Одно но - на англ. но код смотжешь понять даже если не понятно что он там бормочет :)
Видео для этой задачи с использованием только MainThread

Видео для этой задачи с использованием Jobs, которые выполняются в разных потоках


Одно я так и не понял, зачем тебе ECS для этого? Очень много сущностей?
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение KoteKotovK 17 июл 2019, 18:02

~AvA~ писал(а):Одно я так и не понял, зачем тебе ECS для этого? Очень много сущностей?

Я бы не сказал, что сущностей у меня сильно много, но мне дико нравится идея именно подхода проектирования на ECS. Если делать что-то на ООП, то конечно может что-то получится, если проект не сильно большой и не запутанный с точки зрения кода и разных объектов, но обычно в попытке сделать что-то сложнее тетриса или сапера появляется куча проблем с продумыванием архитектуры, именно с точки зрения ООП, очень просто сесть в лужу с производительностью или нахвататься ошибок, это замедляет и расстраивает. ECS же предлагает просто что-то невероятное. Очень удобное модульное проектирование, я даже ранее стремился к чему-то подобному в ООП, есть треды на эту тему, но дата-ориентированный дизайн и ECS подходят как нельзя кстати. Поэтому тут скорее дело в более удобной и гибкой разработке, да и всё-таки DOTS дает не мало возможностей с точки зрения дополнительной производительности, для меня это просто совокупность некого идеала разработки игр, хотя сегодня это всё представлено в раннем варианте. Спасибо за видео. Просмотрю их, если что отпишусь о результатах, а то вся эта тема не шибко популярна сейчас в ру сегменте.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41

Re: ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение DbIMok 17 июл 2019, 18:56

как по мне так довольно популярна https://t.me/s/ecscomrade
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение ~AvA~ 17 июл 2019, 19:42

Мм, подход хороший, и как у любого подхода - у него свои проблемы (обычно возможонсть получить буст производительности стоит того, чтобы разбираться).
Чего на данный момент сложно достичь с ECS так это модульности.
Системы работают по всем данным, которые сматчатся по запросу (query) ,это жуткая жуть когда ты не один пилишь проект (да даже когда и один и проект растёт). Добавил систему, и она отрабатывает по всему миру, иногда очень даже не ожиданно )
Когда у тебя много уровней, ты на 100500-том добавил новую фишку, сложно быть уверенным , что система которая реализует эту фишку не влезет на первый уровень, где у тебя по случайности такие же архетипы у энтити..
Так же преимущества сильно зависят от того, сколько у тебя одинаковых сущностей.
Но, даже в таком случае с памятью работа конечно отличается, да и паралелизм.. да, преимущества есть, надо пользовать :)
Очень удобно, что коллекции например можно использвать вообще безо всяких там ECS , или ту же JobSystem
Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

Re: ECS и Jobs, как реализовать взаимодействие сущностей

Сообщение KoteKotovK 18 июл 2019, 18:10

~AvA~ писал(а):Мм, подход хороший, и как у любого подхода - у него свои проблемы (обычно возможонсть получить буст производительности стоит того, чтобы разбираться).
Чего на данный момент сложно достичь с ECS так это модульности.
Системы работают по всем данным, которые сматчатся по запросу (query) ,это жуткая жуть когда ты не один пилишь проект (да даже когда и один и проект растёт). Добавил систему, и она отрабатывает по всему миру, иногда очень даже не ожиданно )
Когда у тебя много уровней, ты на 100500-том добавил новую фишку, сложно быть уверенным , что система которая реализует эту фишку не влезет на первый уровень, где у тебя по случайности такие же архетипы у энтити..
Так же преимущества сильно зависят от того, сколько у тебя одинаковых сущностей.
Но, даже в таком случае с памятью работа конечно отличается, да и паралелизм.. да, преимущества есть, надо пользовать :)
Очень удобно, что коллекции например можно использвать вообще безо всяких там ECS , или ту же JobSystem

Да, полностью соглашусь с выше сказанным, есть ещё куда стремится для улучшения, но как-то более все слажено в голове при проектировании на подобной архитектуре. Кстати, вроде же можно сделать несколько разных миров, я правда не уверен о взаимодействии этих миров друг с другом. Да и теоретически конечно может быть повторение архетипа, если игра прям очень большая, но на крайний случай можно просто добавить компонент тег или что-то придумать, не так уж и долго это все исправлять, но да, само существование подобной проблемы это не отменяет, но она скорее ситуативная и вопрос в пути её решения именно в вашем проекте.
KoteKotovK
UNITрон
 
Сообщения: 267
Зарегистрирован: 20 июн 2014, 06:41


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8