统一错误:设置位于预制件中的变换的父级被禁用以防止数据损坏

Muh*_*mir 4 c# unity-game-engine unity2d

我想动态创建ui按钮,

我有一个预制件,

这是代码:

  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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我尝试了数千个帖子,但什么也没发生

Pro*_*mer 6

问题可能来自potchPrf.transform.SetParent (fCanvas.transform);,这意味着您正在尝试修改预制件。您无法通过代码更改预制件的父级。

也许您想设置实例化对象的父级?

如果是这种情况,则将其存储在变量中

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

另外,不要试图让预制件成为游戏对象的父级。你遇到了这个问题。您要设置为父级的 GameObject 和目标(子级)GameObject 都不应该是预制件。


如果您的 UI 并不复杂,我会完全避免这样做,而只是使用DefaultControls动态创建 UI。请参阅这篇文章,其中包含有关如何使用DefaultControls创建 UI 控件的许多示例。