Unity通过C#but don#x27添加文本;不显示

Unity通过C#but don#x27添加文本;不显示,c#,unity3d,text,C#,Unity3d,Text,我的unity版本是5.5.2f。我尝试使用C#创建文本并将其添加到父游戏对象a中,但没有显示。我已经添加了一个纹理到父游戏对象a,我可以看到纹理 当我运行程序时,我发现文本的首选宽度和首选高度为零,所以我想这可能会导致问题 这是我的代码,Obj是父游戏对象A public void setText(string value) { if (text == null) { GameObject targetObj = new GameObject();

我的unity版本是5.5.2f。我尝试使用C#创建文本并将其添加到父游戏对象a中,但没有显示。我已经添加了一个纹理到父游戏对象a,我可以看到纹理

当我运行程序时,我发现文本的首选宽度和首选高度为零,所以我想这可能会导致问题

这是我的代码,Obj是父游戏对象A

public void setText(string value)
{

    if (text == null)
    {

        GameObject targetObj = new GameObject();

        Canvas canvas = Obj.AddComponent<Canvas>();
        canvas.transform.SetParent(Obj.transform ,false);


        targetObj.name = "displayTextObject";
        targetObj.transform.SetParent(canvas.transform, false);

        text = targetObj.AddComponent<Text>();

        text.name = "displayText";

        Color color = new Color(0, 0, 0);

        text.color = color;

        Font font = new Font("Arial");

        text.font = font;

        gridBgObject.SetActive(false);
    }

    text.text = value;
}
public void setText(字符串值)
{
if(text==null)
{
GameObject targetObj=新GameObject();
Canvas Canvas=Obj.AddComponent();
canvas.transform.SetParent(Obj.transform,false);
targetObj.name=“displayTextObject”;
targetObj.transform.SetParent(canvas.transform,false);
text=targetObj.AddComponent();
text.name=“displayText”;
颜色=新颜色(0,0,0);
text.color=颜色;
Font=新字体(“Arial”);
text.font=font;
gridBgObject.SetActive(false);
}
text.text=值;
}

尝试使用
instanciate

制作一个包含

帆布

  • 正文
  • 文本显示

矩形变换

  • 正文

  • 文本显示 (如果选择此选项,则必须将父对象设置为画布)

在 TextDisplay.cs

[RequireComponent (typeof (Text))]
public class TextDisplay : MonoBehaviour{
    public Text targetText;

    void Awake(){
        targetText = GetComponent<Text> ();
    }

    public void SetText(string messageToDisplay){
        targetText.text = messageToDisplay;
    }

}

文本必须在画布下。如果文本有父对象,则该父对象必须位于画布下。@程序员我已经编辑了答案,但文本仍然没有显示。你的意思是画布必须是根对象,并且它应该没有父对象吗?看起来场景中甚至没有画布。您应该通过转到GameObject-->UI-->画布从编辑器中创建一个。之后,使用公共画布保存该画布,然后可以将其用作文本的父级。如果您决定从脚本创建画布,请使用answer中的
createCanvas
函数。它返回父画布,以便您可以使用返回的游戏对象作为
文本的父画布。如果未显示,则将文本位置重置到屏幕中间。您可以使用
RectTransform.anchoredPosition3D
完成此操作。请注意,将
rectcransform
设置为
画布
的子项后,它会自动附加到
文本
。有关如何更改UI/文本位置的信息,请参阅。@Programmer ok,我将尝试。非常感谢。
public GameObject textDisplayPrefab;
public Transform rootTransform;

public TextDisplay CreateNewTextDisplay(){
    GameObject newTextDisplayObject = Instanciate(textDisplayPrefab) as GameObject;
    newTextDisplayObject.transform.SetParent(rootTransform, false);
    TextDisplay newTextDisplay = newTextDisplayObject.GetComponent<TextDisplay>();
return newTextDisplay;

}
if(textDisplay == null){
    textDisplay = CreateNewTextDisplay();
    textDisplay.SetText("your string here!!");

}