Unity c# Модификатор пустоты - (не void)

Помогите пожалуйста написать модификатор пустоты - я его так называю, по идее это типа Overlap Area - некая область которая предотвращает попадание в нее каких либо сущностей - в данном случае позиции в мировом пространстве. Область - это допустим кривые (замкнутые) или коллайдер (2D оп типу PoligoneCollider) и внутри области нельзя создавать ничего. Вот что я имею ввиду (прикрепил картинку) : Область определяющая в себе некие сущности

Из того, что я уже пробовал : Collider2D.OverlapPoint, Collider2D.ClosestPoint - как-то не удалось.

Есть не очень красивое решение : Сделал область из PolygonCollider2D. Выполняю Physis2D.RayCast от точки по глубине , если попаду в область, значит точка находится в области.

Никогда не приходилось сталкиваться с нахождением точки в определенной области (кроме прямоугольных). Детальный ответ в принципе не нужен, но любая информация как реализовать такое было бы кстати. Забегая вперед, спасибо!!


Ответы (1 шт):

Автор решения: Any 3Develop
public static bool ContainsPoint (Vector2[] polyPoints, Vector2 p) {
    int j = polyPoints.Length-1;
    bool inside = false;

    for (int i = 0; i < polyPoints.Length; j = i++) {
        if (((polyPoints[i].y <= p.y && p.y < polyPoints[j].y) || (polyPoints[j].y <= p.y && p.y < polyPoints[i].y)) &&
            (p.x < (polyPoints[j].x - polyPoints[i].x) * (p.y - polyPoints[i].y) / (polyPoints[j].y - polyPoints[i].y) + polyPoints[i].x))
            inside = !inside;
    }
    return inside;
}

Этот код работает для линейно построенных фигур, то есть все точки массива идут как замкнутая линия, 0, 1, 2, 3, 4 - тогда этот код работает хорошо. Но если точки будут перемешаны, как обычно это происходит в триангулированных геометриях, то расчет будет не верен.

→ Ссылка