nikolay.sykharev Posted January 20, 2021 Share Posted January 20, 2021 Стоит такая задача. Есть основной объект в иерархию которого добавляются другие объекты. Основной объект с физикой, мне необходимо чтобы после добавления в его иерархию другого объекта, они работали как единое целое. Таких объектов может быть около сотни. И вот как это сделать? Если я создаю Объект 1 и добавляю ему физику, то мне надо в поле Shapes сделать корректные коллайдеры чтобы физика начала работать. Если я добавляю в иерархию Объекта 1 другой объект (Объект 2), то физика конечно его просто игнорирует, поскольку для Объекта 2 не созданы соответствующие формы. Если Объект 2 тоже с физикой, то она работает сама по себе, игнорируя иерархию. Получается единственный способ как заставить вести себя корректно два объекта - связать их джоинтами? Не будет ли это сильно бить по производительности? Будут ли джоинты работать корректно при большом количестве объектов? Что если придется делать цепочки из джоинтов? Link to comment
vadim.lisev Posted January 21, 2021 Share Posted January 21, 2021 Я думаю еще можно вручную добавлять и удалять Shape к родительскому объекту, когда другой объект становиться дочерним и наоборот. Link to comment
nikolay.sykharev Posted January 21, 2021 Author Share Posted January 21, 2021 1 hour ago, vadim.lisev said: Я думаю еще можно вручную добавлять и удалять Shape к родительскому объекту, когда другой объект становиться дочерним и наоборот. Не, это не подойдет. Я динамически их дочеру при работе программы, через код еще вести учет всех Shape, чтобы их корректно удалять когда объект выйдет из иерархии - даже звучит страшно. Link to comment
vadim.lisev Posted January 21, 2021 Share Posted January 21, 2021 18 minutes ago, nikolay.sykharev said: Не, это не подойдет. Я динамически их дочеру при работе программы, через код еще вести учет всех Shape, чтобы их корректно удалять когда объект выйдет из иерархии - даже звучит страшно. Ничего сверх страшного, пишешь компонент который будет иметь методы Attach и Detach В Attach сохраняешь в Dictionary<Node, Shape> копию шейпа дочернего объекта, а так же делаешь само удочерение. В Detach забираешь из dictionary и удаляешь оттуда. Единственное нужно будет поправить трансформацию нового шейпа в соответсвии в дочерним объектом. Выглядит логично. Link to comment
nikolay.sykharev Posted January 24, 2021 Author Share Posted January 24, 2021 On 1/21/2021 at 4:07 PM, vadim.lisev said: Ничего сверх страшного, пишешь компонент который будет иметь методы Attach и Detach В Attach сохраняешь в Dictionary<Node, Shape> копию шейпа дочернего объекта, а так же делаешь само удочерение. В Detach забираешь из dictionary и удаляешь оттуда. Единственное нужно будет поправить трансформацию нового шейпа в соответсвии в дочерним объектом. Выглядит логично. Это на словах все выглядит не сложно, а на деле при том что нет рантайма в редакторе чтобы убедиться что все работает корректно, это сама по себе отдельная система которая только и делает что перекидывает туда сюда сотни физических форм. Кроме того, вроде как нельзя задавать уникальные имена физическим формам что бы вести их учет, верно? Предположим у меня уже есть Box в Shape, я добавляю еще один, какой из них чей? Значит мне надо еще их как-то идентифицировать. Так что это проблема у которой есть очень сложное решение, буду надеяться что разработчики что-то с этим сделают. Link to comment
vadim.lisev Posted January 24, 2021 Share Posted January 24, 2021 1 hour ago, nikolay.sykharev said: Это на словах все выглядит не сложно, а на деле при том что нет рантайма в редакторе чтобы убедиться что все работает корректно, это сама по себе отдельная система которая только и делает что перекидывает туда сюда сотни физических форм. Кроме того, вроде как нельзя задавать уникальные имена физическим формам что бы вести их учет, верно? Предположим у меня уже есть Box в Shape, я добавляю еще один, какой из них чей? Значит мне надо еще их как-то идентифицировать. Так что это проблема у которой есть очень сложное решение, буду надеяться что разработчики что-то с этим сделают. Имена задавать можно, но это нужно разве что для дебага. Я предложил решение, т.к. на данный момент автоматически это не работает. Link to comment
Recommended Posts