daikon与ngui是什么

2015年01月28日 10:42 0 点赞 0 评论 更新于 2025-11-21 15:36

在刚开始学习Unity时,很多人对其中的一些插件了解并不多。下面我们就来深入学习一下Unity中用于制作UI比较出色的两个插件:Daikon Forge GUI(以下简称DF GUI)和NGUI,探究它们是什么以及各自的优缺点。

NGUI

NGUI是严格遵循KISS(Keep It Simple, Stupid)原则,使用C#编写的Unity插件,适用于Unity专业版和免费版。它提供了强大的UI系统和事件通知框架,代码简洁,多数类的代码行数少于200行。这使得程序员能够轻松扩展其功能或调节已有功能,对于其他用户而言,则意味着更高的性能、更低的学习难度和更有趣的使用体验。

优点

  1. 功能完整:开发一个项目所需的控件或功能基本都有,能满足大多数项目的UI开发需求。
  2. 效率高:DrawCall控制出色,多个控件渲染仅需一个DrawCall,有助于提升游戏性能。
  3. 支持3D GUI:可以实现倾斜或有透视效果的UI,为游戏UI设计提供更多创意空间。
  4. 开源:本质上是一个写好的代码集,开发者可以直接修改其中的脚本。例如,在一个项目中,若觉得重写音频控制类麻烦,可直接打开NGUI自带的音频控制脚本UIplay sound进行修改,将音量控制通过外接变量连接到滑动条上,仅需两行代码即可完成。不过,直接修改可能会导致扩展性不佳,解决办法是将脚本内部的一些属性和字段改为get和set方法,然后用新的脚本继承并补充新的功能控制和字段修改。
  5. 对中文字体支持较好:能很好地支持所有自制的动态字体集。但由于Unity对中文输入支持不佳,尤其是搜狗中文输入法,通常需要在外部打好文字后粘贴进text框。
  6. 事件响应机制良好:可以直接拖拽,将物体所带的公共函数赋上去执行,也可以使用sendmessage(),还能自己编写脚本控制,使用起来非常方便。

缺点

  1. Bug较多且更新频繁:作者更新过于频繁,三天就更新一个版本。这些更新不仅包含Bug修正,还涉及接口或操作方式的修改。而且NGUI的文档不够完善,开发者只能参考例子来琢磨实现方法。网上很多教程针对的是早期版本,参考这些教程可能会被误导。插件中很多功能已被废弃,导致开发者在创建Button等控件时,不清楚使用向导界面、拖拽Prefab还是菜单中的某个选项才是正确的。例如新的锚点系统,原本功能强大,但在适配多分辨率时,运行时的分辨率会修改编辑时的控件坐标,这是一个致命问题。
  2. 集成性欠佳:现在的版本(不清楚从哪个版本开始)增加了一个控件预制面板reser prefab toolbar,类似一个尴尬的补丁。

Daikon Forge GUI

Daikon Forge是Unity3D的一个用户界面库,为创建游戏的用户界面提供了一种非常灵活和强大的方法。它包含了一系列对大多数用户界面需求有用的核心控件,其强大的组成和继承功能提供了方便的可扩展性,能够匹配特定需求。

优点

  1. 功能完整且新颖:尽管是较新的插件,但功能非常完整,各种控件一应俱全。它直接内嵌了基于Html的富文本显示,而NGUI需要另外购买插件来支持。同时,支持各种图片显示(如九宫格切分)、输入框、ScrollView等,Demo中的例子也很多,包括3D场景中的GUI应用、CoverFlow效果等。
  2. 使用方便:界面整洁、干净,使用起来十分便捷。例如,它人性化地添加了右键菜单创建控件、绑定事件的功能。绑定事件只需添加一个public的函数,然后通过下拉列表选择;或者直接给控件上绑定的脚本添加一个OnClick函数,即可响应点击事件。这些细节让开发变得高效。
  3. 层级管理和锚点处理出色
    • 层级遮挡管理:在界面之间的层级遮挡(Depth管理)方面,NGUI早期通过z - order和Depth管理,界面增多时层级关系管理困难。虽然NGUI 3.0版本有所改进,但与DF GUI相比仍不够智能。在DF GUI中,指定Depth后,会自动修正其他Panel的Depth,开发者无需关心其内部实现,系统会自然保证正确性。
    • 锚点处理:锚点在多分辨率适配中非常重要。NGUI的新锚点系统理论上强大,但实现完善困难,实用价值也未达预期。而DF GUI的锚点系统可以指定控件或Panel基于父窗口的对齐或拉伸方式,方便进行多分辨率适配。
  4. 集成性好且易上手:集成性较好,响应事件和Unity中函数的类库比较接近,极其容易上手。所有功能基本都可以通过右键完成(脚本除外),事件机制在初期便于操控细节,实现速度快。

缺点

  1. DrawCall合并处理较弱:在DrawCall合并处理上不如NGUI。必须给UIRoot指定一个Default Atlas,它才能给子控件合并DrawCall,否则一个控件就会产生一个DrawCall。对于UI元素众多的MMO游戏,不可能用一个图集包含所有元素,因此该功能实用性较差,急需优化。
  2. 细节待优化:一些细节需要优化,如Label控件的中文换行、文本阴影对半透明的支持等。
  3. 存在较多Bug:存在各种Bug,如中文支持有问题、下拉列表错位、对手机支持不好、插件包太大等。不过由于该插件较新,问题多也可以理解,目前已更新到2.0版本,有望不断完善。

综上所述,DF GUI和NGUI各有优缺点。开发者可以根据项目的具体需求、开发经验和对性能的要求等因素,选择更适合的UI插件。

作者信息

feifeila

feifeila

共发布了 3994 篇文章