mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-07-18 03:24:15 -04:00
support Unity 5.5
This commit is contained in:
@ -27,107 +27,162 @@ namespace Unity_Studio
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
int m_AsciiStartOffset = a_Stream.ReadInt32();
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)
|
||||
{
|
||||
int m_FontCountX = a_Stream.ReadInt32();
|
||||
int m_FontCountY = a_Stream.ReadInt32();
|
||||
}
|
||||
|
||||
float m_Kerning = a_Stream.ReadSingle();
|
||||
float m_LineSpacing = a_Stream.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
int m_PerCharacterKerning_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_PerCharacterKerning_size; i++)
|
||||
var m_LineSpacing = a_Stream.ReadSingle();
|
||||
var m_DefaultMaterial = sourceFile.ReadPPtr();
|
||||
var m_FontSize = a_Stream.ReadSingle();
|
||||
var m_Texture = sourceFile.ReadPPtr();
|
||||
int m_AsciiStartOffset = a_Stream.ReadInt32();
|
||||
var m_Tracking = a_Stream.ReadSingle();
|
||||
var m_CharacterSpacing = a_Stream.ReadInt32();
|
||||
var m_CharacterPadding = a_Stream.ReadInt32();
|
||||
var m_ConvertCase = a_Stream.ReadInt32();
|
||||
int m_CharacterRects_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||
{
|
||||
int first = a_Stream.ReadInt32();
|
||||
int index = a_Stream.ReadInt32();
|
||||
//Rectf uv
|
||||
float uvx = a_Stream.ReadSingle();
|
||||
float uvy = a_Stream.ReadSingle();
|
||||
float uvwidth = a_Stream.ReadSingle();
|
||||
float uvheight = a_Stream.ReadSingle();
|
||||
//Rectf vert
|
||||
float vertx = a_Stream.ReadSingle();
|
||||
float verty = a_Stream.ReadSingle();
|
||||
float vertwidth = a_Stream.ReadSingle();
|
||||
float vertheight = a_Stream.ReadSingle();
|
||||
float width = a_Stream.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
bool flipped = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3;
|
||||
}
|
||||
}
|
||||
int m_KerningValues_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_KerningValues_size; i++)
|
||||
{
|
||||
int pairfirst = a_Stream.ReadInt16();
|
||||
int pairsecond = a_Stream.ReadInt16();
|
||||
float second = a_Stream.ReadSingle();
|
||||
}
|
||||
var m_PixelScale = a_Stream.ReadSingle();
|
||||
int m_FontData_size = a_Stream.ReadInt32();
|
||||
if (m_FontData_size > 0)
|
||||
{
|
||||
m_FontData = new byte[m_FontData_size];
|
||||
a_Stream.Read(m_FontData, 0, m_FontData_size);
|
||||
|
||||
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
|
||||
{ preloadData.extension = ".otf"; }
|
||||
else { preloadData.extension = ".ttf"; }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_CharacterSpacing = a_Stream.ReadInt32();
|
||||
int m_CharacterPadding = a_Stream.ReadInt32();
|
||||
}
|
||||
int m_AsciiStartOffset = a_Stream.ReadInt32();
|
||||
|
||||
int m_ConvertCase = a_Stream.ReadInt32();
|
||||
PPtr m_DefaultMaterial = sourceFile.ReadPPtr();
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
int m_FontCountX = a_Stream.ReadInt32();
|
||||
int m_FontCountY = a_Stream.ReadInt32();
|
||||
}
|
||||
|
||||
int m_CharacterRects_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||
{
|
||||
int index = a_Stream.ReadInt32();
|
||||
//Rectf uv
|
||||
float uvx = a_Stream.ReadSingle();
|
||||
float uvy = a_Stream.ReadSingle();
|
||||
float uvwidth = a_Stream.ReadSingle();
|
||||
float uvheight = a_Stream.ReadSingle();
|
||||
//Rectf vert
|
||||
float vertx = a_Stream.ReadSingle();
|
||||
float verty = a_Stream.ReadSingle();
|
||||
float vertwidth = a_Stream.ReadSingle();
|
||||
float vertheight = a_Stream.ReadSingle();
|
||||
float width = a_Stream.ReadSingle();
|
||||
float m_Kerning = a_Stream.ReadSingle();
|
||||
float m_LineSpacing = a_Stream.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
int m_PerCharacterKerning_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_PerCharacterKerning_size; i++)
|
||||
{
|
||||
int first = a_Stream.ReadInt32();
|
||||
float second = a_Stream.ReadSingle();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_CharacterSpacing = a_Stream.ReadInt32();
|
||||
int m_CharacterPadding = a_Stream.ReadInt32();
|
||||
}
|
||||
|
||||
int m_ConvertCase = a_Stream.ReadInt32();
|
||||
PPtr m_DefaultMaterial = sourceFile.ReadPPtr();
|
||||
|
||||
int m_CharacterRects_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||
{
|
||||
int index = a_Stream.ReadInt32();
|
||||
//Rectf uv
|
||||
float uvx = a_Stream.ReadSingle();
|
||||
float uvy = a_Stream.ReadSingle();
|
||||
float uvwidth = a_Stream.ReadSingle();
|
||||
float uvheight = a_Stream.ReadSingle();
|
||||
//Rectf vert
|
||||
float vertx = a_Stream.ReadSingle();
|
||||
float verty = a_Stream.ReadSingle();
|
||||
float vertwidth = a_Stream.ReadSingle();
|
||||
float vertheight = a_Stream.ReadSingle();
|
||||
float width = a_Stream.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
bool flipped = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3;
|
||||
}
|
||||
}
|
||||
|
||||
PPtr m_Texture = sourceFile.ReadPPtr();
|
||||
|
||||
int m_KerningValues_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_KerningValues_size; i++)
|
||||
{
|
||||
int pairfirst = a_Stream.ReadInt16();
|
||||
int pairsecond = a_Stream.ReadInt16();
|
||||
float second = a_Stream.ReadSingle();
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
bool m_GridFont = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
}
|
||||
else { float m_PixelScale = a_Stream.ReadSingle(); }
|
||||
|
||||
int m_FontData_size = a_Stream.ReadInt32();
|
||||
if (m_FontData_size > 0)
|
||||
{
|
||||
m_FontData = new byte[m_FontData_size];
|
||||
a_Stream.Read(m_FontData, 0, m_FontData_size);
|
||||
|
||||
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
|
||||
{ preloadData.extension = ".otf"; }
|
||||
else { preloadData.extension = ".ttf"; }
|
||||
|
||||
}
|
||||
|
||||
float m_FontSize = a_Stream.ReadSingle();//problem here in minifootball
|
||||
float m_Ascent = a_Stream.ReadSingle();
|
||||
uint m_DefaultStyle = a_Stream.ReadUInt32();
|
||||
|
||||
int m_FontNames = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_FontNames; i++)
|
||||
{
|
||||
string m_FontName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
bool flipped = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3;
|
||||
int m_FallbackFonts = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_FallbackFonts; i++)
|
||||
{
|
||||
PPtr m_FallbackFont = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
int m_FontRenderingMode = a_Stream.ReadInt32();
|
||||
}
|
||||
}
|
||||
|
||||
PPtr m_Texture = sourceFile.ReadPPtr();
|
||||
|
||||
int m_KerningValues_size = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_KerningValues_size; i++)
|
||||
{
|
||||
int pairfirst = a_Stream.ReadInt16();
|
||||
int pairsecond = a_Stream.ReadInt16();
|
||||
float second = a_Stream.ReadSingle();
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
bool m_GridFont = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
}
|
||||
else { float m_PixelScale = a_Stream.ReadSingle(); }
|
||||
|
||||
int m_FontData_size = a_Stream.ReadInt32();
|
||||
if (m_FontData_size > 0)
|
||||
{
|
||||
m_FontData = new byte[m_FontData_size];
|
||||
a_Stream.Read(m_FontData, 0, m_FontData_size);
|
||||
|
||||
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
|
||||
{ preloadData.extension = ".otf"; }
|
||||
else { preloadData.extension = ".ttf"; }
|
||||
|
||||
}
|
||||
|
||||
float m_FontSize = a_Stream.ReadSingle();//problem here in minifootball
|
||||
float m_Ascent = a_Stream.ReadSingle();
|
||||
uint m_DefaultStyle = a_Stream.ReadUInt32();
|
||||
|
||||
int m_FontNames = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_FontNames; i++)
|
||||
{
|
||||
string m_FontName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
int m_FallbackFonts = a_Stream.ReadInt32();
|
||||
for (int i = 0; i < m_FallbackFonts; i++)
|
||||
{
|
||||
PPtr m_FallbackFont = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
int m_FontRenderingMode = a_Stream.ReadInt32();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -16,6 +16,15 @@ namespace Unity_Studio
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
|
||||
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 nad up
|
||||
{
|
||||
//productGUID
|
||||
a_Stream.ReadInt32();
|
||||
a_Stream.ReadInt32();
|
||||
a_Stream.ReadInt32();
|
||||
a_Stream.ReadInt32();
|
||||
}
|
||||
if (sourceFile.version[0] >= 3)
|
||||
{
|
||||
if (sourceFile.version[0] == 3 && sourceFile.version[1] < 2) { string AndroidLicensePublicKey = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); }
|
||||
|
74
Unity Studio/Unity Classes/Shader.cs
Normal file
74
Unity Studio/Unity Classes/Shader.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
{
|
||||
class Shader
|
||||
{
|
||||
public string m_Name;
|
||||
public byte[] m_Script;
|
||||
public string m_PathName;
|
||||
|
||||
public Shader(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
preloadData.extension = ".txt";
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)
|
||||
{
|
||||
if (readSwitch)
|
||||
{
|
||||
m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Name != "") { preloadData.Text = m_Name; }
|
||||
else { preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID; }
|
||||
preloadData.SubItems.AddRange(new string[] { preloadData.TypeString, preloadData.exportSize.ToString() });
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_Script_size = a_Stream.ReadInt32();
|
||||
|
||||
if (readSwitch) //asset is read for preview or export
|
||||
{
|
||||
m_Script = new byte[m_Script_size];
|
||||
a_Stream.Read(m_Script, 0, m_Script_size);
|
||||
|
||||
if (m_Script[0] == 93) { m_Script = SevenZip.Compression.LZMA.SevenZipHelper.Decompress(m_Script); }
|
||||
if (m_Script[0] == 60 || (m_Script[0] == 239 && m_Script[1] == 187 && m_Script[2] == 191 && m_Script[3] == 60)) { preloadData.extension = ".xml"; }
|
||||
}
|
||||
else
|
||||
{
|
||||
byte lzmaTest = a_Stream.ReadByte();
|
||||
if (lzmaTest == 93)
|
||||
{
|
||||
a_Stream.Position += 4;
|
||||
preloadData.exportSize = a_Stream.ReadInt32(); //actualy int64
|
||||
a_Stream.Position -= 8;
|
||||
}
|
||||
else { preloadData.exportSize = m_Script_size; }
|
||||
|
||||
a_Stream.Position += m_Script_size - 1;
|
||||
|
||||
if (m_Name != "") { preloadData.Text = m_Name; }
|
||||
else { preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID; }
|
||||
preloadData.SubItems.AddRange(new string[] { preloadData.TypeString, preloadData.exportSize.ToString() });
|
||||
}
|
||||
a_Stream.AlignStream(4);
|
||||
m_PathName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -60,14 +60,29 @@ namespace Unity_Studio
|
||||
m_Materials[m] = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] < 3) { a_Stream.Position += 16; } //m_LightmapTilingOffset vector4d
|
||||
if (version[0] < 3)
|
||||
{
|
||||
a_Stream.Position += 16;//m_LightmapTilingOffset vector4d
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_SubsetIndices_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_SubsetIndices_size * 4;
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
|
||||
{
|
||||
a_Stream.Position += 4;//m_StaticBatchInfo
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_SubsetIndices_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_SubsetIndices_size * 4;
|
||||
}
|
||||
PPtr m_StaticBatchRoot = sourceFile.ReadPPtr();
|
||||
|
||||
if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 and up
|
||||
{
|
||||
PPtr m_ProbeAnchor = sourceFile.ReadPPtr();
|
||||
PPtr m_LightProbeVolumeOverride = sourceFile.ReadPPtr();
|
||||
}
|
||||
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))
|
||||
{
|
||||
bool m_UseLightProbes = a_Stream.ReadBoolean();
|
||||
a_Stream.Position += 3; //alignment
|
||||
@ -80,7 +95,7 @@ namespace Unity_Studio
|
||||
{
|
||||
if (version[0] == 4 && version[1] <= 3) { int m_SortingLayer = a_Stream.ReadInt16(); }
|
||||
else { int m_SortingLayer = a_Stream.ReadInt32(); }
|
||||
|
||||
|
||||
int m_SortingOrder = a_Stream.ReadInt16();
|
||||
a_Stream.AlignStream(4);
|
||||
}
|
||||
|
@ -442,8 +442,8 @@ namespace Unity_Studio
|
||||
}
|
||||
case TextureFormat.ATC_RGBA8: //透明通道很奇怪?
|
||||
{
|
||||
q_format = (int)QFORMAT.Q_FORMAT_ATC_RGBA_EXPLICIT_ALPHA;
|
||||
glInternalFormat = KTXHeader.GL_ATC_RGBA_EXPLICIT_ALPHA_AMD;
|
||||
q_format = (int)QFORMAT.Q_FORMAT_ATC_RGBA_INTERPOLATED_ALPHA;
|
||||
glInternalFormat = KTXHeader.GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD;
|
||||
glBaseInternalFormat = KTXHeader.GL_RGBA;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user