1

我正在使用 Unity3D,并且我有一个在 OnGUI 内部调用的函数来布置我的应用程序的各种 gui 组件。通常,标签和按钮都在我提供的某个 Rect 内,它位于屏幕的中心。

没问题...但是,我想要有时渲染完全相同的gui元素,这些元素可以是动态的,因此不只是放入预制纹理中,放入侧面的梯形区域,看起来好像那个gui实际上是在一个平面上,从屏幕中心推开,并轻微旋转。在函数中绘制的所有 gui 按钮仍应正常响应。

我更希望我可以在 GUI.matrix 中指定一些值来将矩形映射到梯形,但我最初的探索似乎表明 gui 元素似乎没有使用同质坐标,并且一切仍然显示为矩形。

有没有办法用 Unity 做到这一点,理想情况下不需要访问专业功能?

4

2 回答 2

2

由于现在Unity3DGUI 系统不是很灵活。新的GUI 系统是尚未发布的功能之一Unity 4(我们都在等待它)。

从我的角度来看,它有几个问题,特别是:

  • 您被迫使用代码流来布局组件,而不是使用更具声明性(或至少更结构化)的方式来做到这一点。
  • 这是非常低效的(至少有一个按钮绘制调用)。
  • 它根本不灵活。当按钮数量增加时,添加、删除、启用/禁用按钮可能会很快成为一个痛苦的操作。

但是,我有时想要渲染完全相同的 gui 元素,这些元素可以是动态的,因此不只是放入预制纹理中,放入侧面的梯形区域,看起来好像那个 gui 实际上是在一个平面,从屏幕中心推开,并稍微旋转。在函数中绘制的所有 gui 按钮仍应正常响应。

Unity使用的GUI类即使不是不可能也很难获得。

我看到了两种可能性:

  1. 不要使用GUI类来做到这一点。如果你GUI足够简单,你可以使用例如实现你自己的(甚至是 3d)按钮:
    • 具有按钮背景纹理的网格(平面或梯形网格)
    • 用于绘制 3D 文本的TextMesh
    • 光线投射检查按钮是否被按下
  2. 使用实现更高级 GUI 系统(如NGUI)的库
于 2013-03-16T22:58:06.290 回答
0

当我遇到同样的问题时,我只是使用带有纹理的普通 3D GameObjects 立方体并在它们上调用OnMouseDown(PC/Mac) 或RayCasting(Android/iOS)。我想每个人都是这样的。

于 2013-03-17T19:38:11.487 回答