我参加的第一个商业项目是第一个人称拼图游戏。在很大程度上,我编写了一整个关卡的编辑器。你能够想象,UI是其中很大的一部分。我曩昔完成UI的办法并不是一个很好的完成。因而,关于我的下一个项目,我决定开发一个更好的系统,这便是我想要的。

unity拼UI_UI


我首先想到的是,应该有一个类来管理所有的元素。所以我把它命名为UIManager。这是仅有一个与UI相关的类,其他组件将知道这一点。它会将恳求的UI元素显示在屏幕上,并通知他们该做什么。由于每次只有一个UIManager,我把它变成了单例。

为了方便地在不同的UI状况之间切换(主菜单、游戏、暂停等),我决定为每个用户创建一个面板。在我的关卡中,我有了MainMenuPanel,InGamePanel和PausePanel。正如我上面提到的,UIManager只会通知这些面板该做什么。知道怎么去做应该是这些面板的作业。出于这个原因,为每个面板创建一个脚本似乎是个好主意。别的,我在转换过程中创建了一个枚举。

现在我有一个UIManager类,它在面板之间切换,有时通知它们该做什么。这便是它的样子:

现在,我能够很容易地阻隔每个面板的功能。假如我需求从一个特定的面板调用一个特定的办法,它也会通过UIManager来完成。例如,让咱们创建一个“FadePanel”,它将担任在恳求中淡入和淡出。下面是这个特定面板的代码:

unity拼UI_unity拼UI_02


unity拼UI_unity拼UI_03


现在,咱们能够增加几行代码从UIManager中调用 Fade() 办法:

unity拼UI_UI_04


unity拼UI_UI_05


为了调用淡出作用,我只需求在UIManager上调用Fade() 办法就能够。

unity拼UI_商业_06


unity拼UI_UI_07


在最近的几个项目中,我一直在运用这个设计,到目前为止,我发现它十分有用、有安排并且易于调试。假如这是一种欠好的做法,或者能够改进的话,请通知我。假如您知道的话,我想学习一种更好的安排UI的办法。