1)SRP Batch合批失败
​2)Unity增量打包AssetBundle没变化的资源也会被重新打包
3)如何查找il2cpp.so代码段映射的内存突然变大的问题
4)iOS画面不明原因freeze


这是第283篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

SRP

Q:最近尝试用SRP Batch,但感觉非常难以捉摸。这里所有的物体都是用的同一个Shader,而且关键字也都一样,也就是同一个变体。按说应该可以合并Batch的,但第二个提示Shader的关键字不同,SRP合并失败。

在网上查了一些资料,没有有用的信息。自己试了一下,只要改其中的一些RenderQueue,SRP Batch的结果就有变化(不能合并的数量变少了)。

但是,RenderQueue不能随便改吧?会影响性能。而且对于半透的来讲,渲染结果都会错。更何况改起来非常麻烦。各路大神们,想了解一下大家是怎么解决这个问题的?另外,大家的项目有没有用SRP Batch?还是用的传统的Static Batch?

有人提醒,把光图去掉试试,虽然的确有用,但总不能去掉光图吧?

又试了一下,专门把这些结点单独烘一下,也有用。看来跟光图也没直接关系。

感谢deviljz@UWA问答社区提供了回答

感谢题主仇磊@UWA问答社区提供了回答

AssetBundle

Q:项目中使用Git进行版本管理,在每次生成AssetBundle时都是使用 BuildAssetBundleOptions.Determinestic对所有的资源生成AssetBundle,并且生成的缓存目录都是统一的。但是发现在切换Branch后,本身没变化的资源生成的AssetBundle发生了变化。

通过Editor/Data/Tools中的webextract和binary2text工具对比发现其中的preloadIndex发生了变化,但实际上资源没有变。

请问大家的项目中对于AssetBundle增量打包有好的方案吗?还是需要手动管理每一个变化的资源再进行AssetBundle的生成?

感谢Richard Yu@UWA问答社区提供了回答

IL2CPP

Q:各位大佬问一个问题,就是最近的两个版本发现我们的il2cpp.so这个库mmap内存变大了,这块有什么好的办法查吗?
1. 不是Mono内存变大
2. 静态文件il2cpp.so本身没变大
3. 也不是数据段变大

不知道是谁用到了特殊的代码。请问有什么好的排查方法吗?试过二分法,如下图:79456k这个值是异常的,正常下只有35808k。

iOS下并无明显异常,只是安卓有问题。

用的很多方法都没查到,后面在测试时,让测试同学切后台,再开很多新的应用(这时mmap的内存应当会降下去),再把应用杀掉,如果这个mmap的内存降了不再涨,让测试同学就把问题的优先级降了。

原本的思路是想:
1. 通过物理内存—>找到对应的虚拟内存地址,再算出偏移---->对应.so的地址,再找到目标代码---->再找到源代码的,失败了。
2. 使用二分法的话,有操作系统在干扰,不能必现。

如果后面有同学有想法或方法能查到增大部分的内存对应的代码的,可以一起讨论一下。

感谢littlesome@UWA问答社区提供了回答

iOS

Q:我们最近升级Unity到2019.4.29f1,在iOS上(目前发现的是iPhone 12 Pro + iOS 14.7.1)某些时候画面freeze,无法恢复只能退出。但是,只是画面被freeze(画面完全不动),逻辑仍然在跑(后端收到了网络包等,而发送网络包是在客户端主线程),所以排出了主线程死循环的问题。

请问这可能是什么原因呢?是某种Shader问题引发的GPU挂起么?

感谢梅辰@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)

03-06 00:04