中文
resource-icon
多纹理合批 UI v1.0.6
类别
Creator扩展 插件
作者
逐夜00
Creator版本要求
v2.4.4
支持平台
HTML5
评分
售价
¥ 199.00 (个人)

介绍

YH Multi UI

购买须知

  • 不提供售后服务,请谨慎购买!!!
  • 购买内容包含实现源码,如果扩展需求可直接修改源码
  • 本产品为付费虚拟商品,一经购买成功概不退款,请在购买谨慎确认购买内容

插件功能

  • 最简单粗暴的DrawCall优化方案

  • Label与Sprite合批!

  • 不同参数shader不打断合批!

  • 一键转换预制体,一键优化DrawCall

插件原理

  • 基于 多图集合批,结合 动态图集 + 自定义顶点数据

  • 继承于 cc.Sprite 于 cc.Label ,修改了顶点数据填充,所以不影响原有代码逻辑

  • 顶点数据一致,使用的material也一致,自然可以达到合批的效果

  • 性能上唯一的区别是,顶点数据变大了,如果想达到更好的效果,可以不增加顶点数据,占用color的数据位,这个需要自行扩展了

  • 也就是说 通过增加顶点数据内容,达到降低DrawCall次数

  • 当然实际使用过程中,你可以 不用考虑这些,直接用也是没问题的

  • 简单的用于某个DC较高的界面,或者直接整个游戏使用,都是ok的

  • 如果你能配合得当,甚至可以 一个游戏一个DC

插件特点

1.无需配置,自动开启动态图集

2.无侵入原有代码逻辑与场景结构,即插即用

3.解决Label打断合批,将Label进行合批处理减少合批次数,目前使用 BMFont 兼容性最好,最大化的降低DrawCall

4.预留了几个参数可直接传参到shader,不会像material参数不同打断合批

5.内置 HSL shader

6.最简单粗暴无脑 的方式降低DrawCall方案

插件默认提供操作:

  •   转换MultiUI 
  •   将 cc.Sprite 转换为 MultiSprite 
  •   将 MultiSprite 转换为 cc.Sprite 
  •   将 cc.Label 转换为 MultiLabel 
  •   将 MultiLabel 转换为 cc.Label 

【选中】 需要转换的 场景预制体文件夹 ,【右键】运行对应的操作

这些操作,可以帮你快速转换组件!

转换MultiUI,选中资源 后,点击运行,待操作完成后,该资源内的cc.Sprite 与cc.Label,都被转换成MultiUI了

注意事项

DrawCall的降低不是没有代价的,合理使用才能最大程度的优化性能。

部分默认组件会重置插件使用的材质,影响使用,如cc.Button 的sprite模式等

使用方法

1.安装好之后【扩展】->【YH多图集UI】->【初始化】导入代码并初始化需要的资源

2.【选中】 需要转换的 场景预制体文件夹 ,【右键】运行对应的操作

3.开始预览

后续版本计划

  •   1.看能不能支持骨骼合批 (完成)
  •   2.兼容适配3.x (TODO)
  •   3.考虑增加 性能模式,减少顶点数据,降低性能开销 (测试)

友情提示

建议配合 正常降低DC方案 食用更佳

版本更新

  • 1.0.5

    • 修复bug,增加测试demo
  • 1.0.4

    • 增加 骨骼合批 与 测试Demo
    • 支持 龙骨 与 Spine
    • 注意 未经过测试,仅供参考
  • 1.0.3

    • 增加 RichText
    • 注意 未经过测试,仅供参考

注意:暂不支持原生 请按需购买

注意:由于引擎 3.x 与 原生 渲染流程比较封闭

单改js层不足以满足需求,插件 暂时不支持 3.x 与 原生

用户评分

平均评分
(3.62)
共有 8 位用户参与评分

评论

Yu_99i 2022-08-20 13:45

你好 ,有些问题请教一下,可留个联系方式吗

作者

V bqsj-yh

Yu_99i 2022-08-19 23:12

你好,作者 能留一个联系方式吗 ? 有些问题

麋鹿呀 2022-07-20 15:59

您好,我这边使用后 ,在游戏内重新启动游戏,会有概率报错:说Cannot read properties of null (reading 'load') 位置是dynamic-atlas/atlas 140行.请问这个原因会是什么引起的呢?

作者

动态合图那部分代码,不是必须的,只是优化可以去掉的

kanon95527 2022-06-29 18:06

问题解决了。 我这里没有额外增加顶点数据,我直接在color里修改的。 在传入index的时候,我乘了100,图片超出3张就会有问题,因为转16进制的时候,300超过255了。

kanon95527 2022-06-29 14:30

atlas.js insertSpriteFrame方法: info = this._innerTextureInfos[texture._uuid]; 文本的_uuid是空呢 所以,在场景里只有文本的时候,会有问题的

作者

因为修改了动态合图逻辑,这个问题我在这里提出过,可能没同步上来 https://forum.cocos.org/t/topic/98157/39?u=772100606

kanon95527 2022-06-29 11:31

发现一个bug: 复习情形:在场景里摆放 超过2个的文本,最终的渲染,只会是最后一个文本内容。 原因:YHMultiLabel类里,onEable会调_calDynamicAtlas并处理动态合图,但是,render-flow中的_updateRenderData会删掉合图

kanon95527 2022-06-28 16:09

大佬,您在想想,或者提供个思路也行,我也怀疑某段代码的问题,但是,不好定位问题,实在是难查。

kanon95527 2022-06-28 15:42

大佬,我的cocos版本是2.1.3我按照您的思路,在这版本引擎基础上修改了多纹理合批,但有个问题: 在编辑器显示的图片或文本是错乱的,但是运行起来,在浏览器里显示是正常的DC也是1. 我怀疑是编辑器本身没有自动图集机制,在浏览器里才可以自动打包图集,为什么你那个可以正常显示?

作者

编辑器内应该是没有自动图集的,而且从设计上来说不能合批的时候,也是可以正常使用的,你那应该是有bug没定位到....我之前做的时候也遇到过,不过忘了啥原因

吾昂王 2022-06-21 10:07

赶紧完善支持Android平台啊,当初冲着支持安卓买的,现在买了不能用,放着吃灰#36

xiaohaixing 2022-06-20 11:12

大佬加个微信17710035710,加了YHMultiUI ,项目的fps 抖动比较大

  • 1
  • 2
  • 3
  • 4

2020 © Cocos.com版权所有

增值电信业务经营许可证:闽B2-20160169

闽ICP备14002653号-6

闽公网安备 35020302033941号