エラー自体から始めます。1 つ目: 式でアサーションが失敗しました: '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 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);
}
アセットバンドルはエラーなしでビルドされ、あるべきディレクトリに表示されます。ロードしようとしたときに発生するエラー以外に、障害があることを示す兆候はありません。生成されるマニフェストには適切な項目が含まれているため、少なくとも意図したとおりに機能していると思います。関連する情報が不足している場合は、指摘してください。提供するように努めます。
これは、違いが生じるかどうかをテストするために、loadSprites() の代わりに使用したテスト コルーチンです。
IEnumerator testLoader()
{
WWW www = WWW.LoadFromCacheOrDownload("file:///" + Application.dataPath + "/AssetBundles/spritesbundle", 1);
yield return www;
sprites = www.assetBundle;
}