【发布时间】:2017-06-05 14:47:14
【问题描述】:
我的统一版本是 5.5.2f。我尝试使用 C# 创建文本并将其添加到父 GameObject A,但它没有显示。我已经为父 GameObject A 添加了纹理,我可以看到纹理。
当我运行程序时,我发现文本的首选宽度和首选高度为零,所以我猜这可能会导致问题。
这是我的代码,Obj 是父 GameObject 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;
}
【问题讨论】:
-
文本必须在画布下。如果文本有父对象,则该父对象必须在画布下。
-
@Programmer 我已经编辑了答案,但文本仍然没有显示。你的意思是画布必须是根对象并且它不应该有父对象吗?
-
您的场景中似乎连 Canvas 都没有。您应该通过转到 GameObject-->UI-->Canvas 从编辑器中创建一个。之后,使用公共 Canvas 来保存该 Canvas,然后您可以将其用作 Text 的父级。如果您决定从脚本创建画布,请使用来自this 答案的
createCanvas函数。它返回父 Canvas,因此您可以将返回的 GameObject 用作Text的父级。 -
如果没有显示,则将文本位置重置到屏幕中间。您可以使用
RectTransform.anchoredPosition3D执行此操作。请注意,RectTransform在您将其设为Canvas的子代后,会自动附加到Text。请参阅this 了解如何更改 UI/文本位置。 -
@Programmer 好的,我会试试的。谢谢。