ПрограммированиеФорумОбщее

Unreal Engine 4 - стыковка блоков

#0
10:13, 6 апр 2016

Здравствуйте!
Нужно реализовать класс, позволяющий обеспечить стыковку нескольких блоков друг с другом, как в LEGO, с тем лишь отличием, что стыковаться можно со всех сторон. Например, я подвожу один блок этого класса к другому на определенное расстояние и они сцепляются. Если подведу эти два сцепленных блока к другому, то они сцепятся и с ним.
Все сцепляющиеся блоки - наследники одного класса.
Прилагаю текущую реализацию: в качестве точек соединения используется компонент Arrow.
Изначально проект был для Leap Motion, но эту функциональность можно спокойно убрать..
Если рядом с коллайдером появляется объект того же типа, который не удерживается рукой (Leap Motion), то можно его прикрепить по данным координатам.
Это работает только при прикреплении сверху вниз, в остальных случаях происходят непредсказуемые вещи...
Не могли бы вы помочь?
Ссылка: http://rghost.ru/88WnwQx9L
Заранее благодарен

#1
12:52, 6 апр 2016

Я ни в коем случае не прошу, чтобы код писали за меня, но за последние сутки у меня раз 10 вылетел Unreal Engine с критическими ошибками, и я не знаю, с чем это связано. Мне лишь нужен совет по поводу того, как можно исправить данную реализацию, или совет по тому, как правильнее сделать архитектуру.

#2
19:39, 6 апр 2016

Мм, а что есть T3D, я не в курсе.. У вас проект есть вообще или нет? Что вы там конектите, меши, боксы?

#3
19:59, 6 апр 2016

Я пробовал делать с помощью одного общего коллайдера и заранее вбитых с помощью arrow трансформов. В течение двух часов скину наработки, но словами ситуация следующая:
Есть static mesh куб. Вокруг него есть box collider. Вокруг куба находится 6 arrow по одной для каждой грани. Их координаты взяты с учётом того, что стыковать кубики будем по центру.
Я ловлю begin overlap коллайдера. Проверяют, не присоединён ли блок уже либо блок который отловлен является родителем. После этого нахожу ближайшую к точке контакта стрелку и стыкуюсь с actor с помощью attach. Затем переношу координаты к координатам стрелки.
Как я уже писал, при стыковке снизу вверх и сверху вниз проблем нет. Однако когда я стыкуюсь с боковыми гранями, кубикки просто улетают. После выполнения появляются warning и о том, что нельзя делать циклический attach, хотя я и пррвожу проверки на это в bp.
Также с использованием attach возникает следующая проблема: оба кубика равноправные, и если сдвинуть один из них, то должен сдвинуться и другой, а attachh actor to actor этого не даёт.

Картинки:
https://forums.unrealengine.com/attachment.php?attachmentid=87235… ;d=1459961833
https://forums.unrealengine.com/attachment.php?attachmentid=87236… ;d=1459961853
https://forums.unrealengine.com/attachment.php?attachmentid=87237… ;d=1459961860
https://forums.unrealengine.com/attachment.php?attachmentid=87238… ;d=1459961871

#4
19:59, 6 апр 2016

Третий - ближайший arrow
Четвертый - является ли уже прикрепленным?

#5
23:01, 6 апр 2016

Да так бегло, если улетает, то трансформ наверное неправильно считается? Например, где-то в связке AttachActorToActor + SetActorRelativeTransform ?

#6
23:03, 6 апр 2016

Больше похоже что нужно ставить мировые координаты того кто конектится в мировые arrow, а его relative в identity.

#7
23:10, 6 апр 2016

Ну и как вариант физика если включена, и совместить 2 объекта телепортом, то будет глючить.

#8
23:21, 6 апр 2016

После детального изучения кое-что исправил в координатах: теперь проблема заключается в том, что при попытке пристыковать блок, который уже находится в какой-то иерархии, может получиться так, что он будет вызван как Other Actor: тогда он detach-ится движком из своей иерархии и прикрепляется к другой, что не хорошо...
https://forums.unrealengine.com/attachment.php?attachmentid=87268… ;d=1459973992

ПрограммированиеФорумОбщее

Тема в архиве.