Отключение передачи импульса объекта другому
Есть некая группа объектов с Rigidbody и колайдерами. Все они могут толкать друг друга. Возможно ли "запретить" одному объекту толкать один определенный объект, чтобы в обратную сторону всё работало?
Ответы (2 шт):
Если оба RigidBody
динамические, то нет, нельзя запретить одному телу передавать силу другому, оставляя возможность взаимодействия (столкновения). Так себя ведёт только CharacterController
, для которого всё перемещение программируемо.
Единственный способ запрета воздействия силы на тело, это IsKinetick
, но работает он не избирательно.
На это может влиять масса тел, где одно динамическое тело с очень малой по сравнению с вторым динамическим телом, массой, не сможет передать большую силу, но какую-то всё-же передаст.
Ещё можно отслеживать силу столкновения в OnCollisionEnter(Collision)
и придавать телу силу, обратной Collision.impulse
. Но это не будет выглядеть, словно столкновения вовсе не было, поскольку в этом участвует не только сила, но и угловая скорость и центр массы, которые уже изменились согласно моменту импульса. И я не уверен какой ForceMode
нужен для AddForce()
, поскольку не знаю, заложена ли в Collision.impulse
масса и дельта.
Попробуй сделать слой(layer) и дать его обоим объектам, а в свойстве excludeLayers компонента Rigidbody обоих объектов задать этот слой.