Physics2D.Raycast возвращает ноль случайно - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть доска с клетками, некоторые нормальные, а некоторые - стены.Я хотел бы установить линию между двумя точками и знать, сталкивается ли она с клеткой стены.

Вот мой код:

private void OnDrawGizmosSelected()
{
    RaycastHit2D raycast = Physics2D.Raycast(from, to, Vector2.Distance(from, to), layerMask);
    if (raycast.collider == null) { Gizmos.color = Color.green; Gizmos.DrawLine(from, to); }
    else { Gizmos.color = Color.red; Gizmos.DrawLine(from, to); }
}

Это работает 80% времени.В определенных точках на карте это вообще не работает.

Пример, когда все в порядке

Example when it's OK

В этом случае это нормально, ноесли я опущу свою правую нижнюю точку примерно на 0,2, она больше не будет работать.

Пример, когда все не в порядке

Example when it's not OK

Myлиния проходит зеленым цветом, как будто стены вообще нет.

Я установил BoxCollider2D и мой слой на ячейке стены.

1 Ответ

0 голосов
/ 06 декабря 2018

Второй аргумент в Physics2D.Raycast () - это «направление», а не конец луча (в отличие от Gizmos.DrawLine () , которым вы являетесь вызывает правильно, потому что использует в качестве аргументов начало и конец).Вы хотите что-то вроде этого:

Vector2 direction = to - from;
Physics2D.Raycast(from, direction.normalized, direction.magnitude, layerMask);

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

Gizmos.Color = (raycast.collider == null) ? Color.green : Color.red;
Gizmos.DrawLine(from, to);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...