Skip to main content
ARShow
ARShow
 首页 » 资源教程 » Unity3D教程

Unity3D UI编程,告诉你一种更好的组织UI的方法!

2017年07月04日 22:54:31172980蛮牛网

UI编程

我参与的第一个商业项目是第一个人称拼图游戏。在很大程度上,我编写了一整个关卡的编辑器。你可以想象,UI是其中很大的一部分。我过去实现UI的方法并不是一个很好的实现。因此,对于我的下一个项目,我决定开发一个更好的系统,这就是我想要的。

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第1张

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

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

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

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第2张

现在,我可以很容易地隔离每个面板的功能。如果我需要从一个特定的面板调用一个特定的方法,它也会通过UIManager来完成。例如,让我们创建一个“FadePanel”,它将负责在请求中淡入和淡出。下面是这个特定面板的代码: 

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第3张

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第4张

现在,我们可以添加几行代码从UIManager中调用 Fade() 方法:

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第5张

为了调用淡出效果,我只需要在UIManager上调用Fade() 方法就可以。

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第6张

Unity3D UI编程,告诉你一种更好的组织UI的方法! Unity3D教程 第7张

在最近的几个项目中,我一直在使用这个设计,到目前为止,我发现它非常有用、有组织并且易于调试。如果这是一种不好的做法,或者可以改进的话,请告诉我。如果您知道的话,我想学习一种更好的组织UI的方法。


评论列表暂无评论
发表评论