Unity如何通过脚本创建文本?

Unity how to Create Texts via script?

我正在尝试通过脚本创建文本。我想用某个标签的对象名称创建文本。

“例如,如果我有两个名为 Cube 和 Sphere 的对象,并且都有一个标签“TargetObj”,那么它们的名称应该在屏幕上显示为文本(在 Cube 和 Sphere 的例子中)”

不管对象有多少,我都想实现这个。所以需要一个循环。

这是我目前为止尝试过的方法。

[SerializeField] GameObject LevelCanvas; 
       targetObjects = GameObject.FindGameObjectsWithTag("TargetObj");
            foreach (var obj in targetObjects)
            {
              
               Text mytext = LevelCanvas.AddComponent<Text>();
                 mytext.text = "Find " + obj.name;
                 Font ArialFont = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf");
                 mytext.font = ArialFont;
                 mytext.material = ArialFont.material;    
            }

虽然我还有 2 个应该显示的对象,但它只显示了一个对象名称。

unity 中的许多组件每个游戏对象只能添加一次。这意味着您需要为每个要显示的文本创建一个单独的游戏对象。 解决这个问题的典型方法是创建一个已经具有文本元素的游戏对象的“预制件”。这样您就可以设置默认字体和其他设置。

然后在代码中对该预制件使用 Instantiate 方法,并通过 GetComponent() 访问文本组件实例以设置要显示的所需字符串。

您需要在新游戏对象上创建文本对象。

static Text CreateText(Transform parent)
{
    var go = new GameObject();
    go.transform.parent = parent;
    var text = go.AddComponent<Text>();
    return text;
}
var mytext = CreateText(LevelCanvas.transform);
myext.text = ...