我将从错误本身开始 . 第一个是:表达式断言失败:'m_UncompressedBlocksOffsets [blockInd] <=来自dstPos && m_UncompressedBlocksOffsets [blockInd] uncompressedBlockSize> =来自dstPos'UnityEngine.AssetBundle:LoadFromFile(String)
其次是:无法解压缩AssetBundle的数据:D:/Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle' . UnityEngine.AssetBundle:LoadFromFile(字符串)
我一直只是为我的项目使用资源文件夹,但我当前的项目已经超出了该方法可以容纳的范围 . 所以我试图将资产(在这种情况下是5000左右的精灵)卸载到assetbundle中并在运行时根据需要加载它们 . 我想我可以获得对assetbundle的引用,然后调用assetbundle.LoadAsset(assetname),替换我以前的Resources.Load调用 . 这是我尝试使用assetbundle引用来保持错误:
AssetBundle sprites;
void loadSprites()
{
sprites = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/spritesbundle"); // " + bundleName);
if (!sprites) {
Debug.Log("failed to load assetbundle");
}
}
对于尽职调查,这里也是我用来创建该资产捆绑的代码 . 它只是在我的项目中搜索png并将它们打包到assetsbundle中:
public static void SaveSpecificAssets()
{
AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = "spritesBundle";
string[] files = AssetDatabase.GetAllAssetPaths();
List<string> validFiles = new List<string>();
foreach (string file in files)
{
if (file.EndsWith(".png")) validFiles.Add(file);
}
build.assetNames = validFiles.ToArray();
BuildPipeline.BuildAssetBundles("Assets/AssetBundles", new AssetBundleBuild[1] { build }, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
assetbundle构建没有错误,并出现在它应该的目录中 . 除了尝试加载它时出现的错误之外,我没有任何迹象表明它有问题 . 它生成的清单包含适当的项目,所以我认为它至少按预期工作 . 如果我缺少任何相关信息,请指出它,我会尝试提供它 .
这是我用来代替loadSprites()的测试协程,用于测试它是否有所不同:
IEnumerator testLoader()
{
WWW www = WWW.LoadFromCacheOrDownload("file:///" + Application.dataPath + "/AssetBundles/spritesbundle", 1);
yield return www;
sprites = www.assetBundle;
}
1 回答
试试这个,对于项目文件夹中的所有PNG,选择它们并通过编辑器将它们添加到AssetBundle,然后使用
然后尝试加载包,看看它是否显示错误 .
另外,查看 Manifest 以查看是否列出了您想要的所有文件