Задать вопрос
@Anton12432

Как сделать чтобы объект спавнился только в объекте avaliableMoveArea и еще за края не выходил?

67c70b7335ed7369536824.png

У меня объект уже спавнится, но только в рандом месте в области видимости камеры + вылазит за края

[SerializeField] private GameObject pfp;
  [SerializeField] private GameObject avaliableMoveArea;

  private void MovePfpInRandomPlace()
  {
    float height = Camera.main.orthographicSize;
    float width = height * Camera.main.aspect;
    pfp.transform.position = new Vector3(Random.Range(-width, width), Random.Range(-height, height), 0);
    pfp.gameObject.SetActive(true);
  }
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@historydev
Mistkerl, drück den Knopf.
1. Получи позицию и размеры avaliableMoveArea.
2. Используй формулу подставив значения:
pfp.transform.position = new Vector3(Random.Range(POSITION-WIDTH/ 2., POSITION+WIDTH/ 2.), Random.Range(POSITION-HEIGHT/ 2., POSITION+HEIGHT/ 2.), 0);

3. Если позиция avaliableMoveArea считается не с центра, а левого верхнего угла, то формула будет следующей:
pfp.transform.position = new Vector3(Random.Range(POSITION, POSITION+WIDTH), Random.Range(POSITION, POSITION+HEIGHT), 0);

4. Если необходимо, чтобы объект совсем не выходил за края, необходимо добавить в формулу его размеры, а именно половину от них.
5. Если позиция объекта считается не с центра, возвращаемся к пункту 3.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы