C# 如何在运行时创建新的父子对象?
对于按钮单击,将创建两个新游戏对象,第二个对象设置为第一个对象的子对象,第一个对象是附加对象的子对象。但它不在层次结构上工作/显示,但创建的对象不显示在游戏窗口中 代码如下:C# 如何在运行时创建新的父子对象?,c#,unity3d,C#,Unity3d,对于按钮单击,将创建两个新游戏对象,第二个对象设置为第一个对象的子对象,第一个对象是附加对象的子对象。但它不在层次结构上工作/显示,但创建的对象不显示在游戏窗口中 代码如下: public void CreateTextButtonClick(string text) { Debug.Log("Hey starting of this.."); //Create Canvas Text and make it child of the Canvas 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..");
}
public void createTextButton单击(字符串文本)
{
Log(“嘿,开始这个…”);
//创建画布文本并使其成为画布的子级
GameObject txtObj=新游戏对象(“myText”);
txtObj.transform.SetParent(this.transform,false);
游戏对象平移=新游戏对象(“文本”);
平移.transform.SetParent(txtObj.transform);
//附加文本、矩形变换和put字体
Text txt=pan.AddComponent();
txt.text=文本;
Font-arialFont=Resources.GetBuiltinResource(“Arial.ttf”);
txt.font=arialFont;
txt.linespace=1;
txt.color=color.blue;
//形象
//游戏对象返回=新游戏对象(“图像”);
//back.transform.SetParent(txtObj.transform);
//Image i=back.AddComponent();
Log(“嘿,完成了…”);
}
实现这种多层次对象制作的解决方案是什么?您在第一个要成为画布子对象的对象中正确使用了
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;
}
public void createTextButton单击(字符串文本)
{
Log(“嘿,开始这个…”);
//创建画布文本并使其成为画布的子级
GameObject txtObj=新游戏对象(“myText”);
txtObj.AddComponent();
txtObj.transform.SetParent(this.transform,false);
游戏对象平移=新游戏对象(“文本”);
pan.transform.SetParent(txtObj.transform,false);
//附加文本、矩形变换和put字体
Text txt=pan.AddComponent();
txt.text=文本;
Font-arialFont=Resources.GetBuiltinResource(“Arial.ttf”);
txt.font=arialFont;
txt.linespace=1;
txt.color=color.blue;
}
在你的注释代码中,看起来你也计划添加另一个带有
Image
组件的子对象,我已经看到了这个错误。别忘了也要这样做。你必须这样做,否则你会有问题的。这适用于您计划放置在画布
下的所有内容,您在第一个对象中正确使用了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;
}
public void createTextButton单击(字符串文本)
{
Log(“嘿,开始这个…”);
//创建画布文本并使其成为画布的子级
GameObject txtObj=新游戏对象(“myText”);
txtObj.AddComponent();
txtObj.transform.SetParent(this.transform,false);
游戏对象平移=新游戏对象(“文本”);
pan.transform.SetParent(txtObj.transform,false);
//附加文本、矩形变换和put字体
Text txt=pan.AddComponent();
txt.text=文本;
Font-arialFont=Resources.GetBuiltinResource(“Arial.ttf”);
txt.font=arialFont;
txt.linespace=1;
txt.color=color.blue;
}
在你的注释代码中,看起来你也计划添加另一个带有
Image
组件的子对象,我已经看到了这个错误。别忘了也要这样做。你必须这样做,否则你会有问题的。这适用于您计划放置在画布下的所有内容
您可以详细说明“不工作”吗?你的错误到底是什么?它没有显示对象。真的不是一个好的提问方式。如果我们不理解你的问题,我们真的帮不了你。“不工作”=不在游戏视图中显示?没有显示在层次选项卡中?错误?显示在层次结构上,但创建的对象未显示在游戏窗口中。您能详细说明“不工作”吗?你的错误到底是什么?它没有显示对象。真的不是一个好的提问方式。如果我们不理解你的问题,我们真的帮不了你。“不工作”=不在游戏视图中显示?没有显示在层次选项卡中?错误?显示在层次结构上,但创建的对象未显示在游戏窗口中。非常感谢。它现在出现了。但对于多按钮单击,带有子对象的txtObj对象显示在同一位置,而带有文本txt=txtObj.AddComponent()的同一对象(不带子对象);遵循其父级的垂直布局规则,并以从上到下的顺序显示。如何解决这个问题,使这个新创建的带有子对象的txtObj也遵循相同的自上而下规则?好吧,不出现的问题已经解决了。你应该用设置的屏幕截图创建新问题。什么是附加到什么,你起诉什么组件,最后是场景中的当前外观。同时展示你期望它是什么样子。没有这些,你可能得不到答案,因为人们不会知道这个问题。谢谢。添加了一个新的屏幕截图。看起来你的新问题是解决你已经接受了另一个问题的答案。如果是这样,那么别忘了接受这个。快乐编码!更新后的代码不完全是随高度变化的,因此,您可以重新修改吗