C C++最新Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程,C C++未来路在何方

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

备注名    帮助你理解的注释名,会和下方的导出为组件属性联合使用,勾选导出为组件属性,当你将这个组件拖动到其他的组件上时,右侧属性区会显示

页面       你可以理解成状态,既然是控制器,就要控制出效果,比如按钮(滑过/点击/抬起等状态),设置不同的动作效果

你可以单独新建按按钮看看,按钮的上方就有一个默认名为button的控制器,有4个状态(页面)

属性控制       创建好控制器后,想要使用她,你选中一个元件,在右侧属性栏会有“属性控制”面板,隔这选择即可。她有显示/位置/大小/颜色/外观/动画/文本等控制。

她还可以实现联动效果:

  1. 与按钮联动,当点击不同按钮后,跳转不同页面
  2. 与列表联动,就像Android的列表一样点击一个item显示出对应索引的页面
  3. 与下拉框联动,效果同上

具体效果我们会在后续的实际案例中学学习

关联系统

不管是前端还是移动端或者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中,滚动条是可以随心设计的。滚动容器和滚动条是独立的,也就是说,即使没有滚动条,滚动容器也能完成滚动的功能。

她的创建同样是点击主菜单“资源”->“新建滚动条”,然后按照向导的提示一步步完成即可。

列表-重点

这是个特殊的扩展,应用场景也挺广,比如内容展示,邮箱,若项目时教学类的项目,少不了各种题目各种列表。

点击侧工具栏的 按钮生成一个列表。上面说下拉框的时候也借助了列表。

列表属性丰富多彩

  1. 渲染顺序       定义item的显示顺序与它的列表中的顺序的关系。
  2. 选择模式       支持四种选择模式:无,单选,多选(使用shift键),多选(单击选择)。item要参与到单选有一个前提,是必须为单选按钮,如果不是单选按钮,则不会参与到选择模式中。单选是指同一时间只能有一个item被选中;多选则允许有多个,多选的操作方式有两种,一种是使用shift键进行多选,不过这需要键盘的支持,不适合移动设备;另一种是每个item单击即选中,再单击就取消选中的方式,不需要键盘的支持。
  3. 选择控制       可以绑定一个控制器。当列表发生翻页滚动时(溢出处理必须为三种滚动之一,滚动必须勾选为页面模式),控制器也同时跳转到相同索引(页码)的页面。反之亦然,如果控制器跳转到某个页面,那么列表也同时滚动到相同索引(页码)的页面。
  4. 项目资源       设置列表默认使用的item类型,也就是item样式
  5. 编辑列表数据       除了设置固定的数据外,代码中还支持动态设置数据内容

当你对列表增删改后,列表是自动排列和刷新的,不需要调用任何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。

  1. BringToFront 把窗口提到所有窗口的最前面。
  2. CloseAllWindows 隐藏所有窗口。注意不是销毁。
  3. CloseAllExceptModals 隐藏所有非模态窗口。
  4. GetTopWindow 返回当前显示在最上面的窗口。
  5. hasModalWindow 当前是否有模态窗口在显示。
动效-重点

又是一个重点,FairyGUi除了静态UI外,动效UI做起来也很轻松

在上面讲编译器主页面的时候就说过了动效。更多图文并茂参考官方文档。

适配

做过Android开发的都知道,适配是个体力活,一分钟开发三分钟适配,即使开始经验充足或者使用了今日头条的适配,后续仍然可能有需要适配的。

FairyGUI为手游提供了自动适应各个设备分辨率的UI策略。选择一个设计分辨率的图片(通常为全屏界面)来进行开发,运行的时候会根据设备将UI界面经过缩放投到屏幕上。

有一个很有意思的机制:假如整体需要放大两倍的话,一个窗口为400*400的,投射到屏幕上是800*800放大后的,但是你用代码读取窗口的宽高时,仍然是400*400且坐标也不变化。

除了等比的缩放,有一点就得需要注意-全屏,现在有的全面屏手机,高度贼拉长,有的高度正常,大部分手机宽度基本一致,这就导致宽高比不一样,就需要有所调整了:

如果你使用的是UIPanel,那么在Inspector上设置Fit Screen为Fit Size就可以了

多国语言

三部曲

  1. 现在FairyGUI中做好你的界面,最后再适配多国语言,点击“工具-字符串导入和导出”,导出来
  2. 复制一份导出来的文件,开始进行翻译,翻译完毕后修改下文件后缀挂上en和上面导出的放在同一地方(Unity里面的文件夹)
  3. 代码动态加载语言文件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中使用也很简单

  1. Unity下载FairyGUI插件并导入
  2. 将Fairy GUI中发布的资源放到Unity项目文件夹下,Resources下即可
  3. 如果第一步成功,在你的场景Hierarchy中右键会有FairyGUI选项,创建UIPanel
  4. 在UIPanel中的Package Name选择你在FairyGUI的包名,ComponentName选择你的主场景组件
  5. 显示成功,你还可以添加UIContentScaler脚本设置分辨率相关
结束也是开始

好了,关于介绍学习小空就到这里了,小空接下来还会分享几篇较难的案例来更深入的理解技术。

案例包含:视频、音频、3D画廊、雷达图柱形图仪表盘、日期选择器、Item多布局、轮播图、图片查看器

公众号:空名先生

作者:小空和小芝中的小空

公众号:【空名先生】,专注于分享Android/Unity以及自己掌握的资源。期待与你交流。互利共赢。

转载说明:务必注明来源。

壁纸分享

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

:【空名先生】,专注于分享Android/Unity以及自己掌握的资源。期待与你交流。互利共赢。

转载说明:务必注明来源。

壁纸分享

[外链图片转存中…(img-dofrsSDn-1715721484739)]
[外链图片转存中…(img-re4y7CHT-1715721484739)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值