Учет в физических расчетах дочерних объектов у физического тела


photo

Recommended Posts

Стоит такая задача. Есть основной объект в иерархию которого добавляются другие объекты. Основной объект с физикой, мне необходимо чтобы после добавления в его иерархию другого объекта, они работали как единое целое. Таких объектов может быть около сотни. И вот как это сделать? Если я создаю Объект 1 и добавляю ему физику, то мне надо в поле Shapes сделать корректные коллайдеры чтобы физика начала работать. Если я добавляю в иерархию Объекта 1 другой объект (Объект 2), то физика конечно его просто игнорирует, поскольку для Объекта 2 не созданы соответствующие формы. Если Объект 2 тоже с физикой, то она работает сама по себе, игнорируя иерархию. Получается единственный способ как заставить вести себя корректно два объекта - связать их джоинтами? Не будет ли это сильно бить по производительности? Будут ли джоинты работать корректно при большом количестве объектов? Что если придется делать цепочки из джоинтов?

Link to post

Я думаю еще можно вручную добавлять и удалять Shape к родительскому объекту, когда другой объект становиться дочерним и наоборот.

Link to post
1 hour ago, vadim.lisev said:

Я думаю еще можно вручную добавлять и удалять Shape к родительскому объекту, когда другой объект становиться дочерним и наоборот.

Не, это не подойдет. Я динамически их дочеру при работе программы, через код еще вести учет всех Shape, чтобы их корректно удалять когда объект выйдет из иерархии - даже звучит страшно.

Link to post
18 minutes ago, nikolay.sykharev said:

Не, это не подойдет. Я динамически их дочеру при работе программы, через код еще вести учет всех Shape, чтобы их корректно удалять когда объект выйдет из иерархии - даже звучит страшно.

Ничего сверх страшного, пишешь компонент который будет иметь методы Attach и Detach

В Attach сохраняешь в Dictionary<Node, Shape> копию шейпа дочернего объекта, а так же делаешь само удочерение. В Detach забираешь из dictionary и удаляешь оттуда.

Единственное нужно будет поправить трансформацию нового шейпа в соответсвии в дочерним объектом.

Выглядит логично.

Link to post
On 1/21/2021 at 4:07 PM, vadim.lisev said:

Ничего сверх страшного, пишешь компонент который будет иметь методы Attach и Detach

В Attach сохраняешь в Dictionary<Node, Shape> копию шейпа дочернего объекта, а так же делаешь само удочерение. В Detach забираешь из dictionary и удаляешь оттуда.

Единственное нужно будет поправить трансформацию нового шейпа в соответсвии в дочерним объектом.

Выглядит логично.

Это на словах все выглядит не сложно, а на деле при том что нет рантайма в редакторе чтобы убедиться что все работает корректно, это сама по себе отдельная система которая только и делает что перекидывает туда сюда сотни физических форм. Кроме того, вроде как нельзя задавать уникальные имена физическим формам что бы вести их учет, верно? Предположим у меня уже есть Box в Shape, я добавляю еще один, какой из них чей? Значит мне надо еще их как-то идентифицировать. Так что это проблема у которой есть очень сложное решение, буду надеяться что разработчики что-то с этим сделают.

Link to post
1 hour ago, nikolay.sykharev said:

Это на словах все выглядит не сложно, а на деле при том что нет рантайма в редакторе чтобы убедиться что все работает корректно, это сама по себе отдельная система которая только и делает что перекидывает туда сюда сотни физических форм. Кроме того, вроде как нельзя задавать уникальные имена физическим формам что бы вести их учет, верно? Предположим у меня уже есть Box в Shape, я добавляю еще один, какой из них чей? Значит мне надо еще их как-то идентифицировать. Так что это проблема у которой есть очень сложное решение, буду надеяться что разработчики что-то с этим сделают.

Имена задавать можно, но это нужно разве что для дебага. Я предложил решение, т.к. на данный момент автоматически это не работает.

Link to post