Как сделать так, чтобы объекты не перекрывали друг друга при перетаскивании?
На сцене есть 2 идентичных GameObject, на каждом из них висит collider2D под размер спрайта (не триггер), rigidbody2D. Так же на них есть 2 моих компонента: Rectangle и DragableComponent.
Каждый из квадратов можно перетаскивать вслед за курсором - за это отвечает DragableComponent (реализовано с помощью OnBeginDrag, OnDrag). Одно из условий: объекты не должны перекрывать друг друга при перетаскивании. Однако если тащить один объект через другой слишком быстро - он пролетает сквозь коллайдер другого объекта и, соответственно, сквозь сам объект.
В отличии от пули в шутерах делать рейкаст особого смысла нет (траектория движения мыши может изменится), увеличивать коллайдер - тоже не вариант, т.к. рядом может отказаться еще один объект и тогда перетаскивание сразу прекратится (на onCollisionEnter я обрываю событие Drag).
если я правильно понял, то вы хотите чтоб на перетаскиваемые объекты действовала физика коллайдеров?
тогда почти наверняка у вас перетягиване идет просто translate или изменение transform.position
а вам надо двигать физическое тело физикой)
для начала попробовать все это на fixedUpdate (цикл физики вынести)
а вообще я бы сделал что во время перетягивания - объект "тянется"/следит за целью)
(и конечно все еще не через перемещение на Update, а синхронизированно с физикой)
опять же от варианта что вы из одного угла в другой переместили - не спасет. посчитает шаг физики на котором "не заметит" других коллайдеров.) перепрыгнет)
есть еще вариант совсем прям повесить Rigitbody , и придать силу. и все прям совсем по физике сделать) но это уже от геимдизайна зависит и вообще от желания так делать)
ну а так у вас очень абстрактно описано, потому вот вам абстрактные варианты)
Перетаскивание реализовано через изменение transform.position в имплементации OnDrag.
Перенес все в fixedUpdate как Вы и сказали - к сожалению это не помогло. Вот так это все выглядит сейчас.
В идеале я хотел бы что бы при столкновении объект просто переставал двигаться в направлении препятствия без обрывания события Drag, если это возможно.
ну очевидно же что через transform.position - оно и будет при таких скоростях перескакивать. если просто напрямую присваивать.
делайте или следование за целью с отставанием.
или прям физическим телом.
собственно описал вам варианты как можно реализовать.