为什么要使用UI框架?直接使用NGUI或UGUI一拖一拉直接搭载出界面不就行了?

我相信很多小白,包括我在刚学习Unity3D UI的时候都这样想过。

我的第一款款Unity2D游戏《山地赛车》,使用的就是NGUI搭载界面。

弱联网手游一般都没什么复杂的界面,我也是很轻松花一天就把界面搭载好了,看起来好挺好看的,还花了不少时间做动态效果。

界面搭载好后,开始开发游戏内容,这下问题开始来了:

1.如何实现界面间的沟通?例如点击返回按钮,返回上一个界面,点击背包系统,弹出背包。

2.如何实现界面与游戏数据的沟通?例如点击排行榜,能列出最新的排名,点击购买车辆,能扣钱并买入新的车辆。

一开始我的做法(我相信也是大部分新手最喜欢的做法)就是为每个要触发功能的UI添加一个脚本,然后添加一个public gameobject,

然后拖入触发UI时要控制的object。在脚本的OnClick等函数里实现逻辑功能。

这样做是挺容易。很快我也花了半天时间拖来拖去,把UI要关联的各种物件绑定好。

但是接下来的各种问题让我非常头疼:

1.随着游戏系统的复杂,UI控件越来越多,各个UI直接的通讯,以及UI与GameObject之间的通讯形成一张复杂的蜘蛛网,

拖着拖着,有时候我都忘了哪个对象跟哪个对象关联了。如果是别人要看我的程序,我估计他找半天都找不到UI逻辑的入口。

2.耦合性非常严重,如果要改变需求,更改某个UI或者更改某个游戏对象,那么你需要再手动全部与该对象关联的物件重新更改一次。

3.作为强迫症的我,最受不了程序代码的混乱。这种组织方式十分“不优雅”,看着很乱。

鉴于以上各种情况,我开始寻找一种新的,科学的,高效的UI管理方式,

最开始想到的就是大名鼎鼎的MVC模式,我想过用它来管理我的UI,不过由于我对MVC模式不是很熟悉,尝试了下,效果并不是很好。

在网上搜到几个不错的UI框架,都写得很不错,各位可以参考参考:

1.Unity-UI-Framework的设计与实现 By:王选易 Github

2.简单、强大的TTUIFramework By:chiuan 游戏蛮牛 (这位的设计思路是参考上面那位作者的)

3.【设计和开发一套自动化UI框架】 By:NPC燕 游戏蛮牛

他们的设计思路都很清晰,做出来的效果也都很强大,都是些游戏界的大牛,但是都有点复杂。

作为一名菜鸟,我当然要设计出只有菜鸟能看得懂的东西啦。

好了,废话不多说,以下是我设计的两个主要方向:

1.设计一套用于管理UI的框架,各个UI的生成,销毁,切换,都是通过这个Manager单例来实现。各个UI间不直接联系。

2.所有UI都基于一个UIBase基类,每个UI的预设对应一个UIBase子类脚本,UI的基本逻辑在该类中实现,例如:_MenuView.prefab 对应 _MenuView.cs

3.重新实现Unity3D的消息通讯,原有SendMessage效率较低,利用订阅-发布(即观察者模式)重新设计一套通讯中心,所有UI间的通讯,

以及UI和游戏层的通讯,皆间接通过MessageCenter来管理。实现解耦。

4.以栈发方式管理UI,每次打开一个新的UI,都将它堆入栈,关闭时出栈。这个栈是一个特殊的栈,例如它可以实现,某个不在栈顶的UI,可以“TOP”到栈顶。

未完待续。。。

Unity3D 搭建优雅的UI框架的更多相关文章

  1. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  2. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

  3. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  4. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. ASP.NET MVC搭建项目后台UI框架—7、统计报表

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

  9. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

随机推荐

  1. Python的hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  2. 【C#】【Thread】BackgroundWorker的使用

    BackgroundWorker 可以用于启动后台线程. 主要的事件及参数: 1.DoWork --当执行BackgroundWorker.RunWorkerAsync方法时会触发该事件,并且传递Do ...

  3. bash/shell编程学习(1)

    1)定义变量 myvar=abc #注:等号前后不能加空格 #或 myvar="abc" #或 myvar='abc' #注:如果变量后面的值中间本身没有空格,加不加引号都无所谓, ...

  4. 再读《C++ Primer》——变量和基本类型

    刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内 ...

  5. caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片

    经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测. 我们从mnist数据集的t ...

  6. 轻量级DAO层实践初体验

    最近快被 Hibernate 给坑哭了,有了自己动手实现 ORM 映射 DAO 的冲动. 工作之余折腾了快一星期,总算是有点小成就. 现打算将过程记录下来,方便自己后续回顾填补遗漏. 1. 传统 JD ...

  7. sql语句 in的教训

    如果子查询条件数据量特别大的话,千万不要用子查询.

  8. VIM编辑器简单总结

    第一讲小结  1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键.         h (左移)       j (下行)       k (上行)     l (右移)  2. ...

  9. spring 整合 mongo

    spring 非常强大,不仅在jdbc访问提供了jdbctemplate,而且在mongo访问上提供了mongoTemplate.闲话不多说,下边开始整合mongoTemplate. ONE: 添加s ...

  10. Java部署_IntelliJ创建一个可运行的jar包(实践)

    一.本文目的:使用Intellij Idea 13生成一个简单可执行的jar,用于快速在linux验证某个功能 二.项目源码 1.结构图  2.StaticC1.java 1 2 3 4 5 6 7 ...