【问题标题】:hiding guiText behind game object将 guiText 隐藏在游戏对象后面
【发布时间】:2013-04-24 10:05:22
【问题描述】:

我的应用顶部有这个HUD,它显示了分数(左上角)、一个关于按钮(右上角)和中间的时间线。随着时间的推移,时间线“滚动”。

我想在时间线上画一些数字来显示它所代表的年份。我目前正在使用 GuiText 来做这件事。不幸的是,我注意到了这一点,而时间线栏位于场景中左上角的对象后面。 GUIText 保留在该对象上。

GUIText 是否总是绘制在其他所有内容之上,还是有办法将其隐藏在游戏对象后面?

更新:

经过一些测试/研究后,我得出的结论是,可能只有一种方法可以让 GUIText 不出现在某些对象的前面。

如果一个人希望他们的文本(或任何类型的 GUI 内容)位于某些对象的后面,则必须至少使用一个额外的摄像头。

第二个摄像头应该设置为“仅深度”,并且深度值低于主摄像头。这样,主摄像头绘制的所有内容都将位于第二个摄像头绘制的所有内容之上。

使用剔除遮罩并设置您希望在不同层中显示/隐藏的对象。

【问题讨论】:

  • 您将无法在其他游戏对象下渲染 guiText,至少在不使用其他相机的情况下是这样。如果您希望 GUI 成为场景的 3d 元素,则必须考虑替代 GUI 解决方案,例如 NGUI。
  • 我认为问题在于您绘制物品的顺序。时间轴上的文本是在按钮上绘制的?这是因为文本是在按钮之后呈现的。尝试将该代码放在按钮之前。
  • 我认为问题与作为 GUI 的文本和按钮/图标是游戏对象(立方体)有关。我相信 GUI 的东西总是最后绘制的。这是正确的吗?
  • 除 GUIText 之外还有什么方法可以绘制文本?

标签: c# unity3d


【解决方案1】:

您应该能够使用着色器来做到这一点。

只需将对象的深度值从顶点着色器传递到 gui 的像素着色器。使用此值确定像素的 alpha 值。

在使用您自己的游戏引擎并且可以访问代码时,有很多方法可以做到这一点,但 Unity 会在这里限制您。我不确定 Unity 是否允许您将像素着色器应用于 GUI。如果没有,请考虑在 gui 的这个特定部分使用广告牌并进行类似操作。

【讨论】:

  • 这是一个非常优雅的解决方案,没想到。能否为我们这些不太熟悉着色器的人详细描述一下?
【解决方案2】:

经过一些测试/研究后,我得出的结论是,可能只有一种方法可以让 GUIText 不出现在某些对象的前面。

如果一个人希望他们的文本(或任何类型的 GUI 内容)位于某些对象的后面,则必须至少使用一个额外的摄像头。

第二个摄像头应设置为“仅深度”,并且深度值低于主摄像头。这样,主摄像头绘制的所有内容都将位于第二个摄像头绘制的所有内容之上。

使用剔除遮罩并设置您希望在不同层中出现/隐藏的对象。

【讨论】:

  • 您应该编辑/更新您的原始帖子,而不是在这里写下您的答案。
  • 只是出于好奇,为什么不使用 3D 文本呢?如果您想模仿 guitext,请将其设置为您的相机对象的子对象,以便文本始终保持在视图中。我认为这在计算上比创建第二台相机要便宜。另外,已经有一个 community shader 用于增加文本的深度。
  • 我只是忘记了 3D 文本 :) 而且我什至知道着色器 -_- 也是很好的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多