统一加载资产包时出错
errors loading assetbundle in unity
我将从错误本身开始。第一个是:表达式断言失败:'m_UncompressedBlocksOffsets[blockInd] <= from + dstPos && m_UncompressedBlocksOffsets[blockInd] + uncompressedBlockSize >= from + dstPos' UnityEngine.AssetBundle:LoadFromFile(String)
后跟:未能解压缩 AssetBundle 'D:/Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle' 的数据。 UnityEngine.AssetBundle:LoadFromFile(字符串)
我一直只为我的项目使用资源文件夹,但我当前的项目已经超出了该方法所能容纳的范围。所以我试图将资产(在本例中为 5000 个左右的精灵)卸载到一个资产包中,并在运行时根据需要加载它们。我想我可以只获取对 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 并将它们打包到资产包中:
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 构建没有错误,并出现在它应该在的目录中。除了我在尝试加载它时遇到的错误外,我没有迹象表明它有问题。它生成的清单包含适当的项目,因此我认为它在 least.If 按预期工作。我缺少任何相关信息,请指出,我会尽力提供。
这是我用来代替 loadSprites() 的测试协程,用于测试它是否有所作为:
IEnumerator testLoader()
{
WWW www = WWW.LoadFromCacheOrDownload("file:///" + Application.dataPath + "/AssetBundles/spritesbundle", 1);
yield return www;
sprites = www.assetBundle;
}
试试这个,对于项目文件夹中的所有 PNG,select 它们全部并通过编辑器将它们添加到 AssetBundle,然后使用
构建
BuildPipeline.BuildAssetBundles("Assets/AssetBundles",BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
然后尝试加载包并查看是否显示错误。
此外,查看 Manifest 以查看是否列出了您想要的所有文件
我将从错误本身开始。第一个是:表达式断言失败:'m_UncompressedBlocksOffsets[blockInd] <= from + dstPos && m_UncompressedBlocksOffsets[blockInd] + uncompressedBlockSize >= from + dstPos' UnityEngine.AssetBundle:LoadFromFile(String)
后跟:未能解压缩 AssetBundle 'D:/Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle' 的数据。 UnityEngine.AssetBundle:LoadFromFile(字符串)
我一直只为我的项目使用资源文件夹,但我当前的项目已经超出了该方法所能容纳的范围。所以我试图将资产(在本例中为 5000 个左右的精灵)卸载到一个资产包中,并在运行时根据需要加载它们。我想我可以只获取对 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 并将它们打包到资产包中:
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 构建没有错误,并出现在它应该在的目录中。除了我在尝试加载它时遇到的错误外,我没有迹象表明它有问题。它生成的清单包含适当的项目,因此我认为它在 least.If 按预期工作。我缺少任何相关信息,请指出,我会尽力提供。
这是我用来代替 loadSprites() 的测试协程,用于测试它是否有所作为:
IEnumerator testLoader()
{
WWW www = WWW.LoadFromCacheOrDownload("file:///" + Application.dataPath + "/AssetBundles/spritesbundle", 1);
yield return www;
sprites = www.assetBundle;
}
试试这个,对于项目文件夹中的所有 PNG,select 它们全部并通过编辑器将它们添加到 AssetBundle,然后使用
构建BuildPipeline.BuildAssetBundles("Assets/AssetBundles",BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
然后尝试加载包并查看是否显示错误。
此外,查看 Manifest 以查看是否列出了您想要的所有文件