- improve export MonoBehaviour

- remove some code
This commit is contained in:
Perfare 2017-01-17 04:12:06 +08:00
parent 4899d6d7d0
commit dc5691aefc
4 changed files with 118 additions and 100 deletions

View File

@ -289,65 +289,106 @@ namespace Unity_Studio
if (baseDefinitions) if (baseDefinitions)
{ {
#region cmmon string array #region cmmon string array
string[] baseStrings = new string[1007]; string[] baseStrings = new string[1016];
baseStrings[0] = "AABB"; baseStrings[0] = "AABB";
baseStrings[5] = "AnimationClip"; baseStrings[5] = "AnimationClip";
baseStrings[19] = "AnimationCurve"; baseStrings[19] = "AnimationCurve";
baseStrings[34] = "AnimationState";
baseStrings[49] = "Array"; baseStrings[49] = "Array";
baseStrings[55] = "Base"; baseStrings[55] = "Base";
baseStrings[60] = "BitField"; baseStrings[60] = "BitField";
baseStrings[69] = "bitset";
baseStrings[76] = "bool"; baseStrings[76] = "bool";
baseStrings[81] = "char"; baseStrings[81] = "char";
baseStrings[86] = "ColorRGBA"; baseStrings[86] = "ColorRGBA";
baseStrings[96] = "Component";
baseStrings[106] = "data"; baseStrings[106] = "data";
baseStrings[111] = "deque";
baseStrings[117] = "double";
baseStrings[124] = "dynamic_array";
baseStrings[138] = "FastPropertyName"; baseStrings[138] = "FastPropertyName";
baseStrings[155] = "first"; baseStrings[155] = "first";
baseStrings[161] = "float"; baseStrings[161] = "float";
baseStrings[167] = "Font"; baseStrings[167] = "Font";
baseStrings[172] = "GameObject"; baseStrings[172] = "GameObject";
baseStrings[183] = "Generic Mono"; baseStrings[183] = "Generic Mono";
baseStrings[196] = "GradientNEW";
baseStrings[208] = "GUID"; baseStrings[208] = "GUID";
baseStrings[213] = "GUIStyle";
baseStrings[222] = "int"; baseStrings[222] = "int";
baseStrings[226] = "list";
baseStrings[231] = "long long";
baseStrings[241] = "map"; baseStrings[241] = "map";
baseStrings[245] = "Matrix4x4f"; baseStrings[245] = "Matrix4x4f";
baseStrings[262] = "NavMeshSettings"; baseStrings[256] = "MdFour";
baseStrings[263] = "MonoBehaviour"; baseStrings[263] = "MonoBehaviour";
baseStrings[277] = "MonoScript"; baseStrings[277] = "MonoScript";
baseStrings[288] = "m_ByteSize";
baseStrings[299] = "m_Curve"; baseStrings[299] = "m_Curve";
baseStrings[307] = "m_EditorClassIdentifier";
baseStrings[331] = "m_EditorHideFlags";
baseStrings[349] = "m_Enabled"; baseStrings[349] = "m_Enabled";
baseStrings[359] = "m_ExtensionPtr";
baseStrings[374] = "m_GameObject"; 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[427] = "m_Name";
baseStrings[434] = "m_ObjectHideFlags";
baseStrings[452] = "m_PrefabInternal";
baseStrings[469] = "m_PrefabParentObject";
baseStrings[490] = "m_Script"; baseStrings[490] = "m_Script";
baseStrings[499] = "m_StaticEditorFlags";
baseStrings[519] = "m_Type"; baseStrings[519] = "m_Type";
baseStrings[526] = "m_Version"; baseStrings[526] = "m_Version";
baseStrings[536] = "Object";
baseStrings[543] = "pair"; baseStrings[543] = "pair";
baseStrings[548] = "PPtr<Component>"; baseStrings[548] = "PPtr<Component>";
baseStrings[564] = "PPtr<GameObject>"; baseStrings[564] = "PPtr<GameObject>";
baseStrings[581] = "PPtr<Material>"; baseStrings[581] = "PPtr<Material>";
baseStrings[596] = "PPtr<MonoBehaviour>";
baseStrings[616] = "PPtr<MonoScript>"; baseStrings[616] = "PPtr<MonoScript>";
baseStrings[633] = "PPtr<Object>"; baseStrings[633] = "PPtr<Object>";
baseStrings[646] = "PPtr<Prefab>";
baseStrings[659] = "PPtr<Sprite>";
baseStrings[672] = "PPtr<TextAsset>";
baseStrings[688] = "PPtr<Texture>"; baseStrings[688] = "PPtr<Texture>";
baseStrings[702] = "PPtr<Texture2D>"; baseStrings[702] = "PPtr<Texture2D>";
baseStrings[718] = "PPtr<Transform>"; baseStrings[718] = "PPtr<Transform>";
baseStrings[734] = "Prefab";
baseStrings[741] = "Quaternionf"; baseStrings[741] = "Quaternionf";
baseStrings[753] = "Rectf"; baseStrings[753] = "Rectf";
baseStrings[759] = "RectInt";
baseStrings[767] = "RectOffset";
baseStrings[778] = "second"; baseStrings[778] = "second";
baseStrings[785] = "set";
baseStrings[789] = "short";
baseStrings[795] = "size"; baseStrings[795] = "size";
baseStrings[800] = "SInt16"; baseStrings[800] = "SInt16";
baseStrings[814] = "int64"; baseStrings[807] = "SInt32";
baseStrings[814] = "SInt64";
baseStrings[821] = "SInt8";
baseStrings[827] = "staticvector";
baseStrings[840] = "string"; baseStrings[840] = "string";
baseStrings[847] = "TextAsset"; baseStrings[847] = "TextAsset";
baseStrings[857] = "TextMesh";
baseStrings[866] = "Texture";
baseStrings[874] = "Texture2D"; baseStrings[874] = "Texture2D";
baseStrings[884] = "Transform"; baseStrings[884] = "Transform";
baseStrings[894] = "TypelessData"; baseStrings[894] = "TypelessData";
baseStrings[907] = "UInt16"; baseStrings[907] = "UInt16";
baseStrings[914] = "UInt32";
baseStrings[921] = "UInt64"; baseStrings[921] = "UInt64";
baseStrings[928] = "UInt8"; baseStrings[928] = "UInt8";
baseStrings[934] = "UInt"; baseStrings[934] = "unsigned int";
baseStrings[947] = "unsigned long long";
baseStrings[966] = "unsigned short";
baseStrings[981] = "vector"; baseStrings[981] = "vector";
baseStrings[988] = "Vector2f"; baseStrings[988] = "Vector2f";
baseStrings[997] = "Vector3f"; baseStrings[997] = "Vector3f";
baseStrings[1006] = "Vector4f"; baseStrings[1006] = "Vector4f";
baseStrings[1015] = "m_ScriptingClassIdentifier";
#endregion #endregion
int varCount = a_Stream.ReadInt32(); int varCount = a_Stream.ReadInt32();
@ -356,8 +397,8 @@ namespace Unity_Studio
a_Stream.Position += varCount * 24; a_Stream.Position += varCount * 24;
string varStrings = Encoding.UTF8.GetString(a_Stream.ReadBytes(stringSize)); string varStrings = Encoding.UTF8.GetString(a_Stream.ReadBytes(stringSize));
string className = ""; string className = "";
StringBuilder classVarStr = new StringBuilder(); var classVarStr = new StringBuilder();
var classVarStr2 = new StringBuilder();//用来export
//build Class Structures //build Class Structures
a_Stream.Position -= varCount * 24 + stringSize; a_Stream.Position -= varCount * 24 + stringSize;
for (int i = 0; i < varCount; i++) for (int i = 0; i < varCount; i++)
@ -385,14 +426,18 @@ namespace Unity_Studio
int num1 = a_Stream.ReadInt32(); int num1 = a_Stream.ReadInt32();
if (index == 0) { className = varTypeStr + " " + varNameStr; } 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"); } //for (int t = 0; t < level; t++) { Debug.Write("\t"); }
//Debug.WriteLine(varTypeStr + " " + varNameStr + " " + size); //Debug.WriteLine(varTypeStr + " " + varNameStr + " " + size);
} }
a_Stream.Position += stringSize; 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()); aClass.SubItems.Add(classID.ToString());
ClassStructures.Add(classID, aClass); ClassStructures.Add(classID, aClass);
} }

