From 16a7107d4e2fa6263ddfbfd634c998ff91b379cd Mon Sep 17 00:00:00 2001 From: VaDiM Date: Wed, 8 Mar 2023 17:49:26 +0300 Subject: [PATCH] [CLI] Partial assets reading --- AssetStudio/AssetsManager.cs | 36 ++++++++++++++++++++++++++++++++++++ AssetStudioCLI/Studio.cs | 1 + 2 files changed, 37 insertions(+) diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index 98f379d..16573ba 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -12,6 +12,7 @@ namespace AssetStudio { public string SpecifyUnityVersion; public List assetsFileList = new List(); + private List filteredAssetTypesList = new List(); internal Dictionary assetsFileIndexCache = new Dictionary(StringComparer.OrdinalIgnoreCase); internal Dictionary resourceFileReaders = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -21,6 +22,37 @@ namespace AssetStudio private HashSet noexistFiles = new HashSet(StringComparer.OrdinalIgnoreCase); private HashSet assetsFileListHash = new HashSet(StringComparer.OrdinalIgnoreCase); + public void SetAssetFilter(ClassIDType classIDType) + { + if (filteredAssetTypesList.Count == 0) + { + filteredAssetTypesList.AddRange(new List + { + ClassIDType.AssetBundle, + ClassIDType.ResourceManager, + }); + } + + if (classIDType == ClassIDType.MonoBehaviour) + { + filteredAssetTypesList.AddRange(new List + { + ClassIDType.MonoScript, + ClassIDType.MonoBehaviour + }); + } + else + { + filteredAssetTypesList.Add(classIDType); + } + } + + public void SetAssetFilter(List classIDTypeList) + { + foreach (ClassIDType classIDType in classIDTypeList) + SetAssetFilter(classIDType); + } + public void LoadFiles(params string[] files) { var path = Path.GetDirectoryName(Path.GetFullPath(files[0])); @@ -404,6 +436,10 @@ namespace AssetStudio var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo); try { + if (filteredAssetTypesList.Count > 0 && !filteredAssetTypesList.Contains(objectReader.type)) + { + continue; + } Object obj; switch (objectReader.type) { diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index 95cab44..6d61777 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -31,6 +31,7 @@ namespace AssetStudioCLI { var isLoaded = false; assetsManager.SpecifyUnityVersion = options.o_unityVersion.Value; + assetsManager.SetAssetFilter(options.o_exportAssetTypes.Value); if (Directory.Exists(options.inputPath)) {