Что я делаю не так с Physics2D.Raycast()?

#c# #unity3d

#c# #unity3d

Вопрос:

Я работаю с Unity2D и хочу использовать Raycast в качестве входных данных для моих нейронных сетей. Я попытался удалить все contactFilters, установив расстояние до бесконечности, но безуспешно. Что бы я ни делал, raycast не обнаруживает никаких столкновений. Вот мой код:

 for (int i = 0; i < 8; i  )
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, directions[i], 5f, 10);
        if (hit.collider != null)
        {
            Debug.Log("I CAN SEE");
            input[i] = 1;
        }
        else
        {
            input[i] = 0;
        }
    }
  

Массив направлений:

 Vector2[] directions = {
    new Vector2(0, 1)
    new Vector2(1, 1),
    new Vector2(1, 0),
    new Vector2(1, -1),
    new Vector2(0, -1),
    new Vector2(-1, -1),
    new Vector2(-1, 0),
    new Vector2(-1, 1)
    }
  

10 — это индекс моего «вражеского» слоя

Я подтвердил с помощью Debug.Нарисуйте, что столкновения должны происходить

Комментарии:

1. У вас есть коллайдеры на врагах?

2. да, все остальное работает так, как должно. У врагов нет проблем с столкновением с другими объектами.

3. Конечно, это потому, что 10 не является уровнем, запрашивающим получение элементов на уровне 10

4. @BugFinder поэтому я должен вместо этого передать ему массив игровых объектов на уровне 10? извините, если я неправильно понял ваш комментарий. в любом случае я попробовал это без каких-либо фильтров, и он все равно ничего не обнаружил.

5. Нет. Вам нужно передать маску слоя. По сути, ваш raycast должен принимать что угодно, кроме уровня 10. Я разговариваю по телефону, поэтому не собираюсь все это Гуглить для вас, но я считаю, что это должно быть ~ 1 <<10, но вам нужно будет посмотреть.