【问题标题】:Unity add Text by C# but don't showUnity通过C#添加文本但不显示
【发布时间】: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 好的,我会试试的。谢谢。

标签: c# unity3d text


【解决方案1】:

试试instanciate

制作一个包含

的预制件

画布

  • 文字
  • 文本显示

矩形变换

  • 文字

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

在 文本显示.cs

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

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

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

}

在您的控制器脚本中。

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!!");

}

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2017-07-29
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多