From c00da37267be2da693bd8afc5c8175d41aa4a175 Mon Sep 17 00:00:00 2001 From: Perfare Date: Mon, 8 Jan 2018 23:53:15 +0800 Subject: [PATCH] Fixed #130 --- .../Unity Studio Classes/AssetsFile.cs | 42 ++++++++++--------- Unity Studio/UnityStudioForm.cs | 2 +- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Unity Studio/Unity Studio Classes/AssetsFile.cs b/Unity Studio/Unity Studio Classes/AssetsFile.cs index dd29c23..26df084 100644 --- a/Unity Studio/Unity Studio Classes/AssetsFile.cs +++ b/Unity Studio/Unity Studio Classes/AssetsFile.cs @@ -452,22 +452,11 @@ namespace Unity_Studio type1 = classID; } classIDs.Add(new[] { type1, classID }); + if (classID == 114) + { + a_Stream.Position += 16; + } classID = type1; - /*TODO 用来替换下方的代码 - if(classID == 114) - { - a_Stream.Position += 16; - }*/ - var temp = a_Stream.ReadInt32(); - if (temp == 0) - { - a_Stream.Position += 16; - } - a_Stream.Position -= 4; - if (type1 < 0) - { - a_Stream.Position += 16; - } } else if (classID < 0) { @@ -481,7 +470,7 @@ namespace Unity_Studio int stringSize = a_Stream.ReadInt32(); a_Stream.Position += varCount * 24; - string varStrings = Encoding.UTF8.GetString(a_Stream.ReadBytes(stringSize)); + var stringReader = new EndianBinaryReader(new MemoryStream(a_Stream.ReadBytes(stringSize))); string className = ""; var classVar = new List(); //build Class Structures @@ -496,15 +485,27 @@ namespace Unity_Studio ushort test = a_Stream.ReadUInt16(); string varTypeStr; if (test == 0) //varType is an offset in the string block - { varTypeStr = varStrings.Substring(varTypeIndex, varStrings.IndexOf('\0', varTypeIndex) - varTypeIndex); }//substringToNull + { + stringReader.Position = varTypeIndex; + varTypeStr = stringReader.ReadStringToNull(); + } else //varType is an index in an internal strig array - { varTypeStr = baseStrings.ContainsKey(varTypeIndex) ? baseStrings[varTypeIndex] : varTypeIndex.ToString(); } + { + varTypeStr = baseStrings.ContainsKey(varTypeIndex) ? baseStrings[varTypeIndex] : varTypeIndex.ToString(); + } ushort varNameIndex = a_Stream.ReadUInt16(); test = a_Stream.ReadUInt16(); string varNameStr; - if (test == 0) { varNameStr = varStrings.Substring(varNameIndex, varStrings.IndexOf('\0', varNameIndex) - varNameIndex); } - else { varNameStr = baseStrings.ContainsKey(varNameIndex) ? baseStrings[varNameIndex] : varNameIndex.ToString(); } + if (test == 0) + { + stringReader.Position = varNameIndex; + varNameStr = stringReader.ReadStringToNull(); + } + else + { + varNameStr = baseStrings.ContainsKey(varNameIndex) ? baseStrings[varNameIndex] : varNameIndex.ToString(); + } int size = a_Stream.ReadInt32(); int index = a_Stream.ReadInt32(); @@ -523,6 +524,7 @@ namespace Unity_Studio }); } } + stringReader.Dispose(); a_Stream.Position += stringSize; var aClass = new ClassStruct() { ID = classID, Text = className, members = classVar }; diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index 65318f1..dac9b05 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -1172,7 +1172,7 @@ namespace Unity_Studio FMODstatusLabel.Text = "Stopped"; FMODinfoLabel.Text = ""; - if (sound != null) + if (sound != null && sound.isValid()) { var result = sound.release(); ERRCHECK(result);