Unity TextMeshPro UGUI对象被其他精灵遮挡隐藏了。

3
我有一个问题,听起来应该很容易解决,可能是我做错了。我的游戏使用Sorting Layer元素对所有的精灵进行排序,这样它们就不会被其他精灵遮挡。
我想创建一个TextMeshPro UI对象(只是简单的文本),但由于我设置的这些排序层,它总是在其他精灵后面。我希望文本在所有精灵的前面。我尝试设置一个脚本来实现这个目标,但我不确定应该把这个脚本指向哪里。大多数答案说要指向Mesh Renderer,但这对我似乎没有用。
感谢任何建议!
编辑:这个文本与层次结构中的另一个精灵分组。
编辑2:根据Darkonekt的要求,我会尝试添加一些更详细的说明。我发现复制的步骤是:
创建一个新项目(2D),添加TMPro资源(我通过在场景中添加Text Mesh Pro UI对象并仅导入必要的内容来实现此操作)。将任何形式的精灵放入场景中(确保它是画布的子对象)。添加Text Mesh Pro UI-Text Object,确保它是画布的子对象。将画布的渲染模式设置为“屏幕空间-相机”,并将渲染相机设置为主相机。您可能需要调整精灵的大小,确保它占据大部分屏幕。回到精灵,在Sprite Renderer组件中,单击Sorting Layer,然后添加Sorting Layer。将其命名为任何你想要的名称,并确保它在默认值以下。再次在精灵上,将Sorting Layer设置为Front,文本应该已经消失在它的背后。
因为没有任何代码更改上述列出的任何值,所以没有任何代码可以展示。 后置排序层 前置排序层

你的精灵是Sprite组件还是都是UI组件?如果它们都是UI组件,你必须注意层次结构的顺序,因为Unity会按照它们在层次结构中的顺序绘制所有UI对象,层次结构中的最后一个UI元素将覆盖其余的所有元素。 - Windgate
你可以尝试修改画布层设置。我猜测TextMeshPro是通过它进行渲染的。 - Lucas Gras
@Windgate 这些都在UI中,重新排序可能可行,但我忘记提到一些事情(我编辑了问题),文本与其他精灵分组。我猜我可以尝试创建一个空对象,将文本放进去并重新排列。 - HelpMeGame
我们需要看到您的检查器的代码和图片,以便了解实际问题所在... 如果您能上传一个可重现的示例,那就更好了。 - Jonathan Alfaro
@Darkonekt 好的,谢谢。我又编辑了一下帖子,希望现在更容易理解了。 - HelpMeGame
请阅读我的回答。我已经制作了一个示例项目,并且能够重现和解决您的问题。如果您需要进一步的帮助,请给我发送私信,我将很乐意提供帮助。 - Jonathan Alfaro
1个回答

4

要实现这个功能,您需要确保以下几点:

  1. 精灵变换的位置的Z轴在检查器中为0。
  2. 画布排序层也是Front(与sprite相同)。当您将画布渲染模式设置为“屏幕空间-相机”时,此设置变得可用。
  3. 文本网格对象的矩形变换的位置的Z轴为0。

这应该能帮助您实现所需的结果。

发生这种情况的原因是,当您将Sprite的排序层设置为“Front”时,它就会位于默认层上的所有内容之上。

由于Canvas现在设置为默认层,所以除非明确指定,否则Canvas中的所有内容都将定位在默认层上。


1
非常感谢您的帮助!我不得不将一些东西移回到默认的排序层,但之后它就像魔法般地工作了! - HelpMeGame

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