private void LoadAssetsFile(string fullName, EndianBinaryStream stream) { var fileName = Path.GetFileName(fullName); if (!assetsFileListHash.Contains(fileName)) { Logger.Info($"Loading {fileName}"); try { var assetsFile = new SerializedFile(this, fullName, stream); assetsFileList.Add(assetsFile); assetsFileListHash.Add(assetsFile.fileName); foreach (var sharedFile in assetsFile.m_Externals) { var sharedFilePath = Path.Combine(Path.GetDirectoryName(fullName), sharedFile.fileName); var sharedFileName = sharedFile.fileName; if (!importFilesHash.Contains(sharedFileName)) { if (!File.Exists(sharedFilePath)) { var findFiles = Directory.GetFiles(Path.GetDirectoryName(fullName), sharedFileName, SearchOption.AllDirectories); if (findFiles.Length > 0) { sharedFilePath = findFiles[0]; } } if (File.Exists(sharedFilePath)) { importFiles.Add(sharedFilePath); importFilesHash.Add(sharedFileName); } } } } catch { stream.Dispose(); //Logger.Warning($"Unable to load assets file {fileName}"); } } else { stream.Dispose(); } }
private void LoadWebFile(string fullName, EndianBinaryStream stream) { var fileName = Path.GetFileName(fullName); Logger.Info("Loading " + fileName); try { var webFile = new WebFile(stream.InitReader()); foreach (var file in webFile.fileList) { var dummyPath = Path.Combine(Path.GetDirectoryName(fullName), file.fileName); switch (CheckFileType(file.stream, out var fileStream)) { case FileType.AssetsFile: LoadAssetsFromMemory(dummyPath, fileStream, fullName); break; case FileType.BundleFile: LoadBundleFile(dummyPath, fileStream, fullName); break; case FileType.WebFile: LoadWebFile(dummyPath, fileStream); break; case FileType.ResourceFile: resourceFileStreams.Add(file.fileName, fileStream); break; } } } catch { // Logger.Error($"Unable to load web file {fileName}"); } finally { stream.Dispose(); } }
private void LoadBundleFile(string fullName, EndianBinaryStream stream, string parentPath = null) { var fileName = Path.GetFileName(fullName); Logger.Info("Loading " + fileName); try { var bundleFile = new BundleFile(stream, fullName); foreach (var file in bundleFile.fileList) { var subStream = new EndianBinaryStream(file.stream); if (SerializedFile.IsSerializedFile(subStream)) { var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName; LoadAssetsFromMemory(dummyPath, subStream, parentPath ?? fullName, bundleFile.m_Header.unityRevision); } else { resourceFileStreams.Add(file.fileName, subStream); } } } catch { /*var str = $"Unable to load bundle file {fileName}"; * if (parentPath != null) * { * str += $" from {Path.GetFileName(parentPath)}"; * } * Logger.Error(str);*/ } finally { stream.Dispose(); } }