Почему длина контактов может быть 0, когда collision2D происходит в Unity3D?
Я сделал мяч с RigidBody2d
а также CircleCollider2D
чтобы столкнуться с другими шарами с тем же компонентом, и я просто использую следующий фрагмент, чтобы проверить контакты столкновения:
public void OnCollisionEnter2D(Collision2D collision)
{
if(collision.contacts.Length == 0)
{
Debug.LogWarning(" collision contacts length is 0 ");
return;
}
// futher more code to deal with situation when contacts exists
}
И я обнаружил, что иногда столкновение может произойти без контактов, я имею в виду contacts
массив может содержать 0 точек.
Почему это происходит?
Потому что для меня очень важно найти нормальное направление столкновения, но без точки контакта я мог бы это найти.
1 ответ
Ну, это может произойти, если ваш collision.contacts
были собраны мусор. Документация говорит
Вы должны избегать использования этого (контактов), так как это создает мусор в памяти. ( Collision2D.contacts)
Когда вы вызываете это свойство, оно создает новый массив и заполняет его контактами. После этого, когда вы закончите свою работу с ним, он отправится в GC.
Также рекомендуется использовать GetContacts
вместо. Посмотрите на это обсуждение.