Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时创建新的父子对象?_C#_Unity3d - Fatal编程技术网

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也遵循相同的自上而下规则?好吧,不出现的问题已经解决了。你应该用设置的屏幕截图创建新问题。什么是附加到什么,你起诉什么组件,最后是场景中的当前外观。同时展示你期望它是什么样子。没有这些,你可能得不到答案,因为人们不会知道这个问题。谢谢。添加了一个新的屏幕截图。看起来你的新问题是解决你已经接受了另一个问题的答案。如果是这样,那么别忘了接受这个。快乐编码!更新后的代码不完全是随高度变化的,因此,您可以重新修改吗