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

This commit is contained in:
Perfare 2017-09-19 04:34:58 +08:00
parent 2d7fd68ff5
commit 6d019e6e8a
2 changed files with 9 additions and 15 deletions

View File

@ -126,8 +126,6 @@ namespace Unity_Studio
StatusStripUpdate("Decompressing " + Path.GetFileName(bundleFileName) + "..."); StatusStripUpdate("Decompressing " + Path.GetFileName(bundleFileName) + "...");
BundleFile b_File = new BundleFile(bundleFileName); BundleFile b_File = new BundleFile(bundleFileName);
List<AssetsFile> b_assetsfileList = new List<AssetsFile>();
foreach (var memFile in b_File.MemoryAssetsFileList) //filter unity files foreach (var memFile in b_File.MemoryAssetsFileList) //filter unity files
{ {
StatusStripUpdate("Loading " + memFile.fileName); 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.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); assetsFile.buildType = b_File.versionEngine.Split(AssetsFile.buildTypeSplit, StringSplitOptions.RemoveEmptyEntries);
} }
b_assetsfileList.Add(assetsFile); assetsfileList.Add(assetsFile);
} }
assetsfileandstream[assetsFile.fileName] = assetsFile.a_Stream; 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 sharedFile in assetsFile.sharedAssetsList)
foreach (var assetsFile in b_assetsfileList)
{ {
foreach (var sharedFile in assetsFile.sharedAssetsList) sharedFile.Index = assetsfileList.FindIndex(aFile => aFile.fileName.ToUpper() == sharedFile.fileName.ToUpper());
{
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);
}
}
} }
} }
} }

View File

@ -112,6 +112,7 @@ namespace Unity_Studio
LoadBundleFile(filename); LoadBundleFile(filename);
ProgressBarPerformStep(); ProgressBarPerformStep();
} }
LoadAssetsFromBundle();
} }
BuildAssetStrucutres(); BuildAssetStrucutres();
unityFilesHash.Clear(); unityFilesHash.Clear();