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

Я хочу создать динамическую кнопку пользовательского интерфейса,

У меня есть одна сборная,

вот код:

  public class SFSConnect : MonoBehaviour {
        SmartFox sfs;

        public GameObject cnv1;
        public GameObject potchPrf;
        public Canvas fCanvas;
    void Start () {
    fCanvas = cnv1.GetComponent<Canvas> ();

            Button ptf1 = potchPrf.GetComponent<Button> ();

            Instantiate(ptf1,new Vector3 (0, 0, 10), Quaternion.identity);


            potchPrf.transform.SetParent (fCanvas.transform);
    }

}

Я перепробовал тысячи сообщений, но ничего не вышло


person Muhammet Demir    schedule 05.09.2017    source источник


Ответы (1)


Вероятно, проблема связана с potchPrf.transform.SetParent (fCanvas.transform);, и это означает, что вы пытаетесь изменить сборный объект. Вы не можете изменить родительский элемент префаба из кода.

Может быть, вы хотели установить родительский объект для созданного объекта?

Если это так, сохраните его в переменной

GameObject uiObj = Instantiate<GameObject>(ptf1,new Vector3 (0, 0, 10), Quaternion.identity);
uiObj.transform.SetParent (fCanvas.transform);

Кроме того, не пытайтесь сделать префаб родительским для GameObject. Вы столкнулись с этой проблемой. И GameObject, который вы хотите установить как родительский, и целевой (дочерний) GameObject, никогда не должны быть сборными.


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

person Programmer    schedule 05.09.2017
comment
Спасибо! Использую DefaultControls заработало !. Итак, как изменить ширину и высоту uiButton? - person Muhammet Demir; 06.09.2017
comment
Вы имеете в виду позицию UI-объекта? - person Programmer; 06.09.2017
comment
Нет, изменить масштаб UiObject - person Muhammet Demir; 06.09.2017
comment
RectTransform.sizeDelta используется для изменения размера пользовательского интерфейса по осям x, y. - person Programmer; 06.09.2017
comment
4 по какой-то причине это неверно в моем случае. Я пытаюсь изменить родительский объект на что-то, что находится в Prefebs. (Могу ли я сделать это?). Или я должен задать другой вопрос (отличается ли он от этой ситуации?) - person Waseem Ahmad Naeem; 31.05.2018
comment
@WaseemAhmadNaeem Я думаю, вам нужно будет предоставить снимок экрана, показывающий, где находится объект, Иерархия и куда указывает префаб объекта, на который он ссылается. Это означает создание нового вопроса. - person Programmer; 31.05.2018