对于一个按钮,单击创建两个新的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..");
}
实现这种多层次对象制作的解决方案是什么?
答案 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
下的所有内容。