Android最全Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程,2024年最新h5页面适配所有手机

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

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

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

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

上一节详情请看这里:Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程.Part1

上一节介绍了:FairyGUI编辑器使用(控制台,纹理集…)、元件、图片、动画、占位、装载器、视频/模型

现在小空带大家直接切入主题!了解字体、组件、滚动容器、控制器、关联系统、按钮、进度条、列表、树、窗体、动效、适配等

文本和富文本和输入文本

普通文本的鼠标/触摸感应是没有的,只是个单纯的文本,当然文本的字体样式设置,字体大小颜色行距字距,对齐方式,粗体斜体下划线,以及UBB语法支持

富文本可就厉害了,除了普通文本的功能,还支持点击事件,超链接和图文混排,更支持HTML语法,这能玩的花样就多了去了。你见过的游戏文本效果,基本都能搞出来。

还有一个实际应用可能用到的就是文本模板,就像C语言中的log输出参数一样,可以将整个文本的某个内容设置为变量,这样修改的时候不用修改全部文本,只修改对应的即可。

例如:需要显示“我的钱:100金200银”,当金额发生变化的时候使用模板功能不需要将无关汉字重新赋值,只需要修改文字即可。下面的图示就可以用aTextField.SetVar(“jin”, “500”).SetVar(“yin”, “500”).FlushVars();  修改为500金500银

再比如玩单机游戏的时候刚开始需要你输入角色名字,游戏角色内容就会改成你输入的角色名称,增强了游戏真实性。而且只需要改这么一个变量。

字体

除了上面讲解的项目设置那一块系统字体个普通的后缀为ttf/ttc/otf的字体文件外,FairyGUI还支持位图字体和TextMeshPro支持

啥是位图字体?

请看小空下面的截图:

GUI编辑器支持位图字体。首先,我们创建一种字体。点击主工具栏 ,然后,弹出了字体编辑窗口,我们从资源库里把制作好的数字图片拖入到窗口,并设置每个图片对应的字符,点击保存,这样我们的字体就设置好了。如果要修改每个字符对应的图片,将图片重新拖入即可。

使用图片代替字符的办法,对于少量文本,这是非常方便的,但如果需要嵌入成百上千字,为每个字制作为图片,然后再每个设置对应字符,这工作量就有点大了。FairyGUI编辑器支持外部的位图字体制作工具BMFont、ShoeBox等,这些工具的使用方法请自行参考网络资料。使用外部工具最后会导出一个fnt文件(注意1:文件格式应该选择fnt格式,不支持xml或者json),在编辑器点击导入素材,然后选择这个fnt文件,就可以把字体导入到编辑器里了。

TextMeshPro

Unity里有一个TextMeshPro插件,它利用SDF(Signed-distance-field)技术渲染文字。相比常规的渲染方式,基于SDF渲染文字可无限放大并保持清晰,几乎没有开销就可实现描边,发光,抗锯齿等效果.且它只需要很小的纹理缓存SDF信息即可。FairyGUI内置支持使用TextMeshPro插件。

在FairyGUI编辑器里使用TextMeshPro的步骤如下:

  1. 导入一个ttf/ttc/otf文件。

  2. 双击字体,设置渲染方式为SDFAA,采样字体大小的选择可根据项目需求指定,这影响到一张贴图能容纳多少文字。这个值越大,渲染效果越好,但一张贴图能容纳的文字越少。一般建议值可以在30~90。

  3. 对文本元件使用这个字体(或设置为全局字体)即可。

从以上步骤可以看出,在FairyGUI中可以轻松切换文本是否使用TextMeshPro。

当文本使用了TextMeshPro字体后,文本的属性会增加额外的选项,见下图:

自行调整一下各个属性,通过实际效果感受其作用。通常建议当描边增大时,扩张值也应该同时调大。

