From dc5691aefcd03d27ec5bcbc60d4e92cc01232b81 Mon Sep 17 00:00:00 2001 From: Perfare Date: Tue, 17 Jan 2017 04:12:06 +0800 Subject: [PATCH] - improve export MonoBehaviour - remove some code --- Unity Studio/AssetsFile.cs | 61 ++++++++++-- Unity Studio/ClassIDReference.cs | 1 + Unity Studio/EndianStream.cs | 54 ++--------- Unity Studio/Unity Classes/MonoBehaviour.cs | 102 +++++++++++--------- 4 files changed, 118 insertions(+), 100 deletions(-) diff --git a/Unity Studio/AssetsFile.cs b/Unity Studio/AssetsFile.cs index eff7bdb..5a2becb 100644 --- a/Unity Studio/AssetsFile.cs +++ b/Unity Studio/AssetsFile.cs @@ -289,65 +289,106 @@ namespace Unity_Studio if (baseDefinitions) { #region cmmon string array - string[] baseStrings = new string[1007]; + string[] baseStrings = new string[1016]; baseStrings[0] = "AABB"; baseStrings[5] = "AnimationClip"; baseStrings[19] = "AnimationCurve"; + baseStrings[34] = "AnimationState"; baseStrings[49] = "Array"; baseStrings[55] = "Base"; baseStrings[60] = "BitField"; + baseStrings[69] = "bitset"; baseStrings[76] = "bool"; baseStrings[81] = "char"; baseStrings[86] = "ColorRGBA"; + baseStrings[96] = "Component"; baseStrings[106] = "data"; + baseStrings[111] = "deque"; + baseStrings[117] = "double"; + baseStrings[124] = "dynamic_array"; baseStrings[138] = "FastPropertyName"; baseStrings[155] = "first"; baseStrings[161] = "float"; baseStrings[167] = "Font"; baseStrings[172] = "GameObject"; baseStrings[183] = "Generic Mono"; + baseStrings[196] = "GradientNEW"; baseStrings[208] = "GUID"; + baseStrings[213] = "GUIStyle"; baseStrings[222] = "int"; + baseStrings[226] = "list"; + baseStrings[231] = "long long"; baseStrings[241] = "map"; baseStrings[245] = "Matrix4x4f"; - baseStrings[262] = "NavMeshSettings"; + baseStrings[256] = "MdFour"; baseStrings[263] = "MonoBehaviour"; baseStrings[277] = "MonoScript"; + baseStrings[288] = "m_ByteSize"; baseStrings[299] = "m_Curve"; + baseStrings[307] = "m_EditorClassIdentifier"; + baseStrings[331] = "m_EditorHideFlags"; baseStrings[349] = "m_Enabled"; + baseStrings[359] = "m_ExtensionPtr"; baseStrings[374] = "m_GameObject"; + baseStrings[387] = "m_Index"; + baseStrings[395] = "m_IsArray"; + baseStrings[405] = "m_IsStatic"; + baseStrings[416] = "m_MetaFlag"; baseStrings[427] = "m_Name"; + baseStrings[434] = "m_ObjectHideFlags"; + baseStrings[452] = "m_PrefabInternal"; + baseStrings[469] = "m_PrefabParentObject"; baseStrings[490] = "m_Script"; + baseStrings[499] = "m_StaticEditorFlags"; baseStrings[519] = "m_Type"; baseStrings[526] = "m_Version"; + baseStrings[536] = "Object"; baseStrings[543] = "pair"; baseStrings[548] = "PPtr"; baseStrings[564] = "PPtr"; baseStrings[581] = "PPtr"; + baseStrings[596] = "PPtr"; baseStrings[616] = "PPtr"; baseStrings[633] = "PPtr"; + baseStrings[646] = "PPtr"; + baseStrings[659] = "PPtr"; + baseStrings[672] = "PPtr"; baseStrings[688] = "PPtr"; baseStrings[702] = "PPtr"; baseStrings[718] = "PPtr"; + baseStrings[734] = "Prefab"; baseStrings[741] = "Quaternionf"; baseStrings[753] = "Rectf"; + baseStrings[759] = "RectInt"; + baseStrings[767] = "RectOffset"; baseStrings[778] = "second"; + baseStrings[785] = "set"; + baseStrings[789] = "short"; baseStrings[795] = "size"; baseStrings[800] = "SInt16"; - baseStrings[814] = "int64"; + baseStrings[807] = "SInt32"; + baseStrings[814] = "SInt64"; + baseStrings[821] = "SInt8"; + baseStrings[827] = "staticvector"; baseStrings[840] = "string"; baseStrings[847] = "TextAsset"; + baseStrings[857] = "TextMesh"; + baseStrings[866] = "Texture"; baseStrings[874] = "Texture2D"; baseStrings[884] = "Transform"; baseStrings[894] = "TypelessData"; baseStrings[907] = "UInt16"; + baseStrings[914] = "UInt32"; baseStrings[921] = "UInt64"; baseStrings[928] = "UInt8"; - baseStrings[934] = "UInt"; + baseStrings[934] = "unsigned int"; + baseStrings[947] = "unsigned long long"; + baseStrings[966] = "unsigned short"; baseStrings[981] = "vector"; baseStrings[988] = "Vector2f"; baseStrings[997] = "Vector3f"; baseStrings[1006] = "Vector4f"; + baseStrings[1015] = "m_ScriptingClassIdentifier"; #endregion int varCount = a_Stream.ReadInt32(); @@ -356,8 +397,8 @@ namespace Unity_Studio a_Stream.Position += varCount * 24; string varStrings = Encoding.UTF8.GetString(a_Stream.ReadBytes(stringSize)); string className = ""; - StringBuilder classVarStr = new StringBuilder(); - + var classVarStr = new StringBuilder(); + var classVarStr2 = new StringBuilder();//用来export //build Class Structures a_Stream.Position -= varCount * 24 + stringSize; for (int i = 0; i < varCount; i++) @@ -385,14 +426,18 @@ namespace Unity_Studio int num1 = a_Stream.ReadInt32(); if (index == 0) { className = varTypeStr + " " + varNameStr; } - else { classVarStr.AppendFormat("{0}{1} {2} {3}\r\n", (new string('\t', level - 1)), varTypeStr, varNameStr, size); } + else + { + classVarStr.AppendFormat("{0}{1} {2} {3}\r\n", (new string('\t', level - 1)), varTypeStr, varNameStr, size); + classVarStr2.AppendFormat("{0}\t{1}\t{2}\r\n", level - 1, varTypeStr, varNameStr); + } //for (int t = 0; t < level; t++) { Debug.Write("\t"); } //Debug.WriteLine(varTypeStr + " " + varNameStr + " " + size); } a_Stream.Position += stringSize; - var aClass = new ClassStrStruct() { ID = classID, Text = className, members = classVarStr.ToString() }; + var aClass = new ClassStrStruct() { ID = classID, Text = className, members = classVarStr.ToString(), members2 = classVarStr2.ToString() }; aClass.SubItems.Add(classID.ToString()); ClassStructures.Add(classID, aClass); } diff --git a/Unity Studio/ClassIDReference.cs b/Unity Studio/ClassIDReference.cs index 77cb25d..c04cf38 100644 --- a/Unity Studio/ClassIDReference.cs +++ b/Unity Studio/ClassIDReference.cs @@ -10,6 +10,7 @@ namespace Unity_Studio { public int ID; public string members; + public string members2; } public class ClassIDReference diff --git a/Unity Studio/EndianStream.cs b/Unity Studio/EndianStream.cs index 1799d88..43ce261 100644 --- a/Unity Studio/EndianStream.cs +++ b/Unity Studio/EndianStream.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Text; using System.IO; @@ -21,41 +20,9 @@ namespace Unity_Studio public EndianStream(Stream stream, EndianType endian) : base(stream) { } - ~EndianStream() - { - Dispose(); - } - public long Position { get { return base.BaseStream.Position; } set { base.BaseStream.Position = value; } } - public new void Dispose() - { - base.Dispose(); - } - - public override bool ReadBoolean() - { - return base.ReadBoolean(); - } - - public override byte ReadByte() - { - try - { - return base.ReadByte(); - } - catch - { - return 0; - } - } - - public override char ReadChar() - { - return base.ReadChar(); - } - - public override Int16 ReadInt16() + public override short ReadInt16() { if (endian == EndianType.BigEndian) { @@ -77,7 +44,7 @@ namespace Unity_Studio else return base.ReadInt32(); } - public override Int64 ReadInt64() + public override long ReadInt64() { if (endian == EndianType.BigEndian) { @@ -88,7 +55,7 @@ namespace Unity_Studio else return base.ReadInt64(); } - public override UInt16 ReadUInt16() + public override ushort ReadUInt16() { if (endian == EndianType.BigEndian) { @@ -99,7 +66,7 @@ namespace Unity_Studio else return base.ReadUInt16(); } - public override UInt32 ReadUInt32() + public override uint ReadUInt32() { if (endian == EndianType.BigEndian) { @@ -110,7 +77,7 @@ namespace Unity_Studio else return base.ReadUInt32(); } - public override UInt64 ReadUInt64() + public override ulong ReadUInt64() { if (endian == EndianType.BigEndian) { @@ -121,7 +88,7 @@ namespace Unity_Studio else return base.ReadUInt64(); } - public override Single ReadSingle() + public override float ReadSingle() { if (endian == EndianType.BigEndian) { @@ -132,7 +99,7 @@ namespace Unity_Studio else return base.ReadSingle(); } - public override Double ReadDouble() + public override double ReadDouble() { if (endian == EndianType.BigEndian) { @@ -143,14 +110,9 @@ namespace Unity_Studio else return base.ReadDouble(); } - public override string ReadString() - { - return base.ReadString(); - } - public string ReadASCII(int length) { - return ASCIIEncoding.ASCII.GetString(base.ReadBytes(length)); + return Encoding.ASCII.GetString(base.ReadBytes(length)); } public void AlignStream(int alignment) diff --git a/Unity Studio/Unity Classes/MonoBehaviour.cs b/Unity Studio/Unity Classes/MonoBehaviour.cs index 188e246..b95ffee 100644 --- a/Unity Studio/Unity Classes/MonoBehaviour.cs +++ b/Unity Studio/Unity Classes/MonoBehaviour.cs @@ -27,7 +27,7 @@ namespace Unity_Studio ClassStrStruct classStructure; if (sourceFile.ClassStructures.TryGetValue(preloadData.Type1, out classStructure)) { - var member = classStructure.members; + var member = classStructure.members2; var strs = member.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); var sb = new StringBuilder(); Read(sb, strs, a_Stream); @@ -64,72 +64,83 @@ namespace Unity_Studio { for (int i = 0; i < strs.Length; i++) { - var strs2 = strs[i].Split(' '); - var str = strs2[0].Split('\t'); - var level = str.Length - 1; - var varTypeStr = str.Last(); - var varNameStr = strs2[1]; - if (varTypeStr == "int") + var strs2 = strs[i].Split('\t'); + var level = int.Parse(strs2[0]); + var varTypeStr = strs2[1]; + var varNameStr = strs2[2]; + if (varTypeStr == "SInt8")//sbyte { - var value = a_Stream.ReadInt32(); + 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 == "UInt") - { - 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 == "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") - { - 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 == "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 == "SInt16") - { - 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 == "UInt8") + 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 == "float") + 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 == "bool") + 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") + 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") + else if (varTypeStr == "Array")//Array { sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); var size = a_Stream.ReadInt32(); @@ -154,9 +165,8 @@ namespace Unity_Studio List strs3 = new List(); for (int i = index + 2; i < strs.Length; i++)//skip int size { - var strs2 = strs[i].Split(' '); - var str = strs2[0].Split('\t'); - var level2 = str.Length - 1; + var strs2 = strs[i].Split('\t'); + var level2 = int.Parse(strs2[0]); if (level2 <= level) { return strs3.ToArray();