#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, но вам нужно будет посмотреть.