df(Daikon Forge GUI)和NGUI,这两个插件做UI都是非常棒的,首先是
NGUI
NGUI是严格遵循KISS原则并用C#编写的Unity(适用于专业版和免费版)插件,提供强大的UI系统和事件通知框架。其代码简洁,多数类少于200行代码。这意味着程序员可以很容易地扩展NGUI的功能或调节已有功能。对所有其他用户而言,这意味着更高的性能、更低的学习难度和更加有趣。
优点
NGUI的优点有三个:1、完整,开发一个项目所需要的控件或者功能它都有。
2、效率,它的DrawCall控制非常好,多个控件渲染只需要一个DrawCall
3、3D GUI的支持。通过这个你可以实现出倾斜的或者有透视效果的UI。
缺点说白了就一个,Bug太多,更新频繁导致功能混乱、难用:作者患了更新综合症,三天更新一个版本。这原本没有什么大问题,但是这些更新不仅仅是Bug修正,还有很多是接口或者操作方式的修改。NGUI并没有很完善的文档,这导致你只能参考例子去琢磨该如何实现。网上的教程很多都是针对早期版本的,你如果看那些教程反而会被误导。插件的功能中很多都是被废弃的,有的时候你真的不知道一个Button究竟如何创建才是正确的,是通过向导界面、还是拖一个Prefab、还是菜单中的某一个选项。
频繁更新其中一个原因是Bug太多。不知道是不是作者背负的历史包袱太重了,Hold不住了。很多时候新增的功能是正确且合理的,但是总会伴随着很多Bug。 比如新的锚点系统,这原本是比较强大的,但是适配多分辨率的时候运行时的分辨率会修改编辑时候的控件坐标,这就致命了。当然,我这里要补充一下,不然我就直接转载了(码字很辛苦的)
NGUI的优点还有一些:1:开源。做上一个项目时,感觉自己重写一个音频控制类比较麻烦,所以当时就直接把NGUI自带的音频控制脚本UIplay sound打开修改了,直接将音量控制用外接变量连在一个滑动条上了,两行代码直接搞定,很方便。当然仔细去想的话,NGUI也不算一个插件,就是一个写好的代码集,代码只要看懂的话都可以很好用的,不过直接修改的话很容易导致一个结果就是扩展性不好,因为如果要再使用未改过的脚本的话就没有了,所以我的解决方法是可以把脚本内部的一些属性和字段改为get和set方法,然后用的时候用新的脚本继承后重写补充新的功能控制和字段修改。
2:对中文字体支持的比较好。所有自制的动态字体集都能很好支持,不过因为unity对中文输入的蹩脚支持情况尤其是搜狗中文输入法,所以我通常都是在外部打好,然后粘贴进text框的,诶,谁让unity是外国人搞出来的呢、、、、、、、、3:事件响应机制比较好。我们那个装逼的讲师给这个取了个名字叫做“反向推送”,说的蛮贴切,不过我想说的是不止可以直接拖拽,然后把物体所带的公共函数赋上去执行,也可以用sendmessage(),更可以自己写脚本控制,方便的要死怎么办?所以当然要在这里赞一下咯。
缺点
接下来说缺点:(1)集成性不好。正因为如此,现在的版本(不知道从哪个版本开始)增加了一个控件预制面板reser prefab toolbar,类似于打个好尴尬的补丁,嚓,你直接做出来不好吗?别的缺点不说了,因为现在主要用这个,用人家的嘴短df和NGUI对比。
Daikon Forge GUI
Daikon Forge 是提供了一种非常灵活和强大的方法来创建您的游戏的用户界面的 Unity3D 的一个用户界面库。它包括将对大多数的用户界面需求,有用的核心控件的有用列表和其强大的组成和继承功能提供方便的可扩展性,以匹配您的特定需求。
1、虽然很新,但是非常完整,各种空间一应俱全,甚至直接内嵌了基于Html的富文本显示,这个NGUI还要再买另外一个插件来支持。 各种图片显示(例如九宫格切分)都支持,输入框、ScrollView也都支持,Demo中的例子也很多,比如3D场景中的GUI应用、CoverFlow效果等等。
2、DrawCall合并处理上比NGUI弱很多,你必须要给UIRoot指定一个Default Atlas,然后它才能给子控件合并DrawCall,否则就是有一个控件多一个DrawCall。正常来说,一个MMO的游戏UI元素非常多,不可能用一个图集就把所有的元素都包含在内,所以这个功能非常的鸡肋,也是急需优化的。
3、一些细节还需要优化,比如Label控件的中文换行,文本阴影对半透明的支持。
4、与NGUI相比,DF GUI最大的优点就是整洁、干净,使用起来非常方便,比如它很人性化的添加了右键菜单创建控件、绑定事件的功能。绑定事件就是只需要添加一个public的函数,然后就可以通过下拉列表选择。 或者直接给控件上面绑定的脚本添加一个OnClick函数,然后就可以响应点击事件。这些都是很小的细节,但是却让开发变得高效、方便,而一个框架,能够让使用者用的方便,本身就是最大的价值。
5、NGUI中两个比较粗陋的部分DF GUI都实现得非常漂亮。
一个是界面之间的层级遮挡,也就是Depth管理,NGUI早期可以通过z-order和Depth来管理,这使得界面一多管理层级关系无比困难,后面NGUI在3.0版本终于改进了一下,但是与DF GUI相比仍显得不够智能。NGUI中你需要自己分配Depth数值,并且编辑修改同层级的错误情况,而DF GUI中指定Depth后,会自动修正其他的Panel的Depth,就像DF GUI的作者说的那样,你不需要知道它是如何保证正确的,但是它就是正确的。使用DF GUI很多时候你不需要关心其内部实现,因为它自然而然的就是正确的。
二是锚点处理。 锚点在实现多分辨率适配的时候是非常重要的。NGUI的新锚点系统按理说是比较强大的,它可以指定控件基于哪个对象对齐,但是这个系统真正实现起来想要完善是非常困难的,而且真正实现了实用价值也没有想象中大。反观DF GUI的锚点系统就非常漂亮,它可以指定控件或者Panel基于父窗口的对齐或者拉伸方式,通过这个就可以非常方便的进行多分辨率适配。
接下来补充df,当然谈的是我自己的理解,不准确欢迎指正:
优点
集成性比较好,而且响应事件和unity中函数的类库比较接近,极其容易上手,所有的功能基本都可以右键搞定(当然脚本除外),事件机制在初期让我感觉特别方便操控细节,实现起来也很快。
缺点
各种bug,如中文的支持有问题,下拉列表的错位,手机支持不好,插件包太大什么的,不过因为比较新,所以问题多倒也无可厚非,主人也在不断完善中,最近出到了2.0,还没用过,应该会不断完善吧。