From bd18bfb8ea0e1639949524454852aab8a8dddc3e Mon Sep 17 00:00:00 2001 From: Perfare Date: Sat, 1 Apr 2017 00:41:18 +0800 Subject: [PATCH] Move code Fixed some bugs --- Unity Studio/Unity Classes/MonoBehaviour.cs | 130 +---------------- .../Unity Studio Classes/AssetPreloadData.cs | 135 ++++++++++++++++++ .../Unity Studio Classes/AssetsFile.cs | 2 +- Unity Studio/UnityStudioForm.cs | 13 +- 4 files changed, 147 insertions(+), 133 deletions(-) diff --git a/Unity Studio/Unity Classes/MonoBehaviour.cs b/Unity Studio/Unity Classes/MonoBehaviour.cs index fdf6c46..38a621c 100644 --- a/Unity Studio/Unity Classes/MonoBehaviour.cs +++ b/Unity Studio/Unity Classes/MonoBehaviour.cs @@ -23,16 +23,7 @@ namespace Unity_Studio if (readSwitch) { preloadData.extension = ".txt"; - a_Stream.Position = preloadData.Offset; - ClassStruct classStructure; - if (sourceFile.ClassStructures.TryGetValue(preloadData.Type1, out classStructure)) - { - var member = classStructure.members; - var sb = new StringBuilder(); - Read(sb, member, a_Stream); - serializedText = sb.ToString(); - } - else + if ((serializedText = preloadData.ViewStruct()) == null) { var str = "PPtr m_GameObject\r\n"; str += "\tint m_FileID = " + m_GameObject.m_FileID + "\r\n"; @@ -58,124 +49,5 @@ namespace Unity_Studio preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() }); } } - - private void Read(StringBuilder sb, List members, EndianStream a_Stream) - { - for (int i = 0; i < members.Count; i++) - { - var member = members[i]; - var level = member.Level; - var varTypeStr = member.Type; - var varNameStr = member.Name; - if (varTypeStr == "SInt8")//sbyte - { - var value = a_Stream.ReadSByte(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "UInt8")//byte - { - var value = a_Stream.ReadByte(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16 - { - var value = a_Stream.ReadInt16(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16 - { - var value = a_Stream.ReadUInt16(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32 - { - var value = a_Stream.ReadInt32(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32 - { - var value = a_Stream.ReadUInt32(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64 - { - var value = a_Stream.ReadInt64(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64 - { - var value = a_Stream.ReadUInt64(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "float")//float - { - var value = a_Stream.ReadSingle(); - sb.AppendFormat("{0}{1} {2} = {3:f}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "double")//double - { - var value = a_Stream.ReadDouble(); - sb.AppendFormat("{0}{1} {2} = {3:f4}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "bool")//bool - { - var value = a_Stream.ReadBoolean(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - a_Stream.AlignStream(4); - } - else if (varTypeStr == "string")//string - { - var value = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); - sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); - i += 3;//skip - } - else if (varTypeStr == "Array")//Array - { - sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); - var size = a_Stream.ReadInt32(); - sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size); - var array = ReadArray(members, level, i); - for (int j = 0; j < size; j++) - { - sb.AppendFormat("{0}[{1}]\r\n", (new string('\t', level + 1)), j); - Read(sb, array, a_Stream); - } - i += array.Count + 1;//skip - } - else - { - sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); - } - } - } - - private List ReadArray(List members, int level, int index) - { - var member2 = new List(); - for (int i = index + 2; i < members.Count; i++)//skip int size - { - var member = members[i]; - var level2 = member.Level; - if (level2 <= level) - { - return member2; - } - else - { - member2.Add(member); - } - } - return member2; - } } } diff --git a/Unity Studio/Unity Studio Classes/AssetPreloadData.cs b/Unity Studio/Unity Studio Classes/AssetPreloadData.cs index 4bd58f1..8d5cf06 100644 --- a/Unity Studio/Unity Studio Classes/AssetPreloadData.cs +++ b/Unity Studio/Unity Studio Classes/AssetPreloadData.cs @@ -20,5 +20,140 @@ namespace Unity_Studio public AssetsFile sourceFile; public string uniqueID; + + public string ViewStruct() + { + var a_Stream = sourceFile.a_Stream; + a_Stream.Position = Offset; + ClassStruct classStructure; + if (sourceFile.ClassStructures.TryGetValue(Type1, out classStructure)) + { + var member = classStructure.members; + var sb = new StringBuilder(); + Read(sb, member, a_Stream); + return sb.ToString(); + } + return null; + } + + //TODO 1,2长度类型对齐问题 + private static void Read(StringBuilder sb, List members, EndianStream a_Stream) + { + for (int i = 0; i < members.Count; i++) + { + var member = members[i]; + var level = member.Level; + var varTypeStr = member.Type; + var varNameStr = member.Name; + if (varTypeStr == "SInt8")//sbyte + { + var value = a_Stream.ReadSByte(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "UInt8")//byte + { + var value = a_Stream.ReadByte(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16 + { + var value = a_Stream.ReadInt16(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16 + { + var value = a_Stream.ReadUInt16(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32 + { + var value = a_Stream.ReadInt32(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32 + { + var value = a_Stream.ReadUInt32(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64 + { + var value = a_Stream.ReadInt64(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64 + { + var value = a_Stream.ReadUInt64(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "float")//float + { + var value = a_Stream.ReadSingle(); + sb.AppendFormat("{0}{1} {2} = {3:f}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "double")//double + { + var value = a_Stream.ReadDouble(); + sb.AppendFormat("{0}{1} {2} = {3:f4}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "bool")//bool + { + var value = a_Stream.ReadBoolean(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + a_Stream.AlignStream(4); + } + else if (varTypeStr == "string")//string + { + var value = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); + sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); + i += 3;//skip + } + else if (varTypeStr == "Array")//Array + { + sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); + var size = a_Stream.ReadInt32(); + sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size); + var array = ReadArray(members, level, i); + for (int j = 0; j < size; j++) + { + sb.AppendFormat("{0}[{1}]\r\n", (new string('\t', level + 1)), j); + Read(sb, array, a_Stream); + } + i += array.Count + 1;//skip + } + else + { + sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); + } + } + } + + private static List ReadArray(List members, int level, int index) + { + var member2 = new List(); + for (int i = index + 2; i < members.Count; i++)//skip int size + { + var member = members[i]; + var level2 = member.Level; + if (level2 <= level) + { + return member2; + } + else + { + member2.Add(member); + } + } + return member2; + } } } diff --git a/Unity Studio/Unity Studio Classes/AssetsFile.cs b/Unity Studio/Unity Studio Classes/AssetsFile.cs index 1e84f75..10400d0 100644 --- a/Unity Studio/Unity Studio Classes/AssetsFile.cs +++ b/Unity Studio/Unity Studio Classes/AssetsFile.cs @@ -448,7 +448,7 @@ namespace Unity_Studio test = a_Stream.ReadUInt16(); string varNameStr; if (test == 0) { varNameStr = varStrings.Substring(varNameIndex, varStrings.IndexOf('\0', varNameIndex) - varNameIndex); } - else { varNameStr = baseStrings.ContainsKey(varTypeIndex) ? baseStrings[varNameIndex] : varNameIndex.ToString(); } + else { varNameStr = baseStrings.ContainsKey(varNameIndex) ? baseStrings[varNameIndex] : varNameIndex.ToString(); } int size = a_Stream.ReadInt32(); int index = a_Stream.ReadInt32(); diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index 81b0877..cda2964 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -1062,7 +1062,14 @@ namespace Unity_Studio default: { - StatusStripUpdate("Only supported export the raw file."); + /*string str; + if ((str = asset.ViewStruct()) != null) + { + textPreviewBox.Text = str; + textPreviewBox.Visible = true; + } + else*/ + StatusStripUpdate("Only supported export the raw file."); break; } } @@ -1568,13 +1575,13 @@ namespace Unity_Studio } break; case 43: //Mesh - Mesh m_Mesh = new Mesh(asset, true); + Mesh m_Mesh = new Mesh(asset, true); if (!ExportFileExists(exportpath + asset.Text + asset.extension)) { ExportMesh(m_Mesh, exportpath + asset.Text); exportedCount++; } - + break; default: if (!ExportFileExists(exportpath + asset.Text + asset.extension))