@youkerni
Unity3D developer

Как сделать так, чтобы объекты не перекрывали друг друга при перетаскивании?

На сцене есть 2 идентичных GameObject, на каждом из них висит collider2D под размер спрайта (не триггер), rigidbody2D. Так же на них есть 2 моих компонента: Rectangle и DragableComponent.

Каждый из квадратов можно перетаскивать вслед за курсором - за это отвечает DragableComponent (реализовано с помощью OnBeginDrag, OnDrag). Одно из условий: объекты не должны перекрывать друг друга при перетаскивании. Однако если тащить один объект через другой слишком быстро - он пролетает сквозь коллайдер другого объекта и, соответственно, сквозь сам объект.

В отличии от пули в шутерах делать рейкаст особого смысла нет (траектория движения мыши может изменится), увеличивать коллайдер - тоже не вариант, т.к. рядом может отказаться еще один объект и тогда перетаскивание сразу прекратится (на onCollisionEnter я обрываю событие Drag).

Подскажите какие еще варианты есть?
  • Вопрос задан
  • 2518 просмотров
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
если я правильно понял, то вы хотите чтоб на перетаскиваемые объекты действовала физика коллайдеров?
тогда почти наверняка у вас перетягиване идет просто translate или изменение transform.position

а вам надо двигать физическое тело физикой)
для начала попробовать все это на fixedUpdate (цикл физики вынести)

а вообще я бы сделал что во время перетягивания - объект "тянется"/следит за целью)
(и конечно все еще не через перемещение на Update, а синхронизированно с физикой)

опять же от варианта что вы из одного угла в другой переместили - не спасет. посчитает шаг физики на котором "не заметит" других коллайдеров.) перепрыгнет)

есть еще вариант совсем прям повесить Rigitbody , и придать силу. и все прям совсем по физике сделать) но это уже от геимдизайна зависит и вообще от желания так делать)

ну а так у вас очень абстрактно описано, потому вот вам абстрактные варианты)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы