2016-10-14 2 views
0

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

A and B areas

+1

Найти позицию в B, и если он также находится в A, повторите попытку (т.е. выборку отбраковки). –

ответ

1

одно решение такое же, как Нико Schertler отметил в комментарии

  1. Получить координаты каждой вершины как прямоугольника.
  2. возьмите координату x min x синего треугольника и минимальную координату красного треугольника как пару (xminBlue, xminRed). Возьмите координату x max x красного треугольника и максимальную координату синего треугольника как пару. (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;
    }
    enter image description here
  5. Сделайте то же самое, как 4, чтобы получить значение у

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

+0

Большое спасибо за это решение, его то, что мне нужно и очень просто понять. – programmerdude619

+0

Я тестировал его, и он отлично работает, только один вопрос, почему <0.5f? – programmerdude619

+0

Извините, не используйте random.value <0.5f вместо этого используйте приведенный выше код, который я редактировал. Это поможет вам получить значение с равной вероятностью, если бы все были в синей области – sagar

Смежные вопросы