技术分享连载(八十三)

技术分享连载(八十三)

本期聚集话题:AssetBundle加载出错、LockPersistentManager耗时分析、Sprite Packer在iOS端失真...


我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

UWA QQ群:793972859
UWA 问答社区:answer.uwa4d.com


性能

Q1:我用UWA GOT进行本地性能测试,在CPU的数据分析中发现,某些帧StackTraceUtility耗时特别高,这是什么原因导致的呢?
请输入图片描述

StackTraceUtility.XXX是Unity引擎的Log输出,可能是本身Debug.Log/LogError的调用输出,也可能是使用过程中引擎端出现了Warning/Error等信息而自动输出的。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59ed93681b83b8df50804f6a


加载

Q2:我在Profiler中观察性能曲线,发现某一帧AssetBundle加载中,LockPersistentManager耗时比较大。请问这部分能否优化?

这说明当前帧或前几帧中存在较大量的资源在通过LoadAsync来进行加载,其本质是所加载的资源过大所致,对自身资源进行合理优化可降低Loading.LockPersistentManager的开销。另外,将异步加载换成同步加载,LockPersistentManager就不会出现了,但其总加载耗时是没有变化的,因为总加载量没变。

关于主要资源的加载优化,可参考如下链接:
Unity加载模块深度解析(纹理篇)
Unity加载模块深度解析(网格篇)
Unity加载模块深度解析(Shader篇)
Unity加载模块深度解析(动画片段篇)
UWA 六月直播季 | 6.8 移动游戏加载性能和内存管理全解析

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59eae0c4e0a5e637724a1572


制作

Q3:我在Unity 5.4.4f1下打出的AssetBundle无法加载,抛出以下错误,但是只是部分无法加载,平台是iOS ,打包参数有以下:
DeterministicAssetBundle;
DisableWriteTypeTree;
ChunkBasedCompression;
CollectDependencies;
CompleteAssets。
请输入图片描述

出现这个Log是因为项目的逻辑脚本序列化信息更新了,也就是资源的Typetree变化了。这种情况下,需要重新Build相应的AssetBundle,如果使用之前的AssetBundle,那么就会出现上述Log。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59e8aa5fe02a95cc6d0c498a


性能

Q4:我在安卓真机上跑游戏,发现Profiler下的合批数据和PC或者iOS下的不一样,因此不确定Android的合批是否有效。如下图,左边的是Android的,右边的是PC的(iOS和PC基本一致),Android的Render.Mesh明显比PC和iOS的高好多。
请输入图片描述
我用的设备是魅族 mote2 Android版本 - 5.1
请输入图片描述
补上FrameDebug的数据,上下的Mesh数据都是一样的,也没有z-fighting的情况,因为都是间隔地渲的,同样的物体一个一个地渲出来。经过分析,Android上不能设置Graphics Jobs(在Player Settings里面),也是不断打包测试发现这个问题,想了解一下具体是什么原因呢?
请输入图片描述

Graphics Job目前在Android平台上是为Vulkan而设计的,也就是只有支持Vulkan设备的才会真正起作用。按照Unity原厂的说法,该选项在不支持Vulkan的Android设备上应该是没有效果的。

另外,Graphics Job和MultiThread Rendering并不建议同时使用,而且以目前的Android设备来说,建议只开启MultiThread Rendering一项即可。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59e4510ce5b24a0754868985


制作

Q5:Unity 5.5.1版本下,Sprite Packer在iOS平台下RGBA PVRTC4打包图集失真非常严重(对单个的Sprite设置PVRTC4是正常的),参照了4.6.7版本是正常的,我想知道为什么呢?
请输入图片描述

确实可以复现。Unity 5.5 的PVRTC压缩有三档 fast/nomal/best,但都比Unity 4.7下的质量要差。找到一个官方的 issue ,说是 pvrtc 压缩工具(第三方)的Bug。

https://issuetracker.unity3d.com/issues/textures-rgba-compressed-pvrtc-2-slash-4bit-texture-with-compression-quality-set-to-to-best-slash-normal-is-less-detailed-than-fast

有人在这个帖子里提到,在 Windows 下尝试用 4.7 的 pvrtextool.exe 替换了 5.x 的,暂时解决了这个问题,建议也尝试一下。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。
https://answer.uwa4d.com/question/59d8850391f7a07d54511222


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