在Unity的OnGUI中变形GUI元素

时间:2013-03-16 20:21:52

标签: user-interface unity3d distortion homography

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

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

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

有没有办法用Unity执行此操作,理想情况下无需访问专业版功能?

2 个答案:

答案 0 :(得分:2)

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

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

  • 您必须使用代码流来布局组件,而不是使用更具声明性(或至少更结构化)的方式来执行此操作。
  • 效率很低(至少有一次抽奖调用)。
  • 根本不灵活。当按钮数量增加时,添加,删除,启用/禁用按钮可以快速进行操作。
  

然而,我想要的是有时候渲染完全相同的gui   元素,可以是动态的,因此不仅仅是放入预制件中   纹理,成一个梯形的区域,看起来好像   那个gui实际上是在一个平面上,被推离了中心   屏幕,并稍微旋转。绘制的所有gui按钮   该功能仍应正常响应。

使用Unity的{​​{1}}课程即使不是不可能,这也很难。

我看到了两种可能性:

  1. 请勿使用GUI类来执行此操作。如果您的GUI足够简单,您可以使用以下方法实现自己的(甚至是3d)按钮:
    • 具有按钮背景纹理的网格(平面或梯形网格)
    • TextMesh用于绘制3D文字
    • RayCasting检查按钮是否已被按下
  2. 使用实现更高级GUI系统的库,如NGUI

答案 1 :(得分:0)

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