diff --git a/AssetStudio/AssetsManager.cs b/AssetStudio/AssetsManager.cs index dac1d86..ea7030c 100644 --- a/AssetStudio/AssetsManager.cs +++ b/AssetStudio/AssetsManager.cs @@ -244,7 +244,6 @@ namespace AssetStudio Progress.Reset(); foreach (var assetsFile in assetsFileList) { - assetsFile.Objects = new Dictionary(assetsFile.m_Objects.Count); foreach (var objectInfo in assetsFile.m_Objects) { var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo); @@ -338,7 +337,7 @@ namespace AssetStudio obj = new Object(objectReader); break; } - assetsFile.Objects.Add(objectInfo.m_PathID, obj); + assetsFile.AddObject(obj); } catch (Exception e) { @@ -362,7 +361,7 @@ namespace AssetStudio foreach (var assetsFile in assetsFileList) { - foreach (var obj in assetsFile.Objects.Values) + foreach (var obj in assetsFile.Objects) { if (obj is GameObject m_GameObject) { diff --git a/AssetStudio/Classes/PPtr.cs b/AssetStudio/Classes/PPtr.cs index be234a5..561090a 100644 --- a/AssetStudio/Classes/PPtr.cs +++ b/AssetStudio/Classes/PPtr.cs @@ -57,7 +57,7 @@ namespace AssetStudio { if (TryGetAssetsFile(out var sourceFile)) { - if (sourceFile.Objects.TryGetValue(m_PathID, out var obj)) + if (sourceFile.ObjectsDic.TryGetValue(m_PathID, out var obj)) { if (obj is T variable) { @@ -75,7 +75,7 @@ namespace AssetStudio { if (TryGetAssetsFile(out var sourceFile)) { - if (sourceFile.Objects.TryGetValue(m_PathID, out var obj)) + if (sourceFile.ObjectsDic.TryGetValue(m_PathID, out var obj)) { if (obj is T2 variable) { diff --git a/AssetStudio/SerializedFile.cs b/AssetStudio/SerializedFile.cs index 64ba57c..0890e55 100644 --- a/AssetStudio/SerializedFile.cs +++ b/AssetStudio/SerializedFile.cs @@ -15,7 +15,8 @@ namespace AssetStudio public string fileName; public int[] version = { 0, 0, 0, 0 }; public BuildType buildType; - public Dictionary Objects; + public List Objects; + public Dictionary ObjectsDic; public SerializedFileHeader header; private EndianType m_FileEndianess; @@ -100,6 +101,8 @@ namespace AssetStudio //ReadObjects int objectCount = reader.ReadInt32(); m_Objects = new List(objectCount); + Objects = new List(objectCount); + ObjectsDic = new Dictionary(objectCount); for (int i = 0; i < objectCount; i++) { var objectInfo = new ObjectInfo(); @@ -331,6 +334,12 @@ namespace AssetStudio } } + public void AddObject(Object obj) + { + Objects.Add(obj); + ObjectsDic.Add(obj.m_PathID, obj); + } + public static bool IsSerializedFile(EndianBinaryReader reader) { var fileSize = reader.BaseStream.Length; diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index e1efc46..bec2521 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -110,7 +110,7 @@ namespace AssetStudioGUI { var tempExportableAssets = new List(); Dictionary containers = null; - foreach (var asset in assetsFile.Objects.Values) + foreach (var asset in assetsFile.Objects) { var assetItem = new AssetItem(asset); objectAssetItemDic.Add(asset, assetItem); @@ -230,7 +230,7 @@ namespace AssetStudioGUI { var fileNode = new GameObjectTreeNode(assetsFile.fileName); //RootNode - foreach (var obj in assetsFile.Objects.Values) + foreach (var obj in assetsFile.Objects) { if (obj is GameObject m_GameObject) {