调试了一晚,只渲染图片没有文字drawcall才30多,文字在3d下使用char缓存模式,只要渲染在sprite的图片前似乎合批就打断,有什么解决方法吗?例如同屏100个聊天框+文字,无助求指教。。
刚好在找类似的解决方案,跟你分享一下。
思路大概有两种
- 节点分层 即本来是list->item->sprite、label 改成list->sprites->sprite 和 list->labels->label
- 渲染分层 找到的一些实现分享
https://forum.cocos.org/t/postrender-demo/95201
https://forum.cocos.org/t/ui/80026
1的缺点是要手动同步位置,管理起来可能也会比较麻烦,且不能复用。
2的缺点是聊天框之间不能有重叠部分 以及需要修改引擎。
本质上都是修改渲染顺序减少drawcall。供参考。预计可以减少一半的dc(sprite的dc变为1)。因为是聊天文字,要制作bmfont来解决文字的dc可能有点不靠谱,看看其他大佬的方案吧。
非常感谢!1的方法我也试过了,的确是可以但遮挡和管理很麻烦