GetContacts возвращает только 1 ContactPoint2D, когда 2 объекта перекрываются - PullRequest
0 голосов
/ 17 января 2019

Я делаю 2 игровых объекта, движущихся навстречу друг другу. Объекты имеют твердые тела2D и коллайдеры2D. При столкновении я хочу получить точки контакта на внешней стороне коллайдеров. Это может быть до 8 баллов. Сейчас Мои объекты сталкиваются, но я получаю только одну Контактную точку, которая выглядит как Среднее из Контактных точек или перекрывающейся области. Как я могу получить каждое очко?

private ContactPoint2D[] contacts = new ContactPoint2D[10];

void OnCollisionStay2D(Collision2D collision)
{
    collision.collider.GetContacts(contacts);


    foreach (ContactPoint2D contact in contacts)
    {
        Vector2 hitPoint = contact.point;

        if (hitPoint != testVector)
        {
            TestMarker.transform.position = new Vector3(hitPoint.x, hitPoint.y, -5.0f);
        }

        Debug.Log(hitPoint.ToString());
    };
}

Так, как на следующем рисунке видно, я хотел бы отслеживать точки соприкосновения двух объектов. Зеленый квадрат начинается в точке, где два объекта попадают друг на друга в первый раз, а затем перемещается в центр, как среднее значение или что-то еще. Это нормальное поведение?

The two Objects

Как я могу получить все контактные точки вместо этого?

1 Ответ

0 голосов
/ 17 января 2019

Из документа:

Вы должны передать массив, достаточно большой, чтобы содержать все контакты, которые вы хотите вернуть

Так что вам нужно проверить, подходит ли размер массива.

int count = collision.collider.GetContacts(contacts);
if(count > contacts.Length)
{
    Array.Resize(ref contacts, count);
    collision.collider.GetContacts(contacts);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...