网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
备注名 帮助你理解的注释名,会和下方的导出为组件属性联合使用,勾选导出为组件属性,当你将这个组件拖动到其他的组件上时,右侧属性区会显示
页面 你可以理解成状态,既然是控制器,就要控制出效果,比如按钮(滑过/点击/抬起等状态),设置不同的动作效果
你可以单独新建按按钮看看,按钮的上方就有一个默认名为button的控制器,有4个状态(页面)
属性控制 创建好控制器后,想要使用她,你选中一个元件,在右侧属性栏会有“属性控制”面板,隔这选择即可。她有显示/位置/大小/颜色/外观/动画/文本等控制。
她还可以实现联动效果:
- 与按钮联动,当点击不同按钮后,跳转不同页面
- 与列表联动,就像Android的列表一样点击一个item显示出对应索引的页面
- 与下拉框联动,效果同上
具体效果我们会在后续的实际案例中学学习
关联系统
不管是前端还是移动端或者PC端,应该都有这种相对布局体系。
比如移动端的相对布局(RelativeLayout)
FairyGUI任何元件可以互相关联,在右侧有关联选项,可以实现布局自适应,对话框自适应,动态变化的内容等。
比如:玩游戏的时候有全屏或者小屏的时候,界面大小修改后UI布局仍然保持的相当好,想想当年天龙八部窗口化UI布局就是这种机制。
按钮和下拉框
常用的基础组件,传统UI框架中的RadioButton、Checkbox、List Item等,在FairyGUI里通通都是按钮。
这里注意下要想改变按钮不同状态的效果,需要先在右侧属性控制中选择控制器
下拉框的创建已经很简单了
提前切好图,按照三部曲即可创建出来,创建好后会有三个文件
Item是下拉框内容item,双击进去后还可以自定义里面的内容
Popup是列表控件,同样可以双击进去自定义
除了在这编辑,列表需求多数都是请求自动变化的,FairyGUI同样支持代码中设置item集合内容,和传统集合一样,要想访问集合中的item通过索引即可从0开始。有一点不同的就是上图的“值”(索引),你不写的话默认从0开始。当你修改后就需要索引值就是你修改的。比如上图,我如果没修改访问叮叮当1 就是getIndex(0),当时我把值修改为1了,访问叮叮当就是getIndex(1)
还有更多按钮详情(状态分析普通按钮selected属性无效,单选按钮组的多个实现普通按钮方式 控制器+单选按钮连接方式)讲解在……,我还没上传,回头小空发布后更新出来链接。
进度条/滑动条/滚动条
进度条
可以改变元件的宽度/高度/填充比例,分为横向和纵向,还有正向和反向;创建也很简单,一个进度条背景,一个伸缩条即可。
如何显示进度条当前进度?
双击进入进度条,添加个文本控件,然后名称改为“title”,要想和进度条最右侧实时跟随移动,设置关联即可。
如何实现带有跟随动画的进度条?
细心的朋友发现了,还有个小狐狸跟随进度条,平时玩游戏切换场景的时候经常看到进度条不是单调的横线,还有些小动画跟随,增强灵动性。
这个实现和上面的文本添加类似,区别在于你要想拖入动画的话,可以在编辑进度条的时候增加个装载器,装载器放入动画文件,想要和进度条进度试试跟随的话,再设置小狐狸和进度条的伸缩条的关联设置为右右关联
如何监听进度条?
进度条最大的作用就是和程序相结合,用于加载中,流程进度节点等,所以我们要能修改和监听进度条
滑动条
她和进度条就像双胞胎一样相似,但是她多出个按钮让用户自己拖动改变进度值。
创建也很简单点击资源->新建滑动条按照提示添加即可
想要自定义她的样式也是可以的。
滚动条
在FairyGUI中,滚动条是可以随心设计的。滚动容器和滚动条是独立的,也就是说,即使没有滚动条,滚动容器也能完成滚动的功能。
她的创建同样是点击主菜单“资源”->“新建滚动条”,然后按照向导的提示一步步完成即可。
列表-重点
这是个特殊的扩展,应用场景也挺广,比如内容展示,邮箱,若项目时教学类的项目,少不了各种题目各种列表。
点击侧工具栏的 按钮生成一个列表。上面说下拉框的时候也借助了列表。
列表属性丰富多彩
- 渲染顺序 定义item的显示顺序与它的列表中的顺序的关系。
- 选择模式 支持四种选择模式:无,单选,多选(使用shift键),多选(单击选择)。item要参与到单选有一个前提,是必须为单选按钮,如果不是单选按钮,则不会参与到选择模式中。单选是指同一时间只能有一个item被选中;多选则允许有多个,多选的操作方式有两种,一种是使用shift键进行多选,不过这需要键盘的支持,不适合移动设备;另一种是每个item单击即选中,再单击就取消选中的方式,不需要键盘的支持。
- 选择控制 可以绑定一个控制器。当列表发生翻页滚动时(溢出处理必须为三种滚动之一,滚动必须勾选为页面模式),控制器也同时跳转到相同索引(页码)的页面。反之亦然,如果控制器跳转到某个页面,那么列表也同时滚动到相同索引(页码)的页面。
- 项目资源 设置列表默认使用的item类型,也就是item样式
- 编辑列表数据 除了设置固定的数据外,代码中还支持动态设置数据内容
当你对列表增删改后,列表是自动排列和刷新的,不需要调用任何API。自动排列时会根据列表的布局设置item的坐标、大小和深度,所以不要自行设置item的位置,也不要设置sortingOrder尝试去控制item的深度。除了一个例外,垂直布局的列表只会自动设置item的y坐标,如果你需要item有一个水平位移的效果,你仍然可以修改item的x值。水平布局的也是一样道理。
在实际应用中,列表的内容通常被频繁的更新。典型的用法就是当接收到后台数据时,将列表清空,然后再重新添加所有项目。如果每次都创建和销毁UI对象,将消耗很大的CPU和内存。因此,GList内建了对象池。
注意,不管是添加合适移除都要使用对应的对象池方法,不要搞什么AddChild添加RemoveChildrenToPool来清除,这明显不一致,会导致对象池不断增大,造成内存溢出。
更多详细建议看官方文档
树
她是列表的特殊个例,实现的功能为类似手机里面的文件夹列表,具有层级关系。
她的创建仍然是先创建列表,然后列表右侧有激活树视图的勾选,勾选后在编辑内容时,就会增加个层级选项。
弹出菜单和窗口
弹出菜单
弹出界面可以说很常见了,这些组件会在用户点击空白地方的时候自动消失,Android里面经常用到。
点击“资源->新建弹出菜单…”,然后根据向导完成。菜单组件里的关键元素是命名为list的列表组件,列表的溢出处理模式应该选择为可见,因为一般来说,菜单都是显示全部item的,不需要滚动。
创建完成后在Unity中用代码进行管理
UIConfig.popupMenu 设置全局菜单资源
GRoot.inst.ShowPopup 弹出组件,可以指定弹出位置在哪个下方
PopupMenu 菜单类,管理弹出菜单
窗口
窗口花样百出,可以设置任意组件作为她的显示内容,且窗口支持拖动。
窗口样式内容你需要在FairyGUI中提前编辑好,制作好后,需要在Unity中用代码进行管理。
Window win = new Window();
GRoot里提供了一些窗口管理的常用API。
- BringToFront 把窗口提到所有窗口的最前面。
- CloseAllWindows 隐藏所有窗口。注意不是销毁。
- CloseAllExceptModals 隐藏所有非模态窗口。
- GetTopWindow 返回当前显示在最上面的窗口。
- hasModalWindow 当前是否有模态窗口在显示。
动效-重点
又是一个重点,FairyGUi除了静态UI外,动效UI做起来也很轻松
在上面讲编译器主页面的时候就说过了动效。更多图文并茂参考官方文档。
适配
做过Android开发的都知道,适配是个体力活,一分钟开发三分钟适配,即使开始经验充足或者使用了今日头条的适配,后续仍然可能有需要适配的。
FairyGUI为手游提供了自动适应各个设备分辨率的UI策略。选择一个设计分辨率的图片(通常为全屏界面)来进行开发,运行的时候会根据设备将UI界面经过缩放投到屏幕上。
有一个很有意思的机制:假如整体需要放大两倍的话,一个窗口为400*400的,投射到屏幕上是800*800放大后的,但是你用代码读取窗口的宽高时,仍然是400*400且坐标也不变化。
除了等比的缩放,有一点就得需要注意-全屏,现在有的全面屏手机,高度贼拉长,有的高度正常,大部分手机宽度基本一致,这就导致宽高比不一样,就需要有所调整了:
如果你使用的是UIPanel,那么在Inspector上设置Fit Screen为Fit Size就可以了
多国语言
三部曲
- 现在FairyGUI中做好你的界面,最后再适配多国语言,点击“工具-字符串导入和导出”,导出来
- 复制一份导出来的文件,开始进行翻译,翻译完毕后修改下文件后缀挂上en和上面导出的放在同一地方(Unity里面的文件夹)
- 代码动态加载语言文件FairyGUI.Utils.XML xml = new FairyGUI.Utils.XML(fileContent);
UIPackage.SetStringsSource(xml);
注意:语言不能动态实时切换,要想中切英或者英切中,都需要先销毁所有UI卸载所有包
导入和导出
这个功能和Unity的功能类似,Unity是.unitypackage后缀文件,FairyGUI是. Fairypackage后缀文件。
FairyGUI帮助我们从Unity中解脱出来,提高生产力,那么有想法的人又开始“得寸进尺”了,
虽然由原来纯Unity实现转为UI靠拼拼点点无代码开发,但是UI出图后用FairyGUI开发仍然需要人力和事件。
啊,这思想就有点过分了啊,难不成直接从UI图全自动帮你生成FairyGUI?开玩笑,不过确实是有:psd2fgui,但她未必能满足每个人的项目需求,只能作为辅助工具。
psd2fgui开源地址:https://github.com/fairygui/psd2fgui,看名字就知道她是将PSD转为FGUI。
首先准备PSD文件:
如上图所示,使用图层名称或组名称来表达它的类型和用途。以下是约定的细节:
按钮 组的名称以Button开始表示这个组是一个按钮。组内的层如果名称中含有下面定义的特殊字符串(注意是包含即可,不是相同。推荐作为后缀),表示这个图层的特别含义:
@up 这个图层只在按钮的up状态显示
@over 这个图层只在按钮的over状态显示
@down 这个图层只在按钮的down状态显示
@selectedOver 这个图层只在按钮的selectedOver状态显示
@title 文字用作按钮的标题
@icon 图片用作按钮的图标
组件 组的名称以Com开始表示这个组是一个组件。组件可以嵌套。
用命令进行转换提取,之后在FairyGUI中导入资源包。
Unity使用
将编辑好的UI在Unity中使用也很简单
- Unity下载FairyGUI插件并导入
- 将Fairy GUI中发布的资源放到Unity项目文件夹下,Resources下即可
- 如果第一步成功,在你的场景Hierarchy中右键会有FairyGUI选项,创建UIPanel
- 在UIPanel中的Package Name选择你在FairyGUI的包名,ComponentName选择你的主场景组件
- 显示成功,你还可以添加UIContentScaler脚本设置分辨率相关
结束也是开始
好了,关于介绍学习小空就到这里了,小空接下来还会分享几篇较难的案例来更深入的理解技术。
案例包含:视频、音频、3D画廊、雷达图柱形图仪表盘、日期选择器、Item多布局、轮播图、图片查看器
作者:小空和小芝中的小空
公众号:【空名先生】,专注于分享Android/Unity以及自己掌握的资源。期待与你交流。互利共赢。
转载说明:务必注明来源。
壁纸分享
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
:【空名先生】,专注于分享Android/Unity以及自己掌握的资源。期待与你交流。互利共赢。
转载说明:务必注明来源。
壁纸分享
[外链图片转存中…(img-dofrsSDn-1715721484739)]
[外链图片转存中…(img-re4y7CHT-1715721484739)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新