Unity游戏里面的场景、模型、图片等资源,是如何管理和加载的?

这就是本文要讲的资源管理方式——bundle打包和加载。

图片

Unity游戏资源管理有很多方式:

(1)简单游戏比如demo,可以直接在scene场景中引用住相关资源,然后打出真机包即可。

(2)场景静态引用资源过多会导致loding变慢,为了实现动态加载,加快场景加载速度,可以把资源放到Resources目录下。

(3)但这样还不行,因为没法实现热更新。实际项目大多使用的是AssetBundle,即AB打包方式。

热更新后面再展开讲,本文主要介绍下bundle打包和加载方案。

市面上有不同的AB打包方案和策略,这主要取决于游戏具体情况,包括游戏资源规模、游戏类型等。大致讲下几种方案的优缺点:

(1)直接打包prefab和scene。

优点是不用关心资源依赖关系,直接对prefab或scene打包即可,unity会自动把其依赖资源都打进同一个包里。缺点是造成资源冗余,包体变大。

(2)收集prefab和scene的依赖资源,先对依赖资源打包,再对prefab和scene打包,同时维护依赖关系,加载时要用到。

而对依赖资源打包又有不同的策略:比如将依赖资源和prefab/scene打到同一个包;将每个依赖资源单独打成一个个散列包;将被两个以上其他资源依赖的公共资源单独打一个包......

优点是可以定制适合游戏项目的依赖资源打包策略,可以避免资源冗余,减小包体;缺点是当依赖关系异常复杂时,可能会疯,比如场景A的依赖prefab A1-A100,prefab A1-A100各自又依赖一堆资源,且互相存在资源重叠......而且在加载Bundle时可能会引起内存峰值爆炸。

(3)各个项目的黑科技方案,模拟Unity的资源管理。篇幅有限,且属于进阶内容,本文就不深入讲了,有兴趣的可以关注公众号私聊或加微信。

这里来看一下Unity的资源打包和加载实现Demo例子

Demo需求:一个场景,3个shader,使用AB方式打包,并加载到安卓真机显示。

(1)打包

首先,我们总共打2个AB包:shader单独打一个AB包,场景单独打一个AB包。Unity的打包API是BuildPipeline.BuildAssetBundles,打包代码如下:

图片

然后就可以点击进行打包

图片

打包结束之后,可以看到以下bundle,除了生成shaderbundle和scenebundle,还自动生成了与目录同名的AB,以及每个bundle对应的manifest文件。

图片

其中AB.manifest记录了本次打包的所有bundle资源及其依赖关系,该文件可用于加载。可以看到scenebundle依赖shaderbundle。

图片

其他两个manifest文件则是只用于编辑器打包调试辅助,包含每个bundle包含的asset资源、依赖的其他bundle资源。

图片

图片

(2)加载

游戏启动之后显示一个UI界面,自动加载shader资源。同时提供一个按钮,点击之后加载场景。界面逻辑代码如下:

图片

加载场景,应该先加载其依赖资源。上面我们知道场景依赖shader,所以这里就跳过收集依赖关系的逻辑了。

先加载shader资源,这里使用的是AssetBundle.LoadFromFileAsync这个Unity API。

图片

然后加载场景资源。

图片

(3)工程构建

最后打出apk真机包,可以使用编辑器构造。

图片

最后生成如下apk包。即可安装到真机。

图片

最终结果如下:真机启动游戏,显示界面。

图片

点击按钮,加载场景。完成。

图片

本节内容就介绍到这里,有问题欢迎留言或私聊~~~

欢迎关注我的微信公众号【unity大话东游】,更多的unity技术类和渲染类文章等着你哦!

