unity webrtcvideochat demo下载_Unity游戏开发笔记-资源管理之资源读取方式简单介绍...

8d8fdaa8a3466cbab7fae48fe5d64a64.png

资源管理作为游戏开发中非常重要的一个模块,真的有很多很多需要去了解的东西。最基本的资源读取到资源打包,资源打包策略,资源下载读取等每一个点都有很多值得去仔细推敲的点。

资源读取

Unity的资源读取方式比较简单,大体上可以分为以下四种方式:

1 直接声明Public变量

  • Public声明一个变量,直接把Assets下的资源拖动赋值,然后直接代码实例化。商业项目中不会使用这种方式,初学者做Demo测试的时候可以使用。

2 Resource.Load

  • Resource.load<>()读取,文件存储位置在Assets下面的Resource目录下,可以直接读取实例化。该目录下面的所有文件在打包的时候都会在出包的时候进包。Unity是不推荐我们使用Resource.load方式读取资源的,原因如下:
The Resources folder - Unity​unity3d.com
5da6bd7e6327021a44b9a991a59ba1a2.png

简单的总结下缺点:

  1. 增大了游戏内容管理的负担
  2. 随着资源文件夹的增加,应用程序在启动的时候时间会增加。二千会(个人猜测:在游戏初始化的时候,会对该文件夹下的所有文件文件信息进行统一处理,方便在运行时加载)
  3. 资源优化不方便
  4. 没法儿资源热更

关于Resource文件的序列化

在Unity打包的时候,Resource文件夹下的文件会生成一个依赖文件,存储文件的一些信息。FileGUID和LocalID来代表文件以及文件位置,然后运行的时候会根据以上两个Id生成唯一的InstanceId。


3 AssetBundle读取

  • AssetBundle这是最常用的一种方式,目前商业化开发中基本都会使用这种方式来进行资源管理。

AssetBundle的作用

  1. AssetBundle(简称AB包)是一个资源压缩包,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载
  2. AssetBundle自身保存着互相的依赖关系
  3. 压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输
  4. 把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小

什么是AssetBundle

  1. 它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件)。 serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)。 resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载,可以Editor上读取,方便查看。
  2. 它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。

AssetBundle的使用步骤

  1. 给制定资源添加AssetBundle名字
  2. 打包Ab
  3. 上传Ab到服务器
  4. 加载Ab包和相关资源使用

简单介绍下AssetBundle的打包,给读取做个铺垫

打包路径

一般以Appcation.Datapath(Assets目录)下的StreamingAssets为输出路径。

压缩方式

  • BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长,需要解压全部。
  • BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
  • BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。

注意:使用LZ4压缩,可以获得可以跟不压缩相媲美的加载速度,而且比不压缩文件要小。

f688e588a93324f3d76f6cca1bf85b02.png

基础接口:

785488bc68fda3e7462290272de623a9.png

打包完成之后会在对应的文件夹下面生成相应的Ab文件,这种方法是不推荐使用的,因为这样打包方法会有资源的冗余。我们来做一个很简单的假设:

b945221f33235983cfeacf28bcf53b16.png

我们这里有两个Prefab,分别为Cube和Sphere,给他们分别设置了Ab名分别为cube和sp。

051f9b16e79835016f6367e30d6b7f1e.png

3db4cf38951fb6658b9d4e0d39d4b95f.png

这两个Prefab都引用了同一份材质和贴图。

a2f3d834ebc3fd191c848472b73fa76e.png

打包结果可想而知,两个ab文件大小相同,并且每个包中都有重复的资源。

56ee502f37ce84ff64806c996afe78af.png

商业项目中,资源的重复无疑会给内存和包体还有加载时间带来巨大的问题。这中粗鲁的打包方案明显是不靠谱的。

商业化打包方案:

真正商业化的打包,核心并不是在打包,而是在资源的依赖管理策略。关于打包的策略准备单独开一篇文章。日后附上链接。

ToDo......

重点来了,分析下几种Ab的读取方式


4 AssetDataBase直接读取本地文件

这种方式一般用于编辑器下的本地资源的读取。

持续更新中....

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值