Игровой объект, созданный Unity, выдает ошибку и действует как префаб - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь сделать систему скроллинга в единстве, используя элементы пользовательского интерфейса кнопки. Я сделал шаблон для кнопки, которая не является префабом, и создал экземпляр игрового объекта с этим шаблоном, который должен сделать клон шаблона. Вместо этого он действует как префаб и выдает ошибку.

Я нашел учебник , который работал достаточно хорошо. Я следовал этому руководству до того момента, когда мне нужно было установить родителя экземпляра gameObject. Репетитор сделал это без проблем. Я не пытался связаться с человеком, который сделал этот урок, так как ему уже более 2 лет, и канал не был активным в течение как минимум 7 месяцев. Я попытался изменить его код и удалить кнопку prefab. Я обнаружил похожую проблему на этом сайте, но решение не сработало для меня.

[SerializeField]
private GameObject itemTemplate, inventoryTabWeapons;

private GameObject item;

public void GenerateItem(string name)
{
   item = Instantiate(itemTemplate) as GameObject;
   item.SetActive(true);
   item.transform.SetParent(inventoryTabWeapons.transform, false); //This line is where the error brings me to.
}

Я хотел бы опубликовать скриншоты результатов здесь, но у меня явно не хватает очков репутации.

ожидаемый результат: Кнопка должна быть сделана дочерней по отношению к ListContent, который в инспекторе установлен как inventoryTabWeapons.

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

Я получаю следующую ошибку:

Установка родительского элемента преобразования, находящегося в Prefab-активе, отключена для предотвращения повреждения данных

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

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Ошибка внезапно исчезла, когда я вышел из редактора прошлой ночью и снова открыл ее сегодня утром, хотя я уже пытался выйти и снова открыть редактор.Вместо этого я получил несколько разных ошибок, которые мне удалось устранить.Я полагаю, что решение моей проблемы просто ожидало.

0 голосов
/ 02 июня 2019

Убедитесь, что itemTemplatePrefab является PREFAB, и убедитесь, что inventoryTabWeapons НЕ является префабом, а фактическим игровым объектом в вашей сцене.Затем переписайте свой код следующим образом:

[SerializeField]
private GameObject itemTemplatePrefab, inventoryTabWeapons;

public void GenerateItem(string name)
{
    var item = Instantiate(itemTemplatePrefab);
    item.SetActive(true);
    item.transform.SetParent(inventoryTabWeapons.transform, false);
}

Так что itemTemplatePrefab - это сборный домик, а инвентаризация - это не сборный домик.

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