这是一段长达七年的回忆,之前用过的,了解过的插件和当时我心里的滋味(如果还记得的话),我会尽量使用幽默易懂的语言描述出来。
OnGUI
其实这是一个函数,Unity3版本时,原生的自带的UI,几乎不能可视化。
- 价格:免费
- 使用效率:★
- 学习成本:★★★★(最高代表时间越久越不好)
- 实用价值:★
- 使用感受:欢迎来到猿人时代,我们,对你的到来表示微微一笑。
- 成功案例:亡灵杀手(是真的,我看过所有源代码),一些早期插件的Demo案例。
感受一下这代码~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
void OnGUI() { GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(Screen.width / 960.0f , Screen.height / 640.0f, 1)); GUI.skin = basicSkin; GUI.Box (Crypto.Rect2 (380,4,80,20),Language.intxt[language,64]+" " + (cur_stage_index+1)); if (b_openshop) { GUI.DrawTexture (Crypto.Rect2(112,0,256,32),bg_asset); GUI.Label (Crypto.Rect2(146,6,80,14),""+coin,"txt12_w"); GUI.Label (Crypto.Rect2(280,6,64,14),""+jade,"txt12_w"); if (GUI.Button(Crypto.Rect2 (144,2,100,24),"",bt_empty)) { CashshopOpen(2); } if (GUI.Button(Crypto.Rect2 (272,2,88,24),"",bt_empty)) { CashshopOpen(1); } } if (isclear >-1) { GUI.DrawTexture (Crypto.Rect2(posX,44,180,190),bg_list); GUI.DrawTexture (Crypto.Rect2(posX+26,137,16,16),icon_coin); GUI.Label (Crypto.Rect2(posX+76,138,124,14),""+(int)getcoin_f ,"txt12_0"); GUI.DrawTexture (Crypto.Rect2(posX+55,118,114,14),bg_gauge); GUI.Label (Crypto.Rect2(posX+4,118,50,16)," "+chalv,"txt14_w"); GUI.DrawTexture (Crypto.Rect2(posX+57,120,(getexp_f*112) /(chalv * 100 ),10),gauge_exp); GUI.Label (Crypto.Rect2(posX,98,180,16),Language.intxt[language,262],"txt14_w"); GUI.Label (Crypto.Rect2(posX,167,180,16),Language.intxt[language,263],"txt14_w"); GUI.DrawTexture (Crypto.Rect2(posX+26,186,16,16),icon_coin); GUI.DrawTexture (Crypto.Rect2(posX+26,206,16,16),icon_jade); GUI.Label (Crypto.Rect2(posX+76,187,124,14),""+dropcoin,"txt12_0"); GUI.Label (Crypto.Rect2(posX+76,207,124,14),""+dropjade,"txt12_0"); for (int i= 0; i<3; ++i) { if (mission_archive_already[i] > 0) GUI.DrawTexture (Crypto.Rect2(277 +50 * i,34,64,64),star_big); } if (starmove) { for (int i= 0; i<3; ++i) { if (mission_archive_current[i] > 0) { if(!efon[i]) GUI.DrawTexture (Crypto.Rect2(277 +50* i- icon_size[i]*3,34,icon_size[i] + 64,icon_size[i] +64),star_big); else GUI.DrawTexture (Crypto.Rect2(277 +50* i- icon_size[i]*0.5f,34- icon_size[i]*0.5f,icon_size[i] + 64,icon_size[i] +64),star_big); } GUI.DrawTexture (Crypto.Rect2(293 +50 * i,50,32,32),icon_mission[i]); } } } if (gonext) { GUI.DrawTexture (Crypto.Rect2(400,250,64,64),img_bts[0]); if (GUI.Button (Crypto.Rect2(400,250,64,64),Language.intxt[language,202],bt_empty)) //Language.intxt[language,202]{ Application.LoadLevel("Map"); } if (isclear == 0){ icon_pluspos = 76; GUI.DrawTexture (Crypto.Rect2(324,250,64,64),img_bts[1]); if (GUI.Button (Crypto.Rect2(324,250,64,64),Language.intxt[language,201],bt_empty)) //Language.intxt[language,201] { Application.LoadLevel ("Stage"); } }else if (isclear == 2 || b_getgem){ if (max_stage_index <3) {} else{ icon_pluspos = 76; GUI.DrawTexture (Crypto.Rect2(324,250,64,64),img_bts[3]); if (GUI.Button (Crypto.Rect2(324,250,64,64),Language.intxt[language,398],bt_empty)) //Language.intxt[language,201]{ Application.LoadLevel ("Forge"); } } } if (changelevel ==1 ) { GUI.DrawTexture (Crypto.Rect2(324-icon_pluspos,250,64,64),img_bts[2]); if (GUI.Button (Crypto.Rect2(324-icon_pluspos,250,64,64),Language.intxt[language,395],bt_empty)) //Language.intxt[language,201] { Application.LoadLevel ("Skill"); } GUI.DrawTexture (Crypto.Rect2(198-icon_pluspos,256,128,64),bg_speech2); GUI.Label (Crypto.Rect2(206-icon_pluspos,264,112,32),Language.intxt[language,261],"txt12_0"); } else if (isclear == 0) { if (max_stage_index <3) {} else if (trainmax){} else { GUI.DrawTexture (Crypto.Rect2(324 - icon_pluspos,250,64,64),img_bts[4]); if (GUI.Button (Crypto.Rect2(324 - icon_pluspos,250,64,64),Language.intxt[language,397],bt_empty)) //Language.intxt[language,201] { Application.LoadLevel ("Status"); } GUI.DrawTexture (Crypto.Rect2(198-icon_pluspos,256,128,64),bg_speech2); GUI.Label (Crypto.Rect2(206-icon_pluspos,264,112,32),Language.intxt[language,301],"txt12_0"); } } } } |
EZGUI
你听说过吗?这是一款曾经的主流UI插件,在那个Unity里自带UI全用代码写入的年代,大约是2011年前后比较流行吧,至今我还能在网上搜索到那时我们团队出去演讲留下的PDF文档,不知道带huo领hai多少人入坑,在此对不住你们!
- AssetStore URL:已失效 https://assetstore.unity.com/packages/tools/ez-gui-32
- 价格:100$ (我貌似记得)
- 使用效率:★★
- 学习成本:★★★
- 实用价值:★★★
- 优点:比之OnGUI
- 提供了可视化
- 宣传视频做得倍好,感觉作者不去做视频太浪费了
- 提供源代码
- 加入了地图集以优化空间
- 缺点
- 有时加入图标时,地图集莫名奇妙就乱了,有可能你一天的工作量就作废了
- 没有地图集管理窗口
- 没有自定义的Inspector
- 组件太复制,更像是一个巨大又冗余的集合体
- 分辨率可以适配
UIButton 感受一下
视频感受一下:
2D Toolkit
这款插件其实已经超出了UI的领域,毕竟在早期,我们使用这款插件做UI也做GamePlay,因为这插件在物理系统、刷地图,帧动画等方面还是做得不错的。目前还在更新。
- AssetStore URL:https://www.assetstore.unity3d.com/cn/?stay#!/content/908
- 价格:75$
- 使用效率:★★★★
- 学习成本:★★
- 实用价值:★★★★
- 优点:
- 值得点赞的Demo场景数量
- 动画帧制作窗口,方便制作与编辑动画
- 图集制作窗口、精灵编辑窗口
- 地图块相关的支持
- 物理系统的支持
- 改观后的Inspector
- 缺点:
- git管理起来有些麻烦,按照作者的说法得手动在gitIgnore里面添加一些文件
- 早几年间还出现过无限进度条的BUG(卡死)。
NGUI
那时的坑经历得太多了,被折磨的太久,开发者试图找到一种高效且稳定的开发工具;13年,在一次又一次小心翼翼地避开EZGUI编辑上BUG的时候,我们的忍耐心也消散不见。随着新项目的诞生,EZGUI也弃而远之,取而代之的是这新生面孔:NGUI Next-Gen UI
- AssetStore URL:https://www.assetstore.unity3d.com/cn/?stay#!/content/2413
- 价格:95$,我后来换了UGUI,在一次打折季时看了NGUI,想起用了这么多年的NGUI,我点击购买按钮。
- 使用效率:★★★★★
- 学习成本:★★
- 实用价值:★★★★★
- 优点:相对比EZ
- 丰富的Demo场景示例
- 秉承了Unity组件化的中文思想,脚本组件化(EZGUI是一个组件不要的功能都给加上了)。
- 自定的Inspecter。
- 地图集的管理。
- 编辑时用到的快捷键与编辑可视化
UGUI
NGUI的作者加入了Unity,参与制作了UGUI,后面因为一些矛盾离职了。
- 价格:免费
- 使用效率:★★★★★
- 学习成本:★
- 实用价值:★★★★★
- 优点:相对比NGUI
- 便携性,在Unity版本中,随时都可以进行开发
- 更直观的RectTranform变换组件,定义锚点更方便与直观
- 地图集不用手动生成,别于NGUI的 先打地图集->再使用地图集中的图片
- 其它:有的开发者认为UGUI在功能上并没有NGUI方便,在此我想说,如果基于插件本身来说是的,但是甚于一个工具的扩展性来说,很显然并不是,例如Asset Store里面的基于Ugui的插件就明显更多,Ugui只保留了基本使用的功能,而如果当你感觉到有的效果实现不了的时候,你或许该去商店看看了。
其它关于UI的插件
商店有不少,出于自己使用的经验,我写到的只是冰山一角。
甚至有的我买过的UI插件已经忘记了使用,也不在文章中特别描述了。
- 之前粒子在UI上的使用一直被层级显示困扰着,所以看了UI Particles这款软件的视频,完美的解决困扰,感兴趣的朋友请点击观看。25美金,简单易用。
- 字体曲线与动画请参考:TextMesh Pro ,Unity出品,免费,但是对于非英文字体之外的字体不友好。
- 免费的GUI动画 GUI Animator FREE,给你的UI生龙活虎的表现。
还有之前来自同事推荐的优化版Grid,太多太多,多得我已经忘记名字了。
文章到这里结束,感谢阅读。
你好!关于商店里的ExcelParser插件有个问题想问下但是不知道怎么联系您,我的邮箱是359851023@qq.com希望可以联系上谢谢