转载于:http://gad.qq.com/article/detail/32076

作者:破土君

相比于Android或者iOS原生App,Unity3D引擎开发的游戏在冷启动时间上确实比较长。我在三星SM-N9008手机上的测试结果是一个不算大的项目,如果使用Mono后端编译,则需要10秒左右的冷启动时间,而如果使用 IL2CPP 后端编译,则冷启动时间为7秒左右。

IL2CPP相比于Mono确实能够加快冷启动时间,这是可以预期的。因为在Mono编译的情况下,每个 .cs 文件都是一个 TextAsset 文件,而所有的 .cs 文件都需要在冷启动时候全部加载到内存中,这些碎片化的文件加载操作都会占用冷启动时间。关于冷启动需要加载哪些文件的分析,可以参考Unity3D游戏在启动时都默认加载哪些资源。而IL2CPP会把所有的C#代码编译成C 代码,然后再进行编译、链接等操作,这样就减少了C#、DLL所带来的开销。

在项目中我们应该怎样加快游戏的冷启动速度呢?经过调研,我总结出以下几个优化的要点:

1.项目中添加一个Loading场景,这个场景会是游戏启动的第一个场景。

2.在Loading场景中尽量少的依赖,尽量少的纹理依赖、AssetBundle依赖、代码依赖,总之,这个Loading场景一定要尽量少的依赖,这个场景一定要尽量简单,这样才能保证尽快的加载速度。

3.在游戏中尽量少的使用Resources方式管理资源,Resources目录下面的所有资源会在ResourceManager中记录下来,而ResourceManager就是一个文件,通常是一个YAML格式的文本文件。而这个文件是会在冷启动时加载的。所以Resources目录下面的有越多的资源,那么这个ResourceManager就会越大,加载时间也会越长。

4.使用Resources方式管理资源还有一个坏处,就是所有的资源都是统一管理的,这样的资源的管理粒度没办法控制。建议使用AssetBundle的方式管理,这样可以使用多个AssetBundle来管理资源。把在Loading场景中需要的最小资源集放在一个AssetBundle中,这样在冷启动时启动Loading场景时,只需要加载一个AssetBundle即可。选择合适的粒度管理AssetBundle,可以在合适的时候加载某一个AssetBundle,不使用时就可以卸载某一个AssetBundle。

5.在Loading场景中,添加一个进度条,然后 同步加载 进入主场景所需要的AssetBundle,这样用户就不会感到等待时间太烦躁了。同步加载要比异步加载时间更短。

6.纹理资源在游戏中一般是最大的资源,选择合适的压缩格式进行压缩,既可以减少内存占用,又能够加快资源的加载速度。压缩格式的选择要从显示效果和压缩率上进行权衡。一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情况下,可能还可以考虑使用Alpha通道分离技术进行压缩处理。

7.代码文件可以编译成 .dll 文件, 减少大量TextAsset文件导致的碎片化加载时间。

8.强烈建议使用IL2CPP后端,如果使用IL2CPP,则可以忽略第7条。

转载于:http://gad.qq.com/article/detail/32076

作者:破土君

转载于:https://www.cnblogs.com/CodeSnippet/articles/7562730.html

转载:Unity3D游戏如何加快冷启动时间相关推荐

  1. Unity3D游戏如何加快冷启动时间

    相比于Android或者iOS原生App,Unity3D引擎开发的游戏在冷启动时间上确实比较长.我在三星SM-N9008手机上的测试结果是一个不算大的项目,如果使用Mono后端编译,则需要10秒左右的 ...

  2. unity优化冷启动时间/加载时间总结

    本文一部分博主并未实践过,只是做一个总结,如有错误,请指正 目录 一.概念了解 二.优化目的 1.保证游戏流畅度的基础上DrawCall越小越好 2.Statistics统计面板参数 3.打包编译 三 ...

  3. Unity3D 游戏引擎之脚本实现模型的平移与旋转(六)

    Unity3D 游戏引擎之脚本实现模型的平移与旋转 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/ar ...

  4. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏 ...

  5. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  6. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  7. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  8. 《学Unity的猫》——第十八集:Unity3D游戏开发工程师笔试刷题,皮皮收到面试邀请

    文章目录 18.1 皮皮收到面试邀请 18.2 面试题库相关网站 18.2.1 牛客网 18.2.2 领扣LintCode 18.2.3 力扣LeetCode 18.3 优质学习网站 18.3.1 菜 ...

  9. [Unity3D]Unity3D游戏开发之怪物AI

    大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei. 在上一篇文章中,我们基本上实现了一个小地图的功能, ...

最新文章

  1. aws python sdk send sns_AWS:boto3订阅SNS时的空SQS队列
  2. 分布式锁中的王者方案:Redisson
  3. linux shell中各种分号和括号,linux shell 各种分号,括号使用方法总结
  4. jz2440开发板修改UBOOT支持NAND FLASH
  5. dos攻击命令_Kali Linux系列之拒绝服务攻击(DOS)实战(上)
  6. 学PyTorch还是TensorFlow?
  7. android系统(9)---android工具网站
  8. MyEclipse部署,将一个项目引入到两个项目;多项目部署
  9. Handler深入(分析源码,手写一套Handler)
  10. 算法:回溯七 Permutation Sequence数组全排列定位
  11. [system] Map key not configured
  12. mysql复制表结构创建新表
  13. 下一代Play Station暂名Orbis但不支持PS3
  14. 2020第六届上海市大学生网络安全大赛线上赛Misc-可乐加冰
  15. IE低版本升级到IE11,问题总结
  16. PostgreSQL 连接(JOIN)
  17. 渗透测试入门(域名、DNS)— 理论知识
  18. 头条的动态页面爬取+百度下拉搜索框
  19. 解决:Clipping input data to the valid range for imshow with RGB data
  20. ei指什么_SCI、EI分别是什么意思

热门文章

  1. vulkan管线学习6
  2. numpy完整打印数组
  3. Vue中使用bounce防抖函数
  4. FreeIPA+Gitlab实现用户管理
  5. 傅盛:不要给自己设限,边界是后天长成的
  6. CatBoost 原理及应用
  7. 恋人之间的分手费,合法吗
  8. VMware虚拟机鼠标无法移出边界
  9. python官网教程怎么下载,python官网教程在哪
  10. 如何在Adapter中正确的使用Context