在Unity引擎里还需要做些特别的处理:

  1. 确认安装了TextMeshPro插件。

  2. 将ttf文件拖入Unity编辑器,一般放置Resources目录或者Resources/Fonts目录最简单。

  3. 为ttf文件创建一个TextMeshPro FontAsset。通常,创建出来后的Asset的名字是’XXX SDF’,我们需要把名字改成’XXX‘,以便和FairyGUI编辑器里的资源名字一致。

  4. 配置这个FontAsset的Sampling Point Size与FairyGUI编辑器里的采样字体大小一致。

组(普通组和高级组)

把分散的物品结合成一个整体,移动复制缩放隐藏等操作都是共同的。后续动作都将针对整体进行。后续动作也分为在FairyGUI编译器中的动作和Unity中代码操作。这俩操作又引申出普通组和高级组。

普通组是在FairyGUI编译器中你在开发编辑的时候生效,帮你快速布局,铺设UI,在发布后和运行都不存在了,你就没办法把她当成一个整体操作了。

高级组就不一样,光听名字就知道这功能高级,她的优点在于除了在FairyGUI编译器中生效帮助你快速铺设UI,她在发布后仍然保留组关系,比如你用代码修改了高级组的位置,组内的所有元件都会移动。比Android的相对布局,当修改整体组时,组内元件大小对应变化;当组内某个元件变化,其他元件也适应变化。

组件-重点

组件是什么?

你点击资源->新建组件,看看出现什么

这不就是舞台(中央操作区)做布局用的吗?没错,组件就是布局,可以理解为组件就是Unity中的Canvas,Android中的xml布局,那既然是布局,就可以封装布局(封装组件),所以:

  1. 组件可以包含多个元件(布局里面可以包含多个控件),比如舞台中有按钮图片等

  2. 组件可以包含组件(布局可以嵌套布局),比如复用性较高的控件封装一个组件,在主组件中拖入使用

  3. 组件封装后,可以把她整体又当成一个元件

啊,这关系好乱啊,不过仔细想明白后,对FairyGUI的理解就顺畅多了。

来看看组件的属性:

  1. 同时作为锚点 勾选这个选项后,元件的原点位置将设置为轴心所在的位置。默认情况下,每个元件的(0,0)都是在左上角;勾选了轴心同时作为锚点后,则元件的(0,0)在轴心的位置。Unity中默认是中心为锚点,这是左上角,保持默认即可。

  2. 溢出处理 设置超出舞台矩形区域的内容怎么显示,有可见,隐藏,垂直/水平/自由滚动

  3. 自定义遮罩 详情看下面遮罩内容

  4. 点击穿透 比如带有透明区域的png图片,默认情况下,空白区域点击事件照样触发,勾选后,透明区域不再响应事件,若项目中需要多个带有透明的PNG重叠且各自触发事件,建议勾选,因为不勾选,虽然能够看到下一层的图片效果,但是点击事件被第一层的透明区域拦截了,无法下发到下一层PNG上。

  5. 扩展 详情看下方扩展介绍

  6. 设计图功能 显示在舞台上,做布局的时候可以参考整体的UI图,就像印着写字帖一样,更快速,更精准的布局,甚至都不用UI进行尺寸标注

自定义遮罩

普通遮罩

可以设置组件内一个图片或者图形作为组件的遮罩。

当使用图形(Graph)作为遮罩时,有图形的区域内容可见,例如,一个圆形,则圆形区域内可见,其他区域不可见。

当使用图片作为遮罩时,图片内透明度为0的像素对应区域的内容不可见,反之可见。超出图片区域的内容不可见。

反向遮罩(挖洞)

效果和正常遮罩相反,也就是可见的区域变不可见,不可见的区域变可见。

使用图形(Graph)作为遮罩时,有图形的区域内容不可见,例如,一个圆形,则圆形区域内不可见,其他区域可见。

使用图片(Image)作为遮罩时,图片内透明度为0的像素对应区域的内容可见,反之不可见。超出图片区域的内容可见。

扩展

这个功能就相当有意思了,刚才我们说了,中央操作区也是一个组件,一个组件就相当于一个页面,一般都是只有一个主页面,当你的页面复杂或者想要分开管理的时候可以创建多个组件,然后放到一个组件里,将这个组将当成主页面。当某个组件(页面)复用性高的时候,这种方法很有用。

