Почему длина контактов может быть 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 вместо. Посмотрите на это обсуждение.

Другие вопросы по тегам