View File

@ -10,6 +10,7 @@ namespace Unity_Studio
{ {
public int ID; public int ID;
public string members; public string members;
public string members2;
} }
public class ClassIDReference public class ClassIDReference

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using System.IO; using System.IO;
@ -21,41 +20,9 @@ namespace Unity_Studio
public EndianStream(Stream stream, EndianType endian) : base(stream) { } public EndianStream(Stream stream, EndianType endian) : base(stream) { }
~EndianStream()
{
Dispose();
}
public long Position { get { return base.BaseStream.Position; } set { base.BaseStream.Position = value; } } public long Position { get { return base.BaseStream.Position; } set { base.BaseStream.Position = value; } }
public new void Dispose() public override short ReadInt16()
{
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()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -77,7 +44,7 @@ namespace Unity_Studio
else return base.ReadInt32(); else return base.ReadInt32();
} }
public override Int64 ReadInt64() public override long ReadInt64()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -88,7 +55,7 @@ namespace Unity_Studio
else return base.ReadInt64(); else return base.ReadInt64();
} }
public override UInt16 ReadUInt16() public override ushort ReadUInt16()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -99,7 +66,7 @@ namespace Unity_Studio
else return base.ReadUInt16(); else return base.ReadUInt16();
} }
public override UInt32 ReadUInt32() public override uint ReadUInt32()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -110,7 +77,7 @@ namespace Unity_Studio
else return base.ReadUInt32(); else return base.ReadUInt32();
} }
public override UInt64 ReadUInt64() public override ulong ReadUInt64()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -121,7 +88,7 @@ namespace Unity_Studio
else return base.ReadUInt64(); else return base.ReadUInt64();
} }
public override Single ReadSingle() public override float ReadSingle()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -132,7 +99,7 @@ namespace Unity_Studio
else return base.ReadSingle(); else return base.ReadSingle();
} }
public override Double ReadDouble() public override double ReadDouble()
{ {
if (endian == EndianType.BigEndian) if (endian == EndianType.BigEndian)
{ {
@ -143,14 +110,9 @@ namespace Unity_Studio
else return base.ReadDouble(); else return base.ReadDouble();
} }
public override string ReadString()
{
return base.ReadString();
}
public string ReadASCII(int length) public string ReadASCII(int length)
{ {
return ASCIIEncoding.ASCII.GetString(base.ReadBytes(length)); return Encoding.ASCII.GetString(base.ReadBytes(length));
} }
public void AlignStream(int alignment) public void AlignStream(int alignment)

View File

@ -27,7 +27,7 @@ namespace Unity_Studio
ClassStrStruct classStructure; ClassStrStruct classStructure;
if (sourceFile.ClassStructures.TryGetValue(preloadData.Type1, out 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 strs = member.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
var sb = new StringBuilder(); var sb = new StringBuilder();
Read(sb, strs, a_Stream); Read(sb, strs, a_Stream);
@ -64,72 +64,83 @@ namespace Unity_Studio
{ {
for (int i = 0; i < strs.Length; i++) for (int i = 0; i < strs.Length; i++)
{ {
var strs2 = strs[i].Split(' '); var strs2 = strs[i].Split('\t');
var str = strs2[0].Split('\t'); var level = int.Parse(strs2[0]);
var level = str.Length - 1; var varTypeStr = strs2[1];
var varTypeStr = str.Last(); var varNameStr = strs2[2];
var varNameStr = strs2[1]; if (varTypeStr == "SInt8")//sbyte
if (varTypeStr == "int")
{ {
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); sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4); a_Stream.AlignStream(4);
} }
else if (varTypeStr == "UInt") else if (varTypeStr == "UInt8")//byte
{
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")
{ {
var value = a_Stream.ReadByte(); var value = a_Stream.ReadByte();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4); 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(); var value = a_Stream.ReadSingle();
sb.AppendFormat("{0}{1} {2} = {3:f}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); sb.AppendFormat("{0}{1} {2} = {3:f}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4); 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(); var value = a_Stream.ReadBoolean();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4); a_Stream.AlignStream(4);
} }
else if (varTypeStr == "string") else if (varTypeStr == "string")//string
{ {
var value = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); var value = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
i += 3;//skip 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); sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
var size = a_Stream.ReadInt32(); var size = a_Stream.ReadInt32();
@ -154,9 +165,8 @@ namespace Unity_Studio
List<string> strs3 = new List<string>(); List<string> strs3 = new List<string>();
for (int i = index + 2; i < strs.Length; i++)//skip int size for (int i = index + 2; i < strs.Length; i++)//skip int size
{ {
var strs2 = strs[i].Split(' '); var strs2 = strs[i].Split('\t');
var str = strs2[0].Split('\t'); var level2 = int.Parse(strs2[0]);
var level2 = str.Length - 1;
if (level2 <= level) if (level2 <= level)
{ {
return strs3.ToArray(); return strs3.ToArray();