mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-26 13:50:21 -04:00
130 lines
4.7 KiB
C#
130 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Unity_Studio
|
|
{
|
|
class TexEnv
|
|
{
|
|
public string name;
|
|
public PPtr m_Texture;
|
|
public float[] m_Scale;
|
|
public float[] m_Offset;
|
|
}
|
|
|
|
class strFloatPair
|
|
{
|
|
public string first;
|
|
public float second;
|
|
}
|
|
|
|
class strColorPair
|
|
{
|
|
public string first;
|
|
public float[] second;
|
|
}
|
|
|
|
class Material
|
|
{
|
|
public string m_Name;
|
|
public PPtr m_Shader;
|
|
public string[] m_ShaderKeywords;
|
|
public int m_CustomRenderQueue;
|
|
public TexEnv[] m_TexEnvs;
|
|
public strFloatPair[] m_Floats;
|
|
public strColorPair[] m_Colors;
|
|
|
|
public Material(AssetPreloadData preloadData)
|
|
{
|
|
var sourceFile = preloadData.sourceFile;
|
|
var reader = preloadData.Reader;
|
|
|
|
if (sourceFile.platform == -2)
|
|
{
|
|
uint m_ObjectHideFlags = reader.ReadUInt32();
|
|
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
|
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
|
}
|
|
|
|
m_Name = reader.ReadAlignedString(reader.ReadInt32());
|
|
m_Shader = sourceFile.ReadPPtr();
|
|
|
|
if (sourceFile.version[0] == 4 && (sourceFile.version[1] >= 2 || (sourceFile.version[1] == 1 && sourceFile.buildType[0] != "a")))
|
|
{
|
|
m_ShaderKeywords = new string[reader.ReadInt32()];
|
|
for (int i = 0; i < m_ShaderKeywords.Length; i++)
|
|
{
|
|
m_ShaderKeywords[i] = reader.ReadAlignedString(reader.ReadInt32());
|
|
}
|
|
}
|
|
else if (sourceFile.version[0] >= 5)//5.0 and up
|
|
{
|
|
m_ShaderKeywords = new[] { reader.ReadAlignedString(reader.ReadInt32()) };
|
|
uint m_LightmapFlags = reader.ReadUInt32();
|
|
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 6 || sourceFile.version[0] > 5)//5.6.0 and up
|
|
{
|
|
var m_EnableInstancingVariants = reader.ReadBoolean();
|
|
//var m_DoubleSidedGI = a_Stream.ReadBoolean();//2017.x
|
|
reader.AlignStream(4);
|
|
}
|
|
}
|
|
|
|
if (sourceFile.version[0] > 4 || sourceFile.version[0] == 4 && sourceFile.version[1] >= 3) { m_CustomRenderQueue = reader.ReadInt32(); }
|
|
|
|
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 1 || sourceFile.version[0] > 5)//5.1 and up
|
|
{
|
|
string[][] stringTagMap = new string[reader.ReadInt32()][];
|
|
for (int i = 0; i < stringTagMap.Length; i++)
|
|
{
|
|
stringTagMap[i] = new[] { reader.ReadAlignedString(reader.ReadInt32()), reader.ReadAlignedString(reader.ReadInt32()) };
|
|
}
|
|
}
|
|
//disabledShaderPasses
|
|
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 6) || sourceFile.version[0] > 5)//5.6.0 and up
|
|
{
|
|
var size = reader.ReadInt32();
|
|
for (int i = 0; i < size; i++)
|
|
{
|
|
reader.ReadAlignedString(reader.ReadInt32());
|
|
}
|
|
}
|
|
//m_SavedProperties
|
|
m_TexEnvs = new TexEnv[reader.ReadInt32()];
|
|
for (int i = 0; i < m_TexEnvs.Length; i++)
|
|
{
|
|
TexEnv m_TexEnv = new TexEnv()
|
|
{
|
|
name = reader.ReadAlignedString(reader.ReadInt32()),
|
|
m_Texture = sourceFile.ReadPPtr(),
|
|
m_Scale = new[] { reader.ReadSingle(), reader.ReadSingle() },
|
|
m_Offset = new[] { reader.ReadSingle(), reader.ReadSingle() }
|
|
};
|
|
m_TexEnvs[i] = m_TexEnv;
|
|
}
|
|
|
|
m_Floats = new strFloatPair[reader.ReadInt32()];
|
|
for (int i = 0; i < m_Floats.Length; i++)
|
|
{
|
|
strFloatPair m_Float = new strFloatPair()
|
|
{
|
|
first = reader.ReadAlignedString(reader.ReadInt32()),
|
|
second = reader.ReadSingle()
|
|
};
|
|
m_Floats[i] = m_Float;
|
|
}
|
|
|
|
m_Colors = new strColorPair[reader.ReadInt32()];
|
|
for (int i = 0; i < m_Colors.Length; i++)
|
|
{
|
|
strColorPair m_Color = new strColorPair()
|
|
{
|
|
first = reader.ReadAlignedString(reader.ReadInt32()),
|
|
second = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() }
|
|
};
|
|
m_Colors[i] = m_Color;
|
|
}
|
|
}
|
|
}
|
|
}
|