0x00 前言

相信不少使用Unity的小伙伴都听说过,甚至也亲身经历过在Unity5.6最初的几个版本中使用Resources.Load方法加载资源变~~慢的问题。

这个问题的确是存在的,比如这个issue中提到的:

android-performance-regression-when-loading-a-prefab-with-a-lot-of-child-objects-using-resources-dot-load

所以为了验证问题并思考是否有解决方案,我也实现了类似这个issue中提到的测试场景,并且分别在Unity5.6.1f1版本和Unity5.6.4p1版本上进行了测试对比,至于为何选择这2个版本下文再说。

这个场景比较简单,主要是在Resources文件夹下创建了一个有很多(650+)子节点的prefab,并且在运行时通过点击按钮调用Resources.Load进行资源加载。

而我的测试设备则是几年前的MI Note Pro。

0x01 测试

测试场景和测试设备都准备就绪了,接下来我们就直接在Unity5.6.1f1上进行安卓包的构建吧,同时直接连上profiler进行数据抓取。



不过这一测不要紧,果然可以发现这个版本的Unity在调用Resources.Load加载资源的效率很低。大概要耗时1700ms!

等等,冷静一下,回想一下既然是加载Resources文件夹内的资源,那么Resources文件夹有什么特点吗?对,它会随工程一同打包。也就是说在打包的过程中它会经过aapt这个工具的处理啊。那么aapt是什么呢?看它的全称——Android Asset Packaging Tool,安卓资源打包工具啊。那么能否通过修改aapt的参数来改善加载Resources文件夹内的资源效率的问题呢?

想到这里,吓得我立马导出了一个gradle工程。

打开build.gradle文件查看一下,嗯这里没有设置aapt的相关参数。

所以我来手动加上对aapt的设置吧:

aaptOptions {
noCompress '.unity3d', '.ress', '.resource', '.obb'
}

ok,这次我们通过Android Studio来导出一个安卓包。并且连上设备进行测试。

结果让人稍感欣慰,耗时已经从之前的1700ms来到了300ms。

所以,修改aapt的压缩策略对Resources文件夹内的资源是有效果。

好了,我们接下来使用另一个Unity版本——5.6.4p1来进行测试。

这次不导出gradle工程,直接使用Unity来打包。

wow~测试的结果亮瞎双眼。竟然只需要50ms!(考虑到我的测试场景很凶残,设备很简陋,从1700+ms来到50ms还是很大的跃升吧)。

这是为什么呢?

答案很简单,因为我们fix了这个问题啊。而这也是我选择这个版本进行测试的原因啊。

所以,如果还在对江湖传闻中5.6版本的Resources.Load效率变态的低感到恐惧的话,就赶快升级Unity版本吧。当然,作为最佳实践之一,尽量减少使用Resources也是不错的选择。

-EOF-

最后打个广告,欢迎支持我的书《Unity 3D脚本编程》

欢迎大家关注我的公众号慕容的游戏编程:chenjd01

Unity Android 5.6版本Resources.Load效率的问题的更多相关文章

  1. Unity中 动态加载 Resources.Load()和Asset Bundle 的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去.我们在编辑器里看到的Ass ...

  2. Unity Resources.Load

    GameObject bulletPrefab; void Start() {   bulletPrefab = Resources.Load("bulletPrefab")  a ...

  3. unity android相互调用

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  4. Unity 5.6 beta版本新特性

    http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...

  5. android studio 正式版本

    注意:以下 Android Studio 下载链接全是 dl.google.com 开头的官方下载,无需tizi,建议用浏览器直接从官方原始链接下载,不要用迅雷下载.不要用迅雷下载.不要用迅雷下载,重 ...

  6. 【Unity3D】Unity3D之 Resources.Load 动态加载资源

    [Unity3D]Unity3D之 Resources.Load 动态加载资源 1.Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹 ...

  7. Android 开发—— 小工具,大效率

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:姚志锋 一.Hugo插件 -- 打印方法运行时间 首先申明下,此Hugo非 彼Hugo(Hugo是由Go ...

  8. unity3d Resources.Load动态加载资源

    初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省 ...

  9. org.jetbrains.android.uipreview.RenderingException: Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupported major.minor version 52.0

    在Android Studio使用的时候,突然发现Preview功能不能用了,报了一个错,错误如下 org.jetbrains.android.uipreview.RenderingException ...

随机推荐

  1. 在 .NET 中,扫描局域网服务的实现

    在最近负责的项目中,需要实现这样一个需求:在客户端程序中,扫描当前机器所在网段中的所有机器上是否有某服务启动,并把所有已经启动服务的机器列出来,供用户选择,连接哪个服务.注意:这里所说的服务事实上就是 ...

  2. JavaSE(三)之static、final、abstract修饰符

    一.static修饰符 1.1.static变量 在类中,使用static修饰的成员变量,就是静态变量,反之为非静态变量. 静态变量和非静态变量的区别            静态变量属于类的,&quo ...

  3. CTF---安全杂项入门第二题 A记录

    A记录分值:20 来源: sammie 难度:中 参与人数:2255人 Get Flag:566人 答题人数:621人 解题通过率:91% 他在看什么视频,好像很好看,不知道是什么网站的. 还好我截取 ...

  4. 2017ecjtu-summer training #11 POJ 1018

    Communication System Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29218   Accepted:  ...

  5. LCS最长公共子序列~dp学习~4

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 Palindrome Time Limit: 4000/2000 MS (Java/Others ...

  6. 应用中Token的作用

    Token 的作用 Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交 ...

  7. 狗书无敌,天下第一(flask基础)

    为什么选择使用flask? 和其他框架相比, Flask 之所以能脱颖而出,原因在于它让开发者做主,使其能对程序具有全面的创意控制. 在 Flask 中,你可以自主选择程序的组件,如果找不到合适的,还 ...

  8. CSS3技巧巧妙使用:not(:last-of-type)简化你的css代码

    终于找到了一个好方法,使用:not(:last-of-type)简单方便,再也不要麻烦的单独使用:last-of-type了,不错! 应用场景:平时我们的列表一般都会有分割线,但是最后一个列表没有分割 ...

  9. hbase性能优化总结

    hbase性能优化总结 1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都 ...

  10. UserView--第一种方式set去重,基于Spark算子的java代码实现

    UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...