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

Из того, что я уже пробовал : Collider2D.OverlapPoint, Collider2D.ClosestPoint - как-то не удалось.
Есть не очень красивое решение : Сделал область из PolygonCollider2D. Выполняю Physis2D.RayCast от точки по глубине , если попаду в область, значит точка находится в области.
Никогда не приходилось сталкиваться с нахождением точки в определенной области (кроме прямоугольных). Детальный ответ в принципе не нужен, но любая информация как реализовать такое было бы кстати. Забегая вперед, спасибо!!
Ответы (1 шт):
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 - тогда этот код работает хорошо. Но если точки будут перемешаны, как обычно это происходит в триангулированных геометриях, то расчет будет не верен.