Отключение передачи импульса объекта другому

Есть некая группа объектов с Rigidbody и колайдерами. Все они могут толкать друг друга. Возможно ли "запретить" одному объекту толкать один определенный объект, чтобы в обратную сторону всё работало?


Ответы (2 шт):

Автор решения: Yaroslav

Если оба RigidBody динамические, то нет, нельзя запретить одному телу передавать силу другому, оставляя возможность взаимодействия (столкновения). Так себя ведёт только CharacterController, для которого всё перемещение программируемо.

Единственный способ запрета воздействия силы на тело, это IsKinetick, но работает он не избирательно.

На это может влиять масса тел, где одно динамическое тело с очень малой по сравнению с вторым динамическим телом, массой, не сможет передать большую силу, но какую-то всё-же передаст.

Ещё можно отслеживать силу столкновения в OnCollisionEnter(Collision) и придавать телу силу, обратной Collision.impulse. Но это не будет выглядеть, словно столкновения вовсе не было, поскольку в этом участвует не только сила, но и угловая скорость и центр массы, которые уже изменились согласно моменту импульса. И я не уверен какой ForceMode нужен для AddForce(), поскольку не знаю, заложена ли в Collision.impulse масса и дельта.

→ Ссылка
Автор решения: Fylht

Попробуй сделать слой(layer) и дать его обоим объектам, а в свойстве excludeLayers компонента Rigidbody обоих объектов задать этот слой.

→ Ссылка