Как ограничить область Random.onUnitSphere при создании экземпляра? - PullRequest
0 голосов
/ 05 ноября 2018

Я использую Random.onUnitSphere, чтобы случайным образом выбрать место нереста в 3-м радиусе 50, где он случайным образом создает мои объекты в любом месте сферы.

Теперь мой вопрос: как я могу контролировать эту случайность в определенном месте в сфере?

Например, представьте, что при вызове Random.onUnitSphere центр является целью, поскольку все объекты идут в центр.

Что если я хочу использовать только верхний левый угол сферы, который будет использоваться при создании экземпляра? А затем изменить этот верхний левый угол сферы, чтобы сделать нижний полюс сферы?

object.transform.position = (Random.onUnitSphere * 50) + transform.position;

1 Ответ

0 голосов
/ 05 ноября 2018

Что если я хочу использовать только верхний левый угол сферы, который будет использоваться при создании экземпляра?

Просто получите случайную точку на сфере и отрегулируйте знак осей, чтобы они были в желаемом полушарии. Здесь мы используем Math.Abs.

MSDN имеет это, чтобы сказать на Math.Abs

Возвращает абсолютное значение указанного числа

Таким образом, используя Math.Abs(), мы гарантируем, что все значения положительные. Для оси x это будет означать, что все значения положительные или "правая часть". Просто применяя знак минус (-) перед Math.Abs, мы гарантируем, что конечный результат будет отрицательным или «левым».

Ось y проста. Мы просто используем Math.Abs, и это приведет к тому, что все значения будут положительными, что в системе координат по умолчанию будет "top" .

var P = Random.onUnitSphere * 50;
P.x = -Math.Abs(P.x); // force left
P.y = Math.Abs (P.y); // force top

А затем изменить этот верхний левый угол сферы, чтобы сделать нижний полюс сферы?

// continuing from above...
// move to bottom pole
object.transform.position = P + transform.position.

Расскажите подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...