前言
因为有不少同学反应在使用图文混排的时候,出现很大的性能问题,导致画面帧率不稳定,甚至极低。博主对此非常抱歉,当时仅凭兴趣,在一个个功能上不断叠加,几乎没有考虑到性能的优化。这次有几天的空余时间,就针对图文混排做了一次整理和优化。其实,这篇博客比较发得比较晚,在github上博主都是及时更新了代码,有兴趣的同学欢迎关注。不过,博主对图文混排并没有实际的使用机会,可能有些地方还有考虑不完善的地方,博主会尽量优化。
强制优化
- 动态表情的帧数能少则少,我这里测试因为是使用的网络资源,每个动态表情有八张图片,在实际项目中建议两张就应该足够了。
- 能使用静态表情,就放弃动态表情。因为动态表情是在update里计时更新图片的uv来做表情切换,如果使用静态表情就省下了很大的循环计算量。
- 表情能少则少,不管在每个Text里,或者在整个聊天框内。根据项目的需求,可以限制Text的表情数量,或者使用对象池动态增删,不过我这里并没有去封装对象池,需要自定义。
- 能使用单图集就不使用多图集,理由同上。
- 如果不使用表情,肯定性能会更好,这就是一句废话。这里的强制优化都是从最直观的去节省性能,简单粗暴,而且效果较好。
配置文件替换字符解析
- 之前的版本是将表情名称,大小,比例等一系列参数,放在Text里面通过SetVerticesDirty函数在最开始解析获得。现在将这些参数都写到了SpriteAsset里面,并且在编辑器中可编辑。然后只需要在最开始读取一下SpriteAsset的文件,就知道当前信息,比如表情的名称,每个表情里有哪些Sprite,每个Sprite的大小,uv等相关信息。
- 示例截图:
- 这里还新增加了一个标签的变量,在前期需要配置的,就是把一个动态表情的所有Sprite都统一选择到同一标签下
简化正则表达式
- 转化对比:
<quad name=test Size=24 Wdith=1 />
->[#test]
支持多图集
- 支持多图集:
[图集ID#表情名称]
,图集ID对应SpriteAssets的ID,表情名称对应SpriteAssets的标签,ID为0时,可省略不写
支持超链接
- 支持超链接,图集ID输入为-1时,就默认为超链接,后面则为链接名称,示例
[-1#超链接名称]
,并且在InlineText有一个OnHrefClick事件可以监听点击
避免sprite的重复绘制
- 将之前版本的世界坐标信息,转化为本地坐标,只要相对父物体的位置信息不变,也可以避免重复绘制。在之前版本,因为这个原因拖动Scroll View会造成大量多余的计算,导致帧率极低。
- 增加SpriteGraphic模型的对比封装,以标签和位置信息作为对比参数,如果一样,就不再进行图片绘制