将文本附加到游戏对象

3
我知道有两种方法可以做到这一点,但这两种方法对我都不起作用。
我尝试的第一种方法是创建一个gameObject,然后放置一个立方体(shape)和一个带有文本的画布。我将形状、画布(世界空间)和文本的位置设置为(0,0,0),以便它们保持在一起。然而,只有立方体出现了。即使禁用立方体,文本仍然无法显示。

enter image description here

Shape

所以我将其移除并将Text Mesh添加到形状中,这要求我移除Mesh Filter。现在我只能看到一个空白的空间。我有任何设置错误吗?

enter image description here


为什么它需要在同一平面上?它应该出现在其他游戏对象的后面吗?在世界中还是只在HUD后面? - AresCaelum
我有点困惑你到底在尝试做什么?你只是想要将浮动的文字附加在一个物体上,让它始终面向玩家,并且位于中间的前方吗? - AresCaelum
@Eddge 你玩过炉石传说吗?我希望我能制作出像那样的按钮,而且所有这些按钮都像真实的物体一样,而不是2D的东西。 - Seaky Lone
@Eddge《炉石传说》的用户界面比其他任何纸牌游戏都要好。这是它如此受欢迎的原因之一。因此,它提供了一些启发性的想法来制作更好的用户界面。它是一个3D游戏,但以2D方式显示。 - Seaky Lone
我投票关闭此问题,因为根据帮助中心的定义,这不是一个编程问题。 - cigien
显示剩余2条评论
2个回答

23
您可以使用一个UI按钮游戏对象和一个3D立方体来实现这一点。步骤如下:
  1. 在空场景中创建一个3D立方体。

  2. 然后,创建一个UI按钮对象。

  3. 现在您有了按钮和画布,在像这样的情况下将画布拖到立方体的子项中:

    enter image description here

  4. 现在你必须将画布设置为“世界空间”渲染模式,删除Canvas Scaler组件,并设置“Width = Height = 1”和所有“Pos = 0”。

  5. 最后一步是设置按钮:设置“Width = Height = 100”,所有“Scale = 0.01”和“Pos Z = -0.501”。

现在您有一个完美的功能按钮,它将保持附加在立方体的前面,无论立方体的位置或旋转如何。

您当然可以添加任意数量的按钮,并将它们定位到立方体的不同面(甚至在单个面上添加多个按钮等)。

enter image description here


谢谢你的解决方案!我有一个小问题。我在另一个场景中使用了网格布局,并创建了一个新场景来尝试你的解决方案。但似乎网格布局仍然存在,所以按钮的posZ不能设置为-0.5。它会自动变成-1或0,这意味着按钮无法粘附到立方体上。我该怎么解决? - Seaky Lone
1
简单来说:你不使用“网格布局组”组件。 ;) 让按钮捕捉预设值的做法打破了它们“粘附”于可自由移动/旋转的游戏对象的初衷。 另外一件事情是:如果按钮数量很多(例如:你有几个带有多个按钮/UI 元素的游戏对象),出于性能原因(特别是在移动设备上),我将避免使用 UI 系统,而采用触发器碰撞器/射线检测系统。 - Galandil
1
这是我今年最有用的答案。它清晰地提供了在3D中使用2D元素的用法。谢谢你。 :) - xySVerma

3
我认为你在这里误解了一些事情,让我来为您澄清:
1. Canvas的使用:
Canvas应该(几乎)总是一个顶层对象,意思是它不附加到任何父级上。相反,画布作为其他对象的父级,意味着其他对象是画布的子级。
此外,拥有多个画布对象也可能会引起问题,请查看面板和布局组。
2. Text Mesh和Text之间的区别:
Text(或UI-Text)是一个对象,位于画布内以在画布空间中显示文本。另一方面,文本网格是在您的世界中渲染的对象,在3D空间中,这意味着它不应该(也可能不应该)附加到Canvas对象上。

所以你有解决方案吗?我的第一个解决方案来自于这个链接:https://answers.unity.com/questions/1185543/how-to-set-a-text-on-a-gameobject.html - Seaky Lone
嗯...我不确定我是否完全理解你的问题背景,但是尝试将画布设置为父元素,并将所有其他元素(立方体、文本网格等)放在画布内。 - Ian H.
实际上,我的意图是使用游戏对象来制作按钮,而不是使用UI按钮。如果我使用UI按钮,游戏对象将不在同一平面上。画布远高于或低于我的游戏平面。将画布更改为世界空间会破坏比例。我的意思是它会扭曲事物。因此,我正在努力创建一个与我的游戏对象在同一平面上的按钮。 - Seaky Lone
2
在2021年,添加多个画布是正确的做法。想象一个画布有静态的图像和文本,以及不断变化的文本(得分、健康等)和图像(健康图像等)。将所有静态对象放在一个画布上,并且只在Start中绘制它。其余内容在Update中处理。这样可以提高效率并节省资源,而不是一直在一个画布上绘制所有内容。 - emorphus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接