C# 未呈现UI文本,但显示在层次结构中—;少了什么?

C# 未呈现UI文本,但显示在层次结构中—;少了什么?,c#,unity3d,C#,Unity3d,尝试将动态创建的文本显示到画布,但未进行渲染。 在创建画布后,将一个空的游戏对象作为子对象附加,并将以下脚本附加到该子对象。运行后,对象显示在层次结构中,但未渲染。可能我缺少一些内容: GameObject o; void Start() { GameObject test = new GameObject("myTextGO"); test.transform.SetParent(this.transform); // test.transform.SetParent(

尝试将动态创建的文本显示到画布,但未进行渲染。 在创建画布后,将一个空的游戏对象作为子对象附加,并将以下脚本附加到该子对象。运行后,对象显示在层次结构中,但未渲染。可能我缺少一些内容:

GameObject o;

void Start() {
    GameObject test = new GameObject("myTextGO");
    test.transform.SetParent(this.transform);
   // test.transform.SetParent(o.transform);

    Text myText = test.AddComponent<Text>();
    myText.text = "Hello there!";
 }
gameobjecto;
void Start(){
游戏对象测试=新游戏对象(“myTextGO”);
test.transform.SetParent(this.transform);
//test.transform.SetParent(o.transform);
Text myText=test.AddComponent();
myText.text=“你好!”;
}

还尝试了其他几种组合,但没有文本不呈现。需要了解解决方案。

文本对象没有附加字体。 尝试添加这一行

myText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
myText.font=Resources.GetBuiltinResource(“Arial.ttf”);

文本对象没有附加字体。 尝试添加这一行

myText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
myText.font=Resources.GetBuiltinResource(“Arial.ttf”);

动态和手动创建UI文本时需要做三件事:

  • 字体
  • 正确的养育方式
  • RectTransform(现在,当UI组件 已附加到游戏对象)
我假设您使用的是最新的Unity版本,因此只需执行前两项:

提供文本组件使用的字体,如答案所述。另外,在使用
transform.SetParent
时,必须向其提供
false
。这会使UI组件保持其本地方向

void CreateText(GameObject canvas, string text)
{
    //Create Canvas Text and make it child of the Canvas
    GameObject txtObj = new GameObject("myTextGO");
    txtObj.transform.SetParent(canvas.transform, false);

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

这就是手动创建文本组件的方法,但不应再使用它。让Unity自动做到这一点。应使用创建UI对象。它减少了创建代码失败或在问题中遇到类似问题的可能性。使用创建
文本
资源,然后使用创建
文本
本身

void CreateText(游戏对象画布,字符串文本)
{
DefaultControls.Resources uiResources=新的DefaultControls.Resources();
GameObject uiText=DefaultControls.CreateText(uiResources);
uiText.transform.SetParent(canvas.transform,false);
uiText.GetComponent().text=文本;
//更改文本位置?
//uiText.GetComponent().sizeDelta=新向量2(100f,100f);
}

动态和手动创建UI文本时需要做三件事:

  • 字体
  • 正确的养育方式
  • RectTransform(现在,当UI组件 已附加到游戏对象)
我假设您使用的是最新的Unity版本,因此只需执行前两项:

提供文本组件使用的字体,如答案所述。另外,在使用
transform.SetParent
时,必须向其提供
false
。这会使UI组件保持其本地方向

void CreateText(GameObject canvas, string text)
{
    //Create Canvas Text and make it child of the Canvas
    GameObject txtObj = new GameObject("myTextGO");
    txtObj.transform.SetParent(canvas.transform, false);

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

这就是手动创建文本组件的方法,但不应再使用它。让Unity自动做到这一点。应使用创建UI对象。它减少了创建代码失败或在问题中遇到类似问题的可能性。使用创建
文本
资源,然后使用创建
文本
本身

void CreateText(游戏对象画布,字符串文本)
{
DefaultControls.Resources uiResources=新的DefaultControls.Resources();
GameObject uiText=DefaultControls.CreateText(uiResources);
uiText.transform.SetParent(canvas.transform,false);
uiText.GetComponent().text=文本;
//更改文本位置?
//uiText.GetComponent().sizeDelta=新向量2(100f,100f);
}


您需要矩形变换吗?它只是一行文本。需要吗?我通过在播放模式下重置转换进行了测试,但没有出现。你需要一个RectTransform吗?它只是一行文本。需要吗?我通过重置播放模式下的转换进行了测试,但没有出现。是的。成功了。不知道为什么教程不提到这个?太好了!恐怕有一些不好的教程。你能告诉我如何将它的位置设置为(0,0)吗?创建的子对象有一个奇数位置。这不起作用:test.transform.position=新矢量3(0.0f、1f、0.0f);尝试改用test.transform.localPosition。成功了。不知道为什么教程不提到这个?太好了!恐怕有一些不好的教程。你能告诉我如何将它的位置设置为(0,0)吗?创建的子对象有一个奇数位置。这不起作用:test.transform.position=新矢量3(0.0f、1f、0.0f);尝试使用test.transform.localPosition而不是使用nice解释。如果字符串增长,如何使uiText大小自动/动态增长?并为多个方法调用检索其其他实例的位置?对于//uiText.GetComponent().sizeDelta=newvector2(getWidth/*/viceVersa,100f);“自动/动态”…这不是用
sizeDelta
完成的。阅读并观看链接的视频。你能提到我如何为这样多个方法调用堆叠文本对象吗?我不知道你所说的“为多个方法调用堆叠文本对象”是什么意思。你能提出新问题吗?当然。我将发布一个新问题。很好的解释。如果字符串增长,如何使uiText大小自动/动态增长?并为多个方法调用检索其其他实例的位置?对于//uiText.GetComponent().sizeDelta=newvector2(getWidth/*/viceVersa,100f);“自动/动态”…这不是用
sizeDelta
完成的。阅读并观看链接的视频。你能提到我如何为这样多个方法调用堆叠文本对象吗?我不知道你所说的“为多个方法调用堆叠文本对象”是什么意思。你能提出新问题吗?当然。我将发布一个新问题。