diff --git a/Unity Studio/Unity Classes/GameObject.cs b/Unity Studio/Unity Classes/GameObject.cs index 1c2d311..335da91 100644 --- a/Unity Studio/Unity Classes/GameObject.cs +++ b/Unity Studio/Unity Classes/GameObject.cs @@ -8,8 +8,9 @@ namespace Unity_Studio { public class GameObject : TreeNode { + public List m_Components = new List(); public PPtr m_Transform; - public PPtr m_Renderer; + public PPtr m_MeshRenderer; public PPtr m_MeshFilter; public PPtr m_SkinnedMeshRenderer; public int m_Layer; @@ -39,25 +40,14 @@ namespace Unity_Studio int m_Component_size = a_Stream.ReadInt32(); for (int j = 0; j < m_Component_size; j++) { - int m_Component_type = a_Stream.ReadInt32(); - - switch (m_Component_type) + if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up { - case 4: - m_Transform = sourceFile.ReadPPtr(); - break; - case 23: - m_Renderer = sourceFile.ReadPPtr(); - break; - case 33: - m_MeshFilter = sourceFile.ReadPPtr(); - break; - case 137: - m_SkinnedMeshRenderer = sourceFile.ReadPPtr(); - break; - default: - PPtr m_Component = sourceFile.ReadPPtr(); - break; + m_Components.Add(sourceFile.ReadPPtr()); + } + else + { + int first = a_Stream.ReadInt32(); + m_Components.Add(sourceFile.ReadPPtr()); } } diff --git a/Unity Studio/Unity Classes/Renderer.cs b/Unity Studio/Unity Classes/MeshRenderer.cs similarity index 96% rename from Unity Studio/Unity Classes/Renderer.cs rename to Unity Studio/Unity Classes/MeshRenderer.cs index 2c38f78..7535ca9 100644 --- a/Unity Studio/Unity Classes/Renderer.cs +++ b/Unity Studio/Unity Classes/MeshRenderer.cs @@ -5,7 +5,7 @@ using System.Text; namespace Unity_Studio { - class Renderer + class MeshRenderer { public PPtr m_GameObject; public bool m_Enabled; @@ -15,7 +15,7 @@ namespace Unity_Studio public ushort m_LightmapIndexDynamic; public PPtr[] m_Materials; - public Renderer(AssetPreloadData preloadData) + public MeshRenderer(AssetPreloadData preloadData) { var sourceFile = preloadData.sourceFile; var a_Stream = preloadData.sourceFile.a_Stream; diff --git a/Unity Studio/Unity Studio.csproj b/Unity Studio/Unity Studio.csproj index 3e28cb1..35d43ce 100644 --- a/Unity Studio/Unity Studio.csproj +++ b/Unity Studio/Unity Studio.csproj @@ -174,7 +174,7 @@ - + diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index 8deef4c..8c57b6f 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -809,6 +809,8 @@ namespace Unity_Studio foreach (var m_GameObject in assetsFile.GameObjectList.Values) { + assetsfileList.ParseGameObject(m_GameObject); + var parentNode = fileNode; Transform m_Transform; @@ -2017,9 +2019,9 @@ namespace Unity_Studio #region get Renderer AssetPreloadData RendererPD; - if (assetsfileList.TryGetPD(m_GameObject.m_Renderer, out RendererPD)) + if (assetsfileList.TryGetPD(m_GameObject.m_MeshRenderer, out RendererPD)) { - Renderer m_Renderer = new Renderer(RendererPD); + MeshRenderer m_Renderer = new MeshRenderer(RendererPD); foreach (var MaterialPPtr in m_Renderer.m_Materials) { diff --git a/Unity Studio/helpers.cs b/Unity Studio/helpers.cs index 328a11b..078a04a 100644 --- a/Unity Studio/helpers.cs +++ b/Unity Studio/helpers.cs @@ -24,13 +24,13 @@ namespace Unity_Studio int FileID = a_Stream.ReadInt32(); if (FileID >= 0 && FileID < sourceFile.sharedAssetsList.Count) { result.m_FileID = sourceFile.sharedAssetsList[FileID].Index; } - + if (sourceFile.fileGen < 14) { result.m_PathID = a_Stream.ReadInt32(); } else { result.m_PathID = a_Stream.ReadInt64(); } return result; } - + public static bool TryGetPD(this List assetsfileList, PPtr m_elm, out AssetPreloadData result) { result = null; @@ -73,6 +73,44 @@ namespace Unity_Studio return false; } + + public static void ParseGameObject(this List assetsfileList, GameObject m_GameObject) + { + foreach (var m_Component in m_GameObject.m_Components) + { + if (m_Component.m_FileID >= 0 && m_Component.m_FileID < assetsfileList.Count) + { + AssetsFile sourceFile = assetsfileList[m_Component.m_FileID]; + AssetPreloadData asset; + if (sourceFile.preloadTable.TryGetValue(m_Component.m_PathID, out asset)) + { + switch (asset.Type2) + { + case 4: //Transform + { + m_GameObject.m_Transform = m_Component; + break; + } + case 23: //MeshRenderer + { + m_GameObject.m_MeshRenderer = m_Component; + break; + } + case 33: //MeshFilter + { + m_GameObject.m_MeshFilter = m_Component; + break; + } + case 137: //SkinnedMeshRenderer + { + m_GameObject.m_SkinnedMeshRenderer = m_Component; + break; + } + } + } + } + } + } } class TexEnv