unity 资源加载框架设计
来源:互联网 发布:设计方案优化措施 编辑:程序博客网 时间:2024/06/05 15:32
目的
便于增量更新功能的实现
降低安装包大小,unity不支持过滤掉Resources目录中不用的文件。
用AB包的方式加快资源文件的读取速度
生成asset bundle文件
基本流程如下图所示, 后面会详细说明。
BundleResources目录的资源组织
现在游戏中的资源放在Resources目录中,需要把这些资源按照一定的规则移动到BundleResources目录中。并且这个文件组织规则需要告知策划,美术,以后策划美术就把资源放到对应的目录中。下图是基本的组织方式。
游戏中的UI用到的图片分三个目录组织,如上图所示,Common目录存放战斗和主城共用的资源, Battle存放战斗用到的资源,City存放主城用到的资源。
UI目录存放美术做的UI Prefab,Battle存放战斗用到的UI prefab,City存放主城用到的UI prefab。
LUA文件不放在这里,直接把LUA文件copy到StreamingAssets下面的一个子目录。
为文件或者文件夹指定asset Label
指定asset Label是为了后面打AB包用,一个原则是如果很多相同类型的文件需要几乎同时读入内存,比如Atalas图集,一个场景用到的所有音效等。
上图中目录atalas下每个子目录一个AB包。
上图中目录Audio下每个子目录一个AB包。
其余每个文件一个AB包。
打包
调用API BuildPipeline.BuildAssetBundles 打包,这个函数有三个参数
outputPath
Output path for the AssetBundles.
assetBundleOptions
AssetBundle building options.
targetPlatform
Chosen target build platform.
outputPath 为StreamingAssets/BundleResources
assetBundleOptions为BuildAssetBundleOptions.None, 默认用LZMA格式压缩,好处是包会小一点,坏处是打开AB包时需要解压缩。还有两个选项,Chunk Compressed (LZ4)和Uncompressed 这两种方式性能上有优势,但包体会变大。参考这里:https://docs.unity3d.com/Manual/AssetBundleCompression.html
targetPlatform 为打包的目录平台,android, ios or windows.参考这里https://docs.unity3d.com/ScriptReference/BuildTarget.html
生成每个AB包的信息
AB包生成后,我们需要维护每个AB包的信息,所有AB包的信息保存在一个json文件中,用于打开AB包时使用。每一个AB包会生成如下的信息:
bundlePath是在第2步给该文件指定的asset Label,这个路径也是它在StreamingAsset/BundleResources s目录中的路径。
bundleHash 是根据bundlePath生成的一个Hash值。最后一个字段deps里会用到这个值。
Crc 和 hash128是AB包的校验值,用于增量更新时的校验,调用BuildPipeline.GetCRCForAssetBundle和BuildPipeline.GetHashForAssetBundle获得
Deps 是该AB包所依赖的包的bundlePath的hash值。通过调用API AssetBundleManifest.GetDirectDependencies获得。当读取一个AB包时,会把AB包依赖的AB包先读出来。
读取asset bundle文件
所有读取操作都是异步的,调用者需要提供回调函数,读取完成后会调用该函数,参数包含已实例化的对像。
提供3个接口用来读取AB包:
1. 读取一个Scene文件生成的AB包,Scene加载完成调提供的回调函数;
2. 读取一个AB包,该AB包中只包含一个文件,调用者只需要提供文件路径,AB包的包名通过文件路径自动获得。加载完成调提供的回调函数;
3. 读取一个AB包中的一个文件,该AB包中只包含多个文件,加载完成调提供的回调函数;
提供1个接口用来释放对象
针对每个被读取的Gameobject,会生成一个对象池,当调用者不用这个对象时,调用Free函数,该对象会放到对象池中,供下次调用使用。
读取的逻辑如下图所示:
- unity 资源加载框架设计
- unity 资源加载框架设计
- Unity 加载数据库资源
- Unity资源加载
- unity资源加载
- Unity预加载设计
- Unity 资源加载释放相关
- Unity动态加载远程资源
- unity动态加载远程资源
- unity动态加载远程资源
- Unity利用Resources加载资源
- Unity中的资源加载方法
- Unity动态加载远程资源
- Unity资源加载与释放
- Unity 避免重复加载资源
- unity AssetBundle 加载资源 笔记
- Unity中的资源加载方法
- Unity资源加载以及释放
- Centos7 下 Nagios 的安装
- Redis有序集合命令ZREMRANGEBYLEX详解与应用
- JavaEE面试注意事项
- BottomSheetPickers 各种时间日历
- 在配置内核时输入:make menuconfig
- unity 资源加载框架设计
- centos6.5下如何把python2.6.6升级到2.7
- mvc view 获取数据库html标签
- linux 守护进程与用&结尾的后台运行程序有什么区别
- 文章收集
- Rexxar 是一个针对移动端的混合开发框架。
- measure screen dp
- 图解 Git 使用
- /proc/sys/kernel/printk