目录
资源被重复载入
载入了相同的资产文件
资产中包含了名称相同的*.unity文件
载入动态场景资源包内部的资源
载入一个格式错误的资源包
载入一个不是资源包的文件
读取一个不存在的文件
资源被重复载入
The AssetBundle 'xxxxx.bytes' can't be loaded because another AssetBundle with the same files is already loaded.
载入了相同的资产文件
- 事发现场
1 2 3 4 5 6 | string file1 = path + "common_texture.bytes"; string file2 = path + "common_texture - 副本.bytes"; var request = AssetBundle.LoadFromFileAsync(file1); var assetBundle = AssetBundle.LoadFromFile(file2); yield return request; Debug.Log("加载完毕."); |
先来看一段代码,代码内容大致是,先异步载入一个AB文件,再同步载入一个相同的AB文件,结果file1加载失败了。
会抛出错误:The AssetBundle 'file1' can't be loaded because another AssetBundle with the same files is already loaded.
在系统中,这是两个不同实例的文件,但是file2来自于file1的拷贝,内容是完全相同的。
- 重点
- 保证在同一时间内只有一个AssetBundle被载入。
资产中包含了名称相同的*.unity文件
- 事发现场
1 2 3 4 5 6 7 | //> map1.unity string file1 = path + "module1_maps.bytes"; string file2 = path + "module2_maps.bytes"; var request = AssetBundle.LoadFromFileAsync(file1); var assetBundle = AssetBundle.LoadFromFile(file2); yield return request; Debug.Log("加载完毕."); |
这段代码讲述的是,先后使用异步和同步加载file1和file2,file1和file2是两个不同的AB文件,但是他们有且只有包含了1个名叫map1.unity的资源。file1包含的map1.unity与file2包含的map1.unity场景树的结构不一样。结果file1加载失败了~
会抛出错误:The AssetBundle 'file1' can't be loaded because another AssetBundle with the same files is already loaded.
起因是:两个文件包含名称相同的*.unity资产
- 重点
- 确保AB文件内部的*.unity文件名称不相同
载入动态场景资源包内部的资源
InvalidOperationException: This method cannot be used on a streamed scene AssetBundle.
- 事发现场
1 2 3 4 5 | string file1 = path + "module1_maps.bytes"; //> 加载包含 map1.unity 的AB文件 var assetBundle = AssetBundle.LoadFromFile(file1); //> 加载module1_maps.bytes中的BG 1纹理 var asset = assetBundle.LoadAsset<Texture2D>("BG 1"); |
代码讲的是,加载了一个包含*.unity的资源包,然后加载资源包中的BG 1纹理,这个BG 1纹理是存在的。结果纹理加载失败了~
会抛出异常:InvalidOperationException: This method cannot be used on a streamed scene AssetBundle.表示LoadXX方法不能应用在动态场景资源包上。
- 起因
任何一个包含*.unity的资源包都属于动态场景资源包,对应assetBundle.isStreamedSceneAssetBundle = true,动态场景资源包是不允许手动去访问其内部的资源的。
- 重点
- 如果你的资源需要通过代码访问,那么在打包时不要与*.unity文件捆绑为一个文件。
载入一个格式错误的资源包
Failed to decompress data for the AssetBundle 'xxxxxx.bytes'.
- 事发现场
1 2 | string file1 = path + "common_sprite - 副本.bytes"; var assetBundle = AssetBundle.LoadFromFile(file1); |
这一段同步载入的代码,但是被加载文件已经被我修改过了,我仅仅往数据中间插入了一个空格。结果加载失败了~
会抛出错误:Failed to decompress data for the AssetBundle 'common_sprite - 副本.bytes'. 表示这个文件的数据解析失败了。
- 重点
- ???????在文件的末尾插入数据,是不会破坏文件的结构的,被修改文件依然能够正常载入。
载入一个不是资源包的文件
Unable to read header from archive file: D:/xxx/xxx/xxx/xxx.bytes
- 事发现场???????
我尝试这载入了一个并不是资源包的文件,会抛出错误: Unable to read header from archive file:xxx.bytes.表示从文件中读取头部信息失败了。
读取一个不存在的文件
Unable to open archive file: D:/xxx/xxx/xxx/xxx.bytes
- 事发现场???????
如果读取一个并不存在的文件是,就会抛出这个错误。
持续更新......