Единство, получить случайную позицию в пределах области?

Как показано на рисунке ниже, я хотел бы найти случайную позицию в пределах синей области (B), а не красной области (A). Как мне этого добиться? А и Б в настоящее время 2 коллайдера. Мне просто нужна позиция в B, но она не может быть в A. Спасибо заранее.

Области A и B

1 ответ

Решение

Одно решение такое же, как упоминал Нико Шертлер в комментарии

  1. Получить координаты каждой вершины обоих прямоугольников.
  2. возьмите x координату min x синего треугольника и min координату красного треугольника в виде пары (xminBlue,xminRed). Возьмите x координату max x красного треугольника и max координату синего треугольника в виде пары.(XmaxRed,xmaxBlue)
  3. Сделайте то же самое для координаты Y и получите (yminBlue,yminRed) . (YmaxRed,ymaxBlue)
  4. использованиеif(Random.value < GetRatio(xminBlue-xminRed),xmaxRed-xmaxBlue){ x= Random.Range(xminBlue,xminRed); }else { x= Random.Range(xmaxRed,xmaxBlue); } float GetRatio (float distance_1,float distance_2){ return distance_1 / distance_1 + distance_2;
    }
  5. Сделайте так же, как 4, чтобы получить значение у

В этом решении вам не нужно отклонять любые координаты

Другие вопросы по тегам