700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity UGUI图文混排源码--优化版

Unity UGUI图文混排源码--优化版

时间:2021-12-29 18:36:02

相关推荐

Unity UGUI图文混排源码--优化版

前言

因为有不少同学反应在使用图文混排的时候,出现很大的性能问题,导致画面帧率不稳定,甚至极低。博主对此非常抱歉,当时仅凭兴趣,在一个个功能上不断叠加,几乎没有考虑到性能的优化。这次有几天的空余时间,就针对图文混排做了一次整理和优化。其实,这篇博客比较发得比较晚,在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模型的对比封装,以标签和位置信息作为对比参数,如果一样,就不再进行图片绘制

#region 模型数据信息private class MeshInfo{public string[] _Tag;public Vector3[] _Vertices;public Vector2[] _UV;public int[] _Triangles;//比较数据是否一样public bool Equals(MeshInfo _value){if (_Tag.Length!= _value._Tag.Length|| _Vertices.Length!= _value._Vertices.Length)return false;for (int i = 0; i < _Tag.Length; i++)if (_Tag[i] != _value._Tag[i])return false;for (int i = 0; i < _Vertices.Length; i++)if (_Vertices[i] != _value._Vertices[i])return false;return true;}}#endregion```#### **重写文本所占宽高**因为文本会根据正则增加一些其他的字符串到text中,于是默认的preferredWidth和preferredHeight就不再准确,这里根据实际的text内容重新计算,方便做聊天气泡等功能的文本所占宽高获取#### **增加层级管理**增加一个InlineManager脚本,由它来管理子物体中所有的SpriteGraphic和InlineText,并保证两者的正确联系与层级管理。这里也就可以创建多个InlineManager,来保证每一个之间的互不干扰。#### **新增快捷创建**你可以像创建其他UI一样,点击GameObject/UI/TextInline,直接创建默认的UI预设。#### **源码链接**github:[/coding2233/TextInlineSprite](/coding2233/TextInlineSprite)#### **问题遗留*** 在编辑器中,会造成系统的异常卡顿,在另一台win7系统没有影响,有影响的系统为win10;* 对于在编辑模式下表情的预览绘制逻辑整理;* 对于在运行模式下的逻辑流程的整理;* 偶尔可能会出现一些非正常的表现;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。