内容简介:这是第145篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员)
这是第145篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
本期目录:
- 如何优化包体大小
- 如何去除打包自带的UnityAds文件
- 不透明物体的渲染排序
- Shadows.CullDirectionaShadowCasters的开销分析
- PC版本如何获取显示器分辨率
资源管理
Q:目前,在项目前期打出来的APK已经好几个GB了,已知有一些废弃资源还没有做整理。想咨询下,一般在优化包体方面大家都是怎么做的?看到有些游戏是用小包+下资源包的方式,作为备选方案。请问一下单纯优化包体有什么系统性的经验吗?包括与资源相关和其他的都可以。
A1:我最近也在处理包体的问题,可以谈谈几个自己的经验:
1)常说的去掉冗余资源+设置资源格式,这个就不说了,论坛里也比较多,这部分影响也是最大的。
2)合理规划图集,尽量少留大量空白,可以挪一下从而把尺寸降一个级别,有用TexturePacker打包的团队,在特殊场景可以激进点采用带旋转和Trimming的方式打包图集。
3)合理看待UI尺寸,因为一般UI不开Mipmap,所以你最好自己控制下UI尺寸,对于大块的背景图和图标,采用九宫或对称等方式去生成剩余部分。
4)ABI可以根据项目需求去除X86架构,对于IL2CPP的项目减少比较明显(一般一份IL2CPP代码多大就减少多少),另外合理控制工程里C#代码总量包括导入的插件这些,可以有效减少生成的IL2CPP代码的大小。
5)在固定视角的情况也可以直接关闭3D模型贴图的Mipmap,直接选择合适的贴图尺寸就好。美术层面也可以剔除不可见部分,减少模型大小。
其实项目中每个地方或多或少都会对包体产生影响,要是细说的话可以说一天,包括策划表格都同样会影响包体,所以最好根据80/20原则来找出影响最大的部分,然后全力解决,这样效果也最明显。
感谢Enak@UWA问答社区提供回答A2:单纯的包体优化,我认为需要做好3个基本点:
1)排除所有冗余资源;
2)设置合理的资源压缩格式;
3)合理地制作资源(例如UI的九宫格纹理)。
以上在UWA官方的博客(blog.uwa4d.com)里面都能搜索到不少文章,这里就不展开叙述了。
基础包+动态下载资源包的方式,本质上只是为了让玩家能够尽快进入游戏。
感谢张锐@UWA问答社区提供回答A3:你可以把所有AssetBundle包压缩下,用UWA的资源检测与分析看一下是不是有很多冗余文件/未压缩的文件之类的。
感谢deviljz@UWA问答社区提供回答A4:除了资源检查冗余,可以尝试 Android App Bundle , 参考: https://developer.android.com/platform/technology/app-bundle ,Unity2017.4.17f1已经支持.
感谢xmzyl@UWA问答社区提供回答构建
Q:如图所示,BuildReport里面有portrait.jpg和landscape.jpg这两个文件,好像是UnityAds带的,但是我并没有使用UnityAds,也找不到这两个图在哪,文件还非常大,请问有谁知道如何去掉这两个文件吗?万分感谢。
A:找到Unity安装目录DataResourcesPackageManagerEditormanifest.json,将manifest.json文件的dependencies清空,保险起见顺手也删掉文件夹内若干个压缩文件。这样也能解决Unity 2017.4.1版本在导入资源时卡死在portrait.jpg和landscape.jpg两张图片的问题。
渲染
Q:不透明物体在渲染的时候到底是怎么 排序 的,为什么有时候不是完全按照前后顺序?之前一直以为是完全按照前后顺序来排列的,今天仔细看发现好像并不是,但是不理解为什么,希望某大神能帮我解答下,下面是测试场景截图:
场景中有3个Cube(红色有缩放),从右到左name依次是1、3、2,相机在最右边,两个绿色物体是同一个材质,红色的是另外一个材质。两个材质球只是颜色不同,其他都一样,Shader是Standard。现在红色物体位置靠右的时候,渲染是完全按照从前到后(也就是1-3-2)的顺序渲染的。
然后我把红色物体的位置网左边调了一点,如下图:
还是位于两个绿色Cube之间的,渲染顺序就变成了1-2-3(也就是先渲染最前面的Cube,再渲染最后面的Cube,最后才渲染中间的红色Cube),不是完全按照前后顺序了。
更奇怪的是,在这种位置关系下,如果我把红色Cube的材质换成跟绿色Cube一样的,渲染顺序又会编程从前到后。
实在是不明白了,所以想咨询下。
A1:几个原则:
1)如果你自己定了,就按你自己定的来(Camera Depth、Render Queue等);
2)先保证结果正确;
3)再保证性能尽可能好。
对于不透明物体,因为有z test,所以随便以什么顺序渲染,结果总是正确的,所以看3,主要是两点:
1)对(硬件)early-z友好,对于相互遮蔽的对象,通常先画距离相机近的,再画距离相机远的,这样 early-z的时候后渲染的对象可以直接被Culling掉(被前面先渲染的遮住了);相互不遮蔽的就随便来了。这个也和GPU相关,对于有更高级硬件Culling的,比如TBDR的powerVR,不需要自己做排序,硬件会自动处理(HSR),做完美Culling。
2)尽可能减少渲染状态切换,ABCD,假设AD渲染状态(Mesh、Shader、Texture、Uniform、Blend Setting等)一样, BC渲染状态一样,那么ADBC更好,渲染状态只切换一次(AD -> BC),否则两次(A->BC->D);不同的渲染状态切换开销也不同,所以通常又会按FBO、Shader、Texture、Uniform等开销从大到小的顺序排。
如果1和2冲突,要看Unity怎么去评估哪种排序性能更好。
感谢gx@UWA问答社区提供回答A2:不透明的渲染排序不单单是根据距离从前往后,跟挺多东西相关,大的层级就是Camera的Depth, Sorting Layers,SortingOrder,RenderQueue。
还有很多方面影响渲染顺序,比如会优先渲染第一个Pass, 烘焙的话LightMapIndex也会影响, 再一个Material是否相同, 如果Material相同,Pass又有影响,如果开了合批,合批也有影响。
感谢赵林@UWA问答社区提供回答渲染
Q:QualitySetting将Shadow Type也改成No Shadow后,为什么Shadows.CullDirectionalShadowCasters还有开销产生?
A:按照常理。应该是没有Shadows.CullDirectionalShadowCasters开销的。怀疑是Unity的BUG。
解决方案就是:如果是QualitySetting里面Shadow Type改成No Shadow,那么将场景里面的Directional light的Shadow type设置成No Shadow。观察Profiler,的确消失了。Unity版本2017.4.15f1。
分辨率
Q:PC版本如何获取显示器分辨率?我的PC版本想:
1)初始分辨率不要超过显示器分辨率;
2)支持玩家拖动边框并且保证窗口比例。
不知道可不可以:启动的时候根据显示器分辨率强制设置一下,监听分辨率变换的事件,然后每次固定设置成16:9。
A:以上题主的回答是可行的:
1)在游戏的初始化脚本里面,通过调用Screen.SetResolution设置想要的分辨率。
2)通过WM_DISPLAYCHANGE来监听分辨率变化的消息,然后再次调用Screen.SetResolution。
如果怕监听Windows事件麻烦,还有个不优雅的办法,可以用一个定时器来检测屏幕分辨率是否改变。这里需要自己实现一下WndProc,具体可以参考下:
感谢张锐@UWA问答社区提供回答今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
官方技术QQ群:793972859(原群已满员)
以上所述就是小编给大家介绍的《如何优化包体大小》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- ReactNative字体大小不随系统字体大小变化而变化
- JVM 参数最佳实践:元空间的初始大小和最大大小
- 原 荐 java计算对象占用内存大小:lucene专用于计算堆内存占用大小的工具类
- 获取网络图片的大小
- 获取网络图片的大小
- 减小APK大小
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP and MySQL Web Development
Luke Welling、Laura Thomson / Sams / July 25, 2007 / $49.99
Book Description PHP and MySQL Web Development teaches you to develop dynamic, secure, commerical Web sites. Using the same accessible, popular teaching style of the three previous editions, this b......一起来看看 《PHP and MySQL Web Development》 这本书的介绍吧!