这里使用Csv格式进行解析与使用。
一、首先对于Unity的数据读取有这么几种方法:
在Resources目录下Resources.load直接读取,是只读的。也可以通过C# 流的方式进行读取,而且可以写。
在StreamingAssets目录下,一般是对文件进行压缩,因为数据量比较庞大,压缩以减少安装包大小。压缩方式采用UnityAssetBoudle的模式进行打包。
二 对数据打包
Unity资源 什么是Asset : Mesh ,material ,texture,Audio ,txt等
Assets、Resources 、StreamingAssets、AssetBundle 。
Assets文件夹:只有被引用的资源会被打包。 适合存放静态资源,不能动态加载。
Resources :支持动态加载、Resources.Assets文件2G限制,随安装包完全下载、无法动态更新。
StreamingAssets:不同平台放置位置不同。保持文件原始格式(比如存放原始jpg文件,而不导入成内部格式),随安装包完全下载集合,压缩,动态加载,动态更新。
4.x的做法:
依赖关系导致资源重复。 先将重复使用的资源打包成一个ab ,然后在打包别的资源。
打包策略 :尽可能的减少冗余资源 ,减少AppSize,减少网络下载流量
分类打包
按类型,或者用途打包
AssetBundle 代销尽量不超过1M ,减少IO压力。
如何处理复杂依赖关系: 使用数学方法分析,有向图。 入度 ,出度。 一个资源是有向图的一个节点。有一个资源依赖与它就有一个指针指向它,这叫“入度”,当这个资源依赖于另一个资源这叫“出度”。
获取依赖关系:
AssetDataBase.GetDependencies(string)
首先以每一个资源为一个节点,以最低粒度构造有向图
资源入度大于等于2的情况一般是资源重复
迭代处理
先构建有向图,得到依赖关系以图的形式构建,找到入度为o的源点,入度节点为一的可以删掉,找到入度大于等于2的共享资源,从源点开始深度遍历有向图。 保存依赖关系,然后按依赖关系 加载:
,
5.X的 资源打包
手动配置Asset和 AssetBundle的映射关系
配置好后 使用 BuildAssetBundles(string outputPath) CollectDependencies总是开启。 如果存在共享资源仍可能存在资源重复。
使用脚本进行:
直接收集哪些入度为0,哪些入度为1,哪些入度为2
加载卸载 ,manifest 文件依赖关系在这里面 ,全局和每个manifest文件
①打包编码,他打包的原理和Rar zip压缩一样,底层用的是zip的方式。对于加密可以把打包出来的文件二进制化,然后对二进制的bit进行加密,然后解密。5.0后也有加密方式,也可以自行加密。
unity 资源管理小结:AssetDatabase 对资源的操作基本都是通过这个类来实现。
将所有csv文件转化为byte文件,创建一个asset,把打包出来的文件做成ScriptObject,更容易序列化和反序列化。
使用ScriptObject序列化。
② 打包的依赖性。
打包处理: 建立Assets到AssetBundle的映射 :
脚本方式: Assetimporter.assetBundleName 将映射关系保存在 Asset Database、meta file中
普通的Assets
一个Asset 只能标记到 一个AssetBundle
不能标记script
场景(Scene)
不能Sence和普通的Asset标记在同一个AssetBundle
文件夹
包含他及其所有子文件夹的Assets
使用相对路径
完全从脚本打包 BuildPipeline.BuildAssetBundles(
string outputPath,
AssetBundleBuild[] builds,
BuildAssetBundleOptions options,
BuildTarget targetPlatform);
管理Assets 到 AssetBundle的映射 AssetDataBase
AssetBundle创建选项 这些是始终启用的: CollectDependencies
CompleteAssets
DeterministicAssetBundle
不变的 DisableWriteTypeTree
UncompressedAssetBundle
新的AssetBundle创建选项 ForceRebuildAssetBundle
IgnoreTypeTreeChanges
AppendHashToAssetBundleName(当AssetBundle变化时产生不同的名字,易于检测哪些AssetBundle是需要重新上传到CND)。
查找AssetBundle ,AssetBundle的Search filter
b 可以与其他Search Filter共同使用
t 类型
l 标记
b AssetBundle
AssetBundle 的 hash值 考虑从一下各项产生: Asset files 、Type trees、BuildTarget、BuildOption、Callbacks...