Как использовать Physics2D.raycastAll - PullRequest
0 голосов
/ 28 января 2019

Я хочу получить все результаты попадания для одного луча, используя Physics2D.RayCastAll(), но я могу получить не более 2 результатов попадания (первый результат попадания и последний.).

The 'точка обзора - это начальная точка, а точка конца - это конечная точка.Между этими двумя точками есть многоугольные коллайдеры.Я хочу получить все позиции попадания.

Vector2 direction = endPoint - viewpoint.transform.position;
RaycastHit2D[] rayCastHits2D = Physics2D.RaycastAll(viewpoint.transform.position, direction, Mathf.Infinity);

Что я должен исправить в сигнатуре метода RatcastAll().

Ответы [ 2 ]

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

Есть ли PolygonCollider с, как вы заявили или PolygonCollider2D?

Physics2D.RaycastAll нужно PolygonCollider2D, чтобы поразить их!


Я не думаю, что в вашем вызове метода что-то не так.

(не может быть что-то не так с signature ... он не скомпилируется чем)


Вы уверены, что все коллайдеры находятся между этими двумя точками?

В зависимости от того, что вы хотите там сделать, вы, скорее всего, захотите использовать 3D-трансляцию с использованием Physics2D.GetRayIntersectionAll

var ray = new Ray(viewpoint.transform.position, direction);
var raycastHits2d = GetRayIntersectionAll(ray);

Также обратите внимание:

Обратите внимание, что эта функция будет выделять память для возвращенного массива RaycastHit2D.Вы можете использовать GetRayIntersectionNonAlloc , чтобы избежать этих издержек, если вам нужно часто делать такие вызовы.

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

Генерировать 2D луч с точки зрения странно.Вы уверены, что луч отбрасывает объекты?

Я думаю, вы можете перейти на использование Physics.raycastAll с 3D-коллайдерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...