Баг при спавне объектов UNITY
Всем привет, столкнулся с такой проблемой:
У меня есть объект (с названием Content), в котором стоит компонент Grid Layout Group и префаб который через скрипт я создаю как дочерний объект content'a.

Прикрепил скриншот content'a и то, как выглядит префаб если добавить его в editore. Вот такую картину я наблюдаю когда создаю объекты через скрипт(первый объект в content'e был добавлен в editor'e)
Если в рантайме в ручную в Content перетащить префаб, то он встанет как нужно:
Вот такой у меня код создания перфабов:
private IEnumerator getInfoTopUsers()
{
loadBar.SetActive(true);
UnityWebRequest request = UnityWebRequest.Get(link + $"?type=getTop&user_id={user_id}");
yield return request.SendWebRequest();
if (request.isDone)
{
dataInfoTopUsers data = JsonUtility.FromJson<dataInfoTopUsers>(request.downloadHandler.text);
int mesto = 1;
foreach(Users us in data.users)
{
GameObject obg = Instantiate(prefabBlock);
obg.transform.SetParent(parrent.transform);
blockController bc = obg.GetComponent<blockController>();
bc.name.text = us.name;
bc.score.text = us.value;
bc.mesto.text = mesto.ToString();
if(us.user_id == int.Parse(user_id))
{
bc.serRedText();
}
mesto++;
}
loadBar.SetActive(false);
leaderPanel.SetActive(true);
}
}
Скрипт BlockController имеет в себе такой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class blockController : MonoBehaviour
{
public Text mesto;
public Text name;
public Text score;
public void serRedText()
{
Image image = this.gameObject.GetComponent<Image>();
image.color = new Color(250/255.0f, 201/255.0f, 89/255.0f,255 / 255.0f);
}
}
В чём может быть причина этого?
Ответы (1 шт):
Вопрос задан ужасно, нужно додуматься до сути проблемы вглядываясь в скрин.
Ваша проблема в том что вы спавните префаб на сцене, а затем меняете родителя на объект канваса в результате чего он не тех размеров.
При смене родителя размер, как и локальный поворос с позицией пересчитывается, что бы оставаться прежнем, то есть если задать объекту с скейлом 1 родителя с скейлом 0.5, его размер пересчитается на 2, что бы остаться прежним.
Просто указывайте родителя вторым аргументом инстантиейта.
Instantiate(prefabBlock, parrent.transform);
И нет это не баг.

