Prefab`ы в Unity. Появление в случайном месте

Перешарил поисковые запросы, всё то да ни то.

Закидываю в массив префабы для генерации уровня. После беру случайный префаб из массива и создаю Clone на сцене. Всё бы ничего, но создал я его в canvas, а появляется он просто в пространстве.

Забавный факт в том, что я до этого делал, то же самое, но появилась ошибка в другом месте проекта и я с дуру удалил префабы и скрипты.

Метод для появления префаба

void LoadPrefab()
    { 
        //sourse - класс для хранения данных, arrayPrefabs массив префабов с нужными префабами
        sourse.numberPrefab = Random.Range(0, arrayPrefabs.Length - 1);

        prefab = Instantiate(arrayPrefabs[sourse.numberPrefab]);



    }

Иерархия префаба

Иерархия префаба

Префаб и его размеры

Ситуация, когда вне игры перенёс префаб в canvas

Ситуация, когда вне игры перенёс префаб в canvas

Ситуация, когда создал clone префаба на сцене

Ситуация, когда создал clone префаба на сцене

Ситуация, когда я ручками его перенёс во время отладки в canvas 1

Ситуация, когда я ручками его перенёс во время отладки в canvas 1

Ситуация, когда я ручками его перенёс во время отладки в canvas 2 (отдаление)

Ситуация, когда я ручками его перенёс во время отладки в canvas 2 (отдаление)


Ответы (1 шт):

Автор решения: Sergey Semkin

Было бы круто если бы кто-то сказал как это происходит. Почему раньше норм создавались клоны, а сейчас через пидигий

Что я сделал чтобы они появлялись там где нужно:

  • Подредачил Prefab потому что размеры и scale поменялись на непойми что

  • Добавил строчки, которые определяют родителя для моего GameObject

  • Ну и поменял значение Scale на 1, 1, 1, то есть размеры как у бати (Parent) Теперь код: (Перетащил canvas в инспекторе)

        private GameObject prefab;          //Текущий префаб
        public Transform canvas;            //Батя для префаба
    

(Поменял положение префаба)

        LoadPrefab();                   //При загрузке сцены слонируем случайны из списка префаб
        prefab.transform.SetParent(canvas, true);
        prefab.transform.localScale = new Vector3(1,1,1);
→ Ссылка