Всем доброго времени суток. У меня есть вопрос. Основная моя задача - переместить (телепортировать) Актрера1 к Актеру2 так, чтобы Компонент1 Актера1 максимально точно соприкоснулся с Компонентом2 Актра2, игнорируя любые актры любых типов коллизий, находящихся между целевыми объектами. Делаю функцию Snap, на входы которой подаются два компонента из разных актеров. Функция Snap определяет к какому примитивному объему ближе объем компонента1 - сфера или бокс для более точного соприкосновения компонентов (для выбора трейсинга сферы или бокса). Использую трейсинг от центра компонента1 до центра компонента2 в мировых координатах. Есть сложности при использовании различных типов трейсинга:
1) Трейсинг по каналу. Если между целевыми объектами попадает объект с блокирующим каналом, то трейсинг блокируется даже для мульти-трейсинга.
2) Трейсинг по профилю. Как я понимаю - это трейсиинг по пресету коллизии. Не хочется привязываться к пресету ради этой фичи.
3) Трейсинг для объектов. Приходится указывать конкретный тип коллизии для компонента2 на вход узла трейсинга. Не получается определить тип коллизии и подключить (не конвертируется взятый тип коллизии в тип, который принимает узел трейсинга - нет соединения). Объясняющий скриншот приложу ниже.
4) Трейсинг компонент. Самый подходящий способ, но у есть только для трейсинга линии и сферы, а для капсулы и бокса нету. По-этому не подходит.
Есть идеи:
1) Использовть трейсинг по каналу, создав новый канал Snap с дефолтным ответом Ignore, и в начале работы функции Snap менять ответ канала компонента2 на блок, а по завершении функции возвращать на предыдущее значение. Минусы - надо следить за тем, чтобы у всех компонентов был ответ канала Snap на Ignore, а так же следить, чтобы в проекте был такой канал.
2) Использовать мульти-трейсинг для объектов, решив проблему определения типа коллизии компонента2 и подключив на вход Object types узла трейсинга. Из массива хит результатов определить, что компонент является компонентом2.
Уверен, что задача не новая и есть какие-то устоявшиеся алгоритмы её решения. Возможно совсем доругими способами. Подскажите, пожалуйста, буду благодарен любой помощи.