[Asset Bundle] [Error] 加载过程中的错误集合

目录

资源被重复载入

载入了相同的资产文件

资产中包含了名称相同的*.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

  • 事发现场???????

如果读取一个并不存在的文件是,就会抛出这个错误。


持续更新......