如何理解UGUI Atlas合批时的 Include in Build选项?

栏目: 后端 · 发布时间: 6年前

内容简介:这是第131篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群:465082844(仅限技术交流)

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

UWA 问答社区:answer.uwa4d.com

UWA QQ群:465082844(仅限技术交流)

UGUI

Q1:关于UGUI的合图我有如下几点疑惑:

1)UGUI的合图是在什么时候发生的?如果说合图是在Editor下合出来的大图,那么打AssetBundle的时候似乎只打了图集文件与相关的小图,并没有看到有合成的大图出现,那是不是Unity在运行时执行Late in binding时候进行了合并呢?

2)Include in Build到底是包含了什么?我的理解是如果勾选了就会包含生成的大图,如果不勾就不包含,那就又回到了问题1 ,如果不勾的话,那大图是不是在运行时生成的呢?

3)小图的大小会影响性能么?首先小图图源肯定是会影响包体的大小。
基于问题1与问题2 ,如果是运行时生成的大图,那么在生成大图的时候,I/O是否以字节流的形式往空白大图内进行写入合并的?如果这样,运行时生成大图的瓶颈应该是源文件的大小与格式吧?(假如图集和图源的压缩格式不一致)

回答如下:

1、Unity合大图的时机是根据设置来的。

如何理解UGUI Atlas合批时的 Include in Build选项?

如上图,可以在打包的时候合,也可以编辑器运行的时候就合。Editor中合成的大图是放在缓存目录里:LibraryAtlasCache。

2、可以参考 About “Include in Build” behaviour

我的理解是,勾选了Include in Build后,图集资源会被打进App包体里(不是AssetBundle包)。如果图集是AssetBundle包管理的,最好不要勾选它,会造成资源双份。至于哪些资源会双份,需要实验下看看。

3、小图源文件的大小不直接影响性能,因为Unity最终只用合并的大图,小图本身不会进入发布的App或AssetBundle包中。但通常,小图的大小和Sprite的设置会影响合并后的图集,所以会对最终性能能产生间接作用。

针对Sprites Atlas在不同Sprite Packer Mode选项下打包,做了个实验,结果分享下:

如何理解UGUI Atlas合批时的 Include in Build选项?

1、前三个选项(Disabled和两个Legacy Sprite Packer)结果是一样的:

如何理解UGUI Atlas合批时的 Include in Build选项?

打出的AssetBundle包里没有任何内容,估计这种情况下散图都没有,是完全加载不到资源的。

另:发现了疑似Unity的Bug,新创建的Atlas,和已经打包过的Atlas在禁用选项下,打包的结果不同。

2、后两个结果相同:

生成AssetBundle包的时候,图集就创建了

如何理解UGUI Atlas合批时的 Include in Build选项?

感谢Walker@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b9f99a41a1e9733ee03300b

制作

Q2:材质的Shader,或者GameObject组件的Monobehavior,在开发过程中可能会删掉一个Shader的Property或者代码的序列化参数。这些参数被删除后,材质或者GameObject Prefab文件中,该参数的序列化数据并未被删除。

比如下图中名为TestGetDependency的组件。参数 testSubject已经从代码中删除。

如何理解UGUI Atlas合批时的 Include in Build选项?
如何理解UGUI Atlas合批时的 Include in Build选项?

这样会导致使用类似AssetDataBase.GetDependencies之类方法获得资源依赖时,取得testSubject 引用的物体,导致打包时包入不需要的资源。用脚本扫描SerializedObject的方式是可以清除这些引用的,但是这样需要对应每一种类似情况单独写脚本(当前只想到Shader对应材质,代码文件对应Prefab),可能有遗漏或者处理不当。

所以我希望知道,有没有一个Untiy原生的清洗方法,或者业界通用脚本来处理这类序列化引用问题。

重新保存下就好。

比较麻烦的是材质球,需要自己分析下然后清理serializedObject。

感谢钱康来@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5bade8deafd2174f6fe94675

渲染

Q3:如下图,在性能报告中,我们发现Camera.Render下CreateVBO的开销较高,请问这个是如何引起的?

如何理解UGUI Atlas合批时的 Include in Build选项?

UWA:这本质上是你的网格重建导致的,多见于非UGUI的UI重建、Textmesh的重建等等,其重建时的CPU耗时主要受你的网格重建量大小影响,如果只是一帧其实问题不大,但如果是频繁开销,则需要特别注意了。

如何理解UGUI Atlas合批时的 Include in Build选项?

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b966858a711f261c1677e36

制作

Q4:如图,要实现一个界面迷雾效果。应该用UI实现还是要做一个这样的场景呢?现在我们的星图是3D的Prefab,我打算在上面盖一层黑色底图,根据势力范围修改底图显示亮的区域,有没有相关的插件可以使用?要实现的话应该从哪方面入手?

如何理解UGUI Atlas合批时的 Include in Build选项?

可以创建一个RenderTexture,像素点和地图一一对应,通过修改RenderTexture颜色值,在Shader中进行对应的计算,达到效果。Unity 5.4以后,可以通过向Shader中传递数组的方式实现效果。

感谢郑骁@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b977889a711f261c1677e39

内存管理

Q5:不同内存的安卓与苹果机型上(1G、2G、3G、4G...),游戏内存的峰值一般最高多少能保证不闪退。

这里有人会持续更新ios上的内存峰值,帖子下面还有人发了一个测试峰值的工具,用过还挺好用,大家可以参考。

https://stackoverflow.com/questions/5887248/ios-app-maximum-memory-budget.
如何理解UGUI Atlas合批时的 Include in Build选项? 如何理解UGUI Atlas合批时的 Include in Build选项?

感谢dra@UWA问答社区分享了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b8e2f5f339d267d357c6eda

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

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

官方技术QQ群:465082844(仅限技术交流)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

科技想要什么

科技想要什么

[美] 凯文·凯利 / 熊祥 / 中信出版社 / 2011-11 / 58.00元

在《科技想要什么》一书中,凯文•凯利向我们介绍了一种全新的科技观。他认为,作为整体,科技不是由线路和金属构成的一团乱麻,而是有生命力的自然形成的系统,它的起源完全可以回溯到生命的初始时期。正如生物进化呈现出无意识的趋势,科技也是如此。通过追踪这些长期趋势,我们可以对“科技想要什么”有所理解。 凯文•凯利预测了未来数十年科技的12种趋势,包括创造大脑这一得寸进尺之举。不过,为了让人类创造的世界......一起来看看 《科技想要什么》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具