Android里面布局代码过多的时候,通常都会提炼出一个布局,或者复用性较高的布局提炼出来(比如APP的标题栏复用很高),这样后续其他布局使用的时候直接使用include关键字直接引入布局,相当便利。

当你选择扩展为“按钮”的时候,会发什么效果?

修改保存后妥妥的发现组件的图标变成了按钮的图标;

这时候我就产生疑问了:难道按钮进度条这些都是用组件封装的?

我选择不同的扩展,保存后发现组件的图标会对应修改,表现出的效果相当明显了

  1. 按钮/标签/进度条/下拉框等功能都是组件修改封装而来

  2. 组件就相当于基类,你想要实现其他功能,可以在组件上进行修改封装,之后在主组件(主布局)中使用

  3. 元件包含基础元件/组合型元件/特殊元件,是官方已经封装好的控件,上面元件有分类,组件就包含元件里面的组合型元件,组件还可以凭你的想象自由组合成新控件

滚动容器

对组件或者列表设置了“溢出处理”为“水平滚动”、“垂直滚动”,“自由滚动”后,组件或者列表即成为滚动容器。点击“溢出处理”旁边的按钮,可以设置详细的滚动的相关属性。

  1. 触摸滚动效果 是否允许用户直接拖拽滚动区域内的内容。一般在移动平台上使用,PC上较少,PC上一般需要拖动滚动条,或使用鼠标滚轮。

  2. 滚动条组件 设置滚动条资源。一般不需要设置,全局有一个设置,在主菜单“文件->项目属性->默认值”里。如果你要使用不同于全局设置的滚动条资源,那么在这里设置。

  3. 下拉/上拉刷新组件 设置上拉刷新或下拉刷新时需要显示的组件。一般是你封装好的组件

  4. 页面模式 以视口大小为页面大小,每次滚动的距离是一页。一般在移动平台上使用,PC上较少,拖动滚动条进行滚动操作与这个模式冲突。

  5. 禁用裁剪边缘 一般情况下,视口不包括边缘设置的部分,也即是容器设置四周的留空部分也会被裁剪。如果需要,可以勾选这个选项,使容器四周的留空部分不被裁剪。

  6. 浮动显示 勾选后,滚动条不占据视口的位置,而是直接覆盖在视口上面。例如一个适用于手机的滚动条,它是细条且半透明的,只在滚动时才显示出来,用于提示滚动位置。那么我们把它设置为“浮动”,这样就不会挤占视口的显示空间。

控制器-重点

FairyGUI的核心功能之一,提供了几个需求支持:

  1. 分页 一个组件可以由多个页面组成。

  2. 按钮状态 按钮通常有按下、鼠标悬浮等多个状态,我们可以利用控制器为每个状态安排不同的显示内容。

  3. 属性变化 利用控制器,我们可以使元件具有多个不同的形态,并且可以方便地切换。

每个组件可以创建多个控制器,且互不影响

在组件中点击添加控制器会跳出创建框

名称       为控制器名称,同一个组件内的不要同名

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

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

你可以单独新建按按钮看看,按钮的上方就有一个默认名为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”,要想和进度条最右侧实时跟随移动,设置关联即可。

如何实现带有跟随动画的进度条?

细心的朋友发现了,还有个小狐狸跟随进度条,平时玩游戏切换场景的时候经常看到进度条不是单调的横线,还有些小动画跟随,增强灵动性。

这个实现和上面的文本添加类似,区别在于你要想拖入动画的话,可以在编辑进度条的时候增加个装载器,装载器放入动画文件,想要和进度条进度试试跟随的话,再设置小狐狸和进度条的伸缩条的关联设置为右右关联

如何监听进度条?

进度条最大的作用就是和程序相结合,用于加载中,流程进度节点等,所以我们要能修改和监听进度条

滑动条

如何做好面试突击,规划学习方向?

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节

img

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

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

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

png)

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

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

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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值