1)iOS渲染卡死应该如何解决
2)C#传给C++的Byte数组如何释放
3)EAssetBundle.Unload(true)触发长时间卡顿的原因
这是第358篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
UWA社区主页:community.uwa4d.com
UWA QQ群:465082844
Platform
Q:想问问大家是否有遇到过iOS渲染卡死的问题?表现是整个画面静止,背景音乐还在播放,但不崩溃。
Unity版本是2018.3.35,iOS15和16以上都遇到过。
随机出现,Xcode连真机无任何渲染相关报错,然后还不是稳定复现,所以排查比较难,只能跪求跳过坑的前辈们,感谢!
A1:关掉多线程渲染试试。
感谢HuangLingSheng@UWA问答社区提供了回答
A2:提供个思路,之前有类似的问题,在安卓上发现卡死在了FMOD的线程里面。
感谢郭艺君@UWA问答社区提供了回答
A3:我们项目之前有过类似的情况,是32位包出的,升级64之后就没再出现过,可以试试。
感谢许诺@UWA问答社区提供了回答
A4:你可以试一试关闭Unity的自动渲染,然后移除Metal渲染,只保留OpenGL试一试。
感谢haohaoling@UWA问答社区提供了回答
A5:Unity 2018版本后开了纹理异步上传,如果资源管理不严谨,就会出现该问题,资源非法卸载的时候就会导致卡死。特别是当从AssetBundle异步LoadAsset时(包含纹理),如果卸载AssetBundle,很大概率会出现屏幕冻结。
感谢1 9 7 3-311135@UWA问答社区提供了回答
Script
Q:游戏里用C#读取文件数据byte[],然后传给C++(unsigned char*),有点不明白,这个数组是同一份内存还是复制了一份?
在C++调用free()释放会闪退,猜想应该没有复制,如果是这样,C#这边读出来先不管,C++那边还引用着,也没释放(析构时置空引用),要怎么释放呢?
针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/652cb15d9d889b61f7e4cfac
Loading
Q:当前项目运行文件在一部分主机平台上,会有AssetBundle.Unload(true)触发的数百毫秒的CPU卡顿。
当前运行时是有频繁加载和卸载相关的操作。但是测试对加载(限制AssetBundle.LoadAssetAsync)和卸载(限制AssetBundle.Unload)频率进行单帧限制,在部分主机平台上仍然无法解决。
AssetBundle本身的加载尚未尝试,但是一般L4Z压缩的单个AssetBundle加载都在1-2帧内完成,个人觉得不应该影响很大。
用Profiler追踪数据,发现造成较长时间卡顿的帧,Unload调用次数很多只有1-2次,并且处于加载中的头部资源也不多。单个头部资源可能引用较多依赖资源包。
不知道有没有处理过类似问题的朋友,可以给一些检查方向上的建议。
A:经查,是AssetBundleLoadRequest太多把PersistentManager锁住了。给加载和卸载分配单独的帧就好了。
感谢题主欧月松@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844