From 6d019e6e8acfd8d56cedc9867ff9c69bf7c2d53f Mon Sep 17 00:00:00 2001 From: Perfare Date: Tue, 19 Sep 2017 04:34:58 +0800 Subject: [PATCH] When open multiple bundle files, first extract all the assets files into memory,and then parse the file to make sure the sharedfile index is correct --- .../Unity Studio Classes/UnityStudio.cs | 23 +++++++------------ Unity Studio/UnityStudioForm.cs | 1 + 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Unity Studio/Unity Studio Classes/UnityStudio.cs b/Unity Studio/Unity Studio Classes/UnityStudio.cs index d9abac4..ed95a95 100644 --- a/Unity Studio/Unity Studio Classes/UnityStudio.cs +++ b/Unity Studio/Unity Studio Classes/UnityStudio.cs @@ -126,8 +126,6 @@ namespace Unity_Studio StatusStripUpdate("Decompressing " + Path.GetFileName(bundleFileName) + "..."); BundleFile b_File = new BundleFile(bundleFileName); - List b_assetsfileList = new List(); - foreach (var memFile in b_File.MemoryAssetsFileList) //filter unity files { StatusStripUpdate("Loading " + memFile.fileName); @@ -144,24 +142,19 @@ namespace Unity_Studio assetsFile.version = Array.ConvertAll((from Match m in Regex.Matches(assetsFile.m_Version, @"[0-9]") select m.Value).ToArray(), int.Parse); assetsFile.buildType = b_File.versionEngine.Split(AssetsFile.buildTypeSplit, StringSplitOptions.RemoveEmptyEntries); } - b_assetsfileList.Add(assetsFile); + assetsfileList.Add(assetsFile); } assetsfileandstream[assetsFile.fileName] = assetsFile.a_Stream; } - if (b_assetsfileList.Count > 0) + } + + public static void LoadAssetsFromBundle() + { + foreach (var assetsFile in assetsfileList) { - assetsfileList.AddRange(b_assetsfileList); - foreach (var assetsFile in b_assetsfileList) + foreach (var sharedFile in assetsFile.sharedAssetsList) { - foreach (var sharedFile in assetsFile.sharedAssetsList) - { - sharedFile.fileName = Path.GetDirectoryName(bundleFileName) + "\\" + sharedFile.fileName; - var loadedSharedFile = b_assetsfileList.Find(aFile => aFile.filePath == sharedFile.fileName); - if (loadedSharedFile != null) - { - sharedFile.Index = assetsfileList.IndexOf(loadedSharedFile); - } - } + sharedFile.Index = assetsfileList.FindIndex(aFile => aFile.fileName.ToUpper() == sharedFile.fileName.ToUpper()); } } } diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index e667a03..1ef18f1 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -112,6 +112,7 @@ namespace Unity_Studio LoadBundleFile(filename); ProgressBarPerformStep(); } + LoadAssetsFromBundle(); } BuildAssetStrucutres(); unityFilesHash.Clear();