技术分享连载(三十八)

技术分享连载(三十八)

本期话题:AssetBundle资源加密、Shader依赖打包、冗余资源定位...精选5个性能优化问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

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


资源管理

Q:我有一个关于AssetBundle资源加密问题。CreateFromMemory这里不推荐大规模使用,那是不是我们要放弃对一部分资源的加密?还是说有其它的解决办法?

由于CreateFromMemory的加载速度相较其他的接口而言,耗时明显增大,因此我们确实不建议大规模使用。就目前而言,除了使用CreateFromMemory,并没有其他高效直接的方法进行资源加密,因此,确实需要放弃对一部分资源的加密。同时,目前存在一些工具可以从更底层的方式来获取和导出渲染相关的资源,如纹理、网格等,因此,对于这部分的资源加密并没有十分的必要性。


资源管理

Q:我想确认一下Shader的依赖打包问题。如果采用了依赖打包,A、B、C依赖了D,当我更新了D包时,A、B、C是否都要重新打包?反过来呢?

在使用Unity 4.x的接口时开启DeterministicAssetBundle,或者使用Unity 5.x新接口(默认强制开启DeterministicAssetBundle)时,当更新了D包,都是不需要重新打包A、B和C的。
反之,如果更新了(比如B包),那么在Unity 4.x 下依然是需要重新打D包的,而Unity 5.x新接口则会检测到D包未更新,而自动跳过其打包过程。


资源管理

Q:关于定位游戏中冗余资源引用的问题。UWA的报告中能定位到具体的引用代码么? 在Profiler只能看到ManagedStaticReferences但是具体不到引用的位置。比如Static ClassA引用一个ClassB,ClassB上引用了一个资源,就定位不出这个引用的过程。请问这种情况下有没有比较好的方法找到引用关系呢?

该问题在Unity 5.3 之前的版本中都没有方式来进行定位,只能由研发团队根据对代码的推测了进行定位;而在Unity 5.3之后的版本则可以借助Memory Profiler来尝试定位,而Memory Profiler尚未原生集成在Unity Editor中,需要在以下网址进行下载:
https://bitbucket.org/Unity-Technologies/memoryprofiler


UI 输入

Q:UGUI的SrcollView Mask遮挡不住特效,这个有没有可行的解决方案?

UGUI的Scrollview Mask组件使用的是Stencil Buffer,需要严格确保渲染顺序的正确性,这对于粒子系统或是其他的模型较难控制,因此可以尝试通过其他的方式,如实现一个四边形Alpha 裁剪的Shader,将ScrollView的裁剪区域传入Shader,从而模拟一个特效被“遮罩”的效果。以下是宣雨松博客中提出的一种方式,可以作为参考:
http://www.xuanyusong.com/archives/3518


资源管理

Spine动画在NGUI的ScrollView滚动区域的层级也会出现问题,请问怎么裁剪Spine动画呢,Spine是骨骼,这不就等于给特效换Shader了吗?

对于ScrollView中的Spine动画,本质上和粒子系统是一样的,也需要对其Shader进行修改,加入Alpha裁剪的实现,并从脚本中将裁剪区域传入即可。