Я просмотрел документацию и не могу найти способа добиться простейшего управления контактами с помощью встроенного физического движка.
У меня есть ситуация, когда 2D-столкновения следует игнорировать, когда, например, 2 объекта движутся в одинаковых направлениях с одинаковой скоростью (в основном, когда расстояние вычитания их векторов скорости слишком мало)...
Эти объекты находятся в слоях, которые определяют другие типы объектов, с которыми они должны сталкиваться в обычных обстоятельствах. Количество пересекающихся (и не сталкивающихся) объектов может увеличиваться произвольно. Таким образом, смена слоев не является жизнеспособным вариантом.
Используя обычный box2d, я бы использовал b2ContactListener.PreSolve
для фильтрации объектов на основе их масок и дополнительных параметров в зависимости от масок. Что эквивалентно 2D API Unity?
Rigidbody
вOnCollisionEnter2D()
? Дает ли это результаты, которые вы ищете? - person S.C.   schedule 24.07.2014rigidbody2D.active = false
делает объекты просто неактивными.coll.rigidbody.collisionDetectionMode = CollisionDetectionMode2D.None
не производит видимого эффекта. Если вы имели в виду деактивацию коллайдеров, то нет. Потому что тогда объекты с отключенными коллайдерами не будут сталкиваться ни с другими взаимно исключаемыми объектами, движущимися в другую сторону, ни со стенами, ни с другими объектами, с которыми они должны столкнуться. Есть ли способ отменить столкновение вOnCollisionEnter2D
? - person Coyote   schedule 24.07.2014Rigidbody
. А что, если вы отключите управление физикой? - person S.C.   schedule 24.07.2014coll.relativeVelocity.magnitude
) достаточно мало. Это очень просто сделать с любым физическим движком с 90-х годов. И я изо всех сил пытаюсь сделать это с помощью Unity. - person Coyote   schedule 24.07.2014OnCollision_2D
илиOnTrigger_2D
для сброса скоростей объектов до их предыдущих значений до столкновения. - person S.C.   schedule 24.07.2014