Unity如何通过脚本创建文本?
Posted
技术标签:
【中文标题】Unity如何通过脚本创建文本?【英文标题】:Unity how to Create Texts via script? 【发布时间】:2022-01-17 06:25:59 【问题描述】:我正在尝试通过脚本创建文本。我想用某个标签的对象名称创建文本。
“例如,如果我有两个名为 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 个应该显示的对象。
请帮忙。
【问题讨论】:
【参考方案1】:您需要在新游戏对象上创建一个文本对象。
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 = ...
【讨论】:
最后两行应该在循环内吧?我测试了您的代码,但屏幕上没有显示任何内容 层级窗口中是否创建了任何内容? 是的,在我的画布中创建了三个游戏对象,我有三个对象,这很好。但没有显示文字 它们在显示矩形内吗?在画布的左下角创建了一个新的游戏对象。 当我运行游戏时,我可以在场景窗口中看到左下角有一些东西,但是如何更改位置?我无法控制它们,因为当我停止游戏时它们就会消失【参考方案2】:Unity 中的许多组件每个游戏对象只能添加一次。这意味着您需要为每个要显示的文本创建一个单独的游戏对象。 解决此问题的一种典型方法是创建一个已经具有文本元素的游戏对象的“预制件”。这样您就可以设置默认字体和其他设置。
然后在代码中使用该预制件上的 Instantiate 方法并通过 GetComponent() 访问文本组件实例以设置要显示的所需字符串。
【讨论】:
以上是关于Unity如何通过脚本创建文本?的主要内容,如果未能解决你的问题,请参考以下文章
在 Unity 4.6 中从 C# 脚本创建 UI 按钮,无需任何预制件 [重复]