技术篇(二)Demo示例——Bundle打包和加载相关推荐

  1. Unity最新版打包AssetBundle和加载的方法

    一.设置assetBundleName 二.构建AssetBundle包 三.上传AssetBundle到服务器 四.把AssetBundle放到本地 五.操作AssetBundle 六.完整例子 七 ...

  2. java加载pmml模型文件报错_PMML总结与思考PMML模型生成和加载示例

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  3. 【Qt】Qt再学习(六):Qt中JSON保存和加载的示例

    1.简介 该示例演示如何保存和加载JSON格式文件,涉及到的类有:QJsonDocument, QJsonObject and QJsonArray. 2.说明 2.1 QJsonDocument Q ...

  4. CLR查找和加载程序集的方式(二) 流程图

    CLR查找和加载程序集的方式(二) 流程图 原文:CLR查找和加载程序集的方式(二) 流程图 在前一篇文章<CLR查找和加载程序集的方式(一)>中详细介绍了CLR查找和加载程序的方式,分别 ...

  5. numpy将所有数据变为0和1_PyTorch 学习笔记(二):张量、变量、数据集的读取、模组、优化、模型的保存和加载...

    一. 张量 PyTorch里面最基本的操作对象就是Tensor,Tensor是张量的英文,表示的是一个多维的矩阵,比如零维就是一个点,一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和 ...

  6. 前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)

    一.背景:页面为何会卡? 1.1 等待时间长(性能) 项目本身包/第三方脚本比较大. JavaScript 执行阻塞页面加载. 图片体积大且多. 特别是对于首屏资源加载中的白屏时间,用户等待的时间就越 ...

  7. TensorFlow模型保存和加载方法

    TensorFlow模型保存和加载方法 模型保存 import tensorflow as tfw1 = tf.Variable(tf.constant(2.0, shape=[1]), name=& ...

  8. PyTorch | 保存和加载模型教程

    点击上方"算法猿的成长",选择"加为星标" 第一时间关注 AI 和 Python 知识 图片来自 Unsplash,作者: Jenny Caywood 2019 ...

  9. android无感刷新下拉分页,GitHub - TakWolf/Android-RefreshAndLoadMore-Demo: 一种简单的并且优雅的方式实现下拉刷新和加载更多的分页效果。...

    Android - RefreshAndLoadMore Demo 一种简单的并且优雅的方式实现下拉刷新和加载更多的分页效果. 包含 ListView 和 RecyclerView 两种组件的对应实现 ...

  10. 以5个数据库为例,用Python实现数据的提取、转换和加载(ETL)

    导读:每个数据科学专业人员都必须从不同的数据源中提取.转换和加载(Extract-Transform-Load,ETL)数据. 本文将讨论如何使用Python为选定的流行数据库实现数据的ETL.对于关 ...

最新文章

  1. 一次地址选择器的实践
  2. 关于android ksoap获取失败的问题
  3. Scala学习第五天数组
  4. Pytorch模型(.pth)转onnx模型(.onnx)
  5. 公式之美:打通复杂思维的任督二脉
  6. 抢先看!Kubernetes v1.21 新特性一览
  7. mysql-5.1.73-8.el6_在centos中安装mysql详细步骤说明
  8. 基于jquery的复选树的插件
  9. hadoop学习笔记(五):java api 操作hdfs
  10. uni-app引入阿里云矢量图标库
  11. mysql rank函数怎么用_mysql rank函数怎么用
  12. Spark之SparkSQL和DataFrame
  13. 教师资格证面试缴费找不到服务器,2016年教师资格证考试报名网上缴费常见问题...
  14. 编程小技巧之 Linux 文本处理命令(二)
  15. 从入门到放弃系列-傅里叶变换,拉普拉斯变换,Z变换
  16. 怎么提高android播放器的网络带宽,使用GSYVideoPlayer增加显示实时网速
  17. linux磁盘分区方法 重新分区方法 新建分区方法
  18. shell 经典, shell 十三问
  19. 临床辅助系统CDSS程序
  20. 神奇的Python-实现曼德布洛特(Mandelbrot)集合(一行代码,matplotlib numpy,tensorflow)分别实现

热门文章

  1. 测试渲染用什么软件,【2人回答】3DMax2014用的是VRay3.0测试和出图渲染参数怎么设置-3D溜溜网...
  2. 用机器学习来提升你的用户增长:第八步,Uplift模型
  3. Learn Git Branching 学习笔记(基础篇)
  4. Assignment写作选题及诀窍怎么分析?
  5. android 真正的全屏沉浸式实现
  6. java halt_Java Runtime halt()方法
  7. 机器学习:数学加强(二)——条件概率、贝叶斯公式、常见分布、协方差、相关系数、切比雪夫不等式、大数定律
  8. 合唱队形(c++DP)
  9. Datawhale组队学习周报(第026周)
  10. js鼠标单击和双击事件