如何在运行时创建新的父子游戏对象?

时间:2018-07-07 02:46:50

标签: c# unity3d

对于一个按钮,单击创建两个新的gameObject,第二个被设置为第一个的子对象,第一个是附加对象的子对象。但是它不能正常工作/无法显示在层次结构上,但是创建的对象没有出现在游戏窗口中。

代码如下:

public void CreateTextButtonClick(string text)
{
    Debug.Log("Hey starting of this..");
    //Create Canvas Text and make it child of the Canvas
    GameObject txtObj = new GameObject("myText");
    txtObj.transform.SetParent(this.transform, false);


    GameObject pan = new GameObject("text");
    pan.transform.SetParent(txtObj.transform);

    //Attach Text,RectTransform, an put Font to it
    Text txt = pan.AddComponent<Text>();
    txt.text = text;
    Font arialFont = Resources.GetBuiltinResource<Font>("Arial.ttf");
    txt.font = arialFont;
    txt.lineSpacing = 1;
    txt.color = Color.blue;


    //image
    //GameObject back = new GameObject("image");
    //back.transform.SetParent(txtObj.transform);

    //Image i = back.AddComponent<Image>();

    Debug.Log("Hey its done..");

}

实现这种多层次对象制作的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

您通过向其传递SetParent使其正确地在其想要成为画布子级的第一个对象中正确使用了false

GameObject txtObj = new GameObject("myText");
txtObj.transform.SetParent(this.transform, false);

但是您没有对执行此操作,该“ text”对象将是上述对象的子对象:

GameObject pan = new GameObject("text");
pan.transform.SetParent(txtObj.transform);

您还可以通过向其传递false来解决此问题,以便UI组件保持其本地方向。无关,但我也认为您也应该添加RectTransform父对象。将RectTransform添加到“画布”下的所有内容。

您的新代码:

public void CreateTextButtonClick(string text)
{
    Debug.Log("Hey starting of this..");
    //Create Canvas Text and make it child of the Canvas
    GameObject txtObj = new GameObject("myText");
    txtObj.AddComponent<RectTransform>();
    txtObj.transform.SetParent(this.transform, false);

    GameObject pan = new GameObject("text");
    pan.transform.SetParent(txtObj.transform, false);

    //Attach Text,RectTransform, an put Font to it
    Text txt = pan.AddComponent<Text>();
    txt.text = text;
    Font arialFont = Resources.GetBuiltinResource<Font>("Arial.ttf");
    txt.font = arialFont;
    txt.lineSpacing = 1;
    txt.color = Color.blue;
}

在您的注释代码中,您似乎也打算添加另一个具有Image组件的子对象,并且我已经可以看到那里的错误了。也不要忘记这样做。否则,您将遇到问题。这适用于您计划放置在Canvas下的所有内容。