【问题标题】:Unity - chat not on top of everythingUnity - 聊天不是最重要的
【发布时间】:2014-10-08 00:24:24
【问题描述】:

所以,我一直在寻找这个,我觉得我已经尝试了几乎所有的东西,但我仍然不够。

基本的想法是进行聊天,并且还能够在该聊天窗口前面放置一些东西(比如说一个可拖动的菜单)。

首先,我将聊天设置为 GUI 元素。它工作完美.. 自动换行等等,但它总是在其他一切之上,所以这并不适合我想做的事情。

聊天框也会根据您的屏幕分辨率进行缩放。

我认为主要问题是在不使用 GUI 时将其很好地包装起来,而我完全没有想法。

还想说明聊天中的“菜单”将包含游戏对象,因此它不会是另一个 GUI 元素。

这还能做到吗?

【问题讨论】:

  • 这在gamedev.stackexchange.com 上可能更合适,但我已经与 Unity3D 和 IIRC 打过交道,GUI 被绘制为 z 轴上最前面的元素 - 所以我不认为您可以在他们面前获得实际的gameobjects。另外,我认为 GUI 实际上是按照它们在脚本中定义的顺序呈现的,因此您希望最顶层的 GUI 成为 OnGUI() 调用中的最后一件事。最后,作为一个侧面的想法,您可能想将渲染到纹理视为一种拥有包含 gameobjects 的 GUI 的方式:docs.unity3d.com/Manual/class-RenderTexture.html
  • 听起来对您来说最好的选择是使用GUI depth control,只需相应地设置深度以使其前进和后退。如果您还希望能够在其前面获取游戏对象,则必须开始使用对象 GUI 的不错示例,其中 NGUI 资产
  • 我之前实际上尝试过渲染纹理,但由于我认为是 alpha,它表现得很奇怪。由于窗口不会透明,因此它实际上可能会起作用。我再试一次!谢谢!

标签: c# user-interface unity3d chat unityscript


【解决方案1】:

在绘制您的聊天窗口之前使用 GUI.depth=10,在所有内容现在应该出现在顶部之后使用 GUI.depth=5。

来自文档:

当您同时运行不同的脚本时,设置此项以确定顺序。以较低深度值绘制的 GUI 元素将出现在具有较高深度值的元素之上(即,您可以将深度视为距相机的“距离”)。

如果您不想这样做.. 确定绘图顺序。最后抽到的都是最上面的。

我知道在这个阶段可能很难做到这一点,但最好让一个 OnGUI 在您的整个游戏/应用程序中处于活动状态。拥有多个会降低性能。

编辑:要在 GUI 之上包含场景渲染,您可以将场景渲染到单独的相机(没有 gui)并让这个相机渲染到纹理。然后可以通过使用 GUI.DrawTexture 在您的 gui 中使用此纹理。

【讨论】:

  • gui.depth 仅适用于其他 GUI 元素。正如我所提到的,覆盖窗口不是 GUI 元素。这就是 Unity 的方式,GUI 是最后绘制的,所以唯一的方法似乎是使用 RenderTexture,我还没来得及尝试它。它可能适用于我想要的,但也可能不会。
  • 是的,渲染纹理。这就是我们接下来要尝试的! :) 谢谢!
猜你喜欢
  • 2017-05-25
  • 2016-08-25
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多