improved
This commit is contained in:
parent
9d3cae8b28
commit
a98fd52831
|
@ -171,6 +171,7 @@
|
||||||
<Compile Include="Classes\MonoScript.cs" />
|
<Compile Include="Classes\MonoScript.cs" />
|
||||||
<Compile Include="Classes\NamedObject.cs" />
|
<Compile Include="Classes\NamedObject.cs" />
|
||||||
<Compile Include="Classes\Object.cs" />
|
<Compile Include="Classes\Object.cs" />
|
||||||
|
<Compile Include="StudioClasses\ObjectReader.cs" />
|
||||||
<Compile Include="StudioClasses\PPtr.cs" />
|
<Compile Include="StudioClasses\PPtr.cs" />
|
||||||
<Compile Include="Classes\Renderer.cs" />
|
<Compile Include="Classes\Renderer.cs" />
|
||||||
<Compile Include="Classes\Texture.cs" />
|
<Compile Include="Classes\Texture.cs" />
|
||||||
|
@ -204,7 +205,7 @@
|
||||||
<Compile Include="Classes\Sprite.cs" />
|
<Compile Include="Classes\Sprite.cs" />
|
||||||
<Compile Include="Classes\SpriteAtlas.cs" />
|
<Compile Include="Classes\SpriteAtlas.cs" />
|
||||||
<Compile Include="Classes\VideoClip.cs" />
|
<Compile Include="Classes\VideoClip.cs" />
|
||||||
<Compile Include="StudioClasses\AssetPreloadData.cs" />
|
<Compile Include="StudioClasses\AssetItem.cs" />
|
||||||
<Compile Include="Classes\AudioClip.cs" />
|
<Compile Include="Classes\AudioClip.cs" />
|
||||||
<Compile Include="Classes\BuildSettings.cs" />
|
<Compile Include="Classes\BuildSettings.cs" />
|
||||||
<Compile Include="StudioClasses\BundleFile.cs" />
|
<Compile Include="StudioClasses\BundleFile.cs" />
|
||||||
|
|
|
@ -20,8 +20,8 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
partial class AssetStudioForm : Form
|
partial class AssetStudioForm : Form
|
||||||
{
|
{
|
||||||
private AssetPreloadData lastSelectedItem;
|
private AssetItem lastSelectedItem;
|
||||||
private AssetPreloadData lastLoadedAsset;
|
private AssetItem lastLoadedAsset;
|
||||||
|
|
||||||
private FMOD.System system;
|
private FMOD.System system;
|
||||||
private FMOD.Sound sound;
|
private FMOD.Sound sound;
|
||||||
|
@ -194,6 +194,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
sceneTreeView.BeginUpdate();
|
sceneTreeView.BeginUpdate();
|
||||||
sceneTreeView.Nodes.AddRange(treeNodeCollection.ToArray());
|
sceneTreeView.Nodes.AddRange(treeNodeCollection.ToArray());
|
||||||
|
treeNodeCollection.Clear();
|
||||||
foreach (TreeNode node in sceneTreeView.Nodes)
|
foreach (TreeNode node in sceneTreeView.Nodes)
|
||||||
{
|
{
|
||||||
node.HideCheckBox();
|
node.HideCheckBox();
|
||||||
|
@ -580,7 +581,7 @@ namespace AssetStudio
|
||||||
switch (e.Column)
|
switch (e.Column)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
|
visibleAssets.Sort(delegate (AssetItem a, AssetItem b)
|
||||||
{
|
{
|
||||||
int xdiff = reverseSort ? b.Text.CompareTo(a.Text) : a.Text.CompareTo(b.Text);
|
int xdiff = reverseSort ? b.Text.CompareTo(a.Text) : a.Text.CompareTo(b.Text);
|
||||||
if (xdiff != 0) return xdiff;
|
if (xdiff != 0) return xdiff;
|
||||||
|
@ -588,7 +589,7 @@ namespace AssetStudio
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
|
visibleAssets.Sort(delegate (AssetItem a, AssetItem b)
|
||||||
{
|
{
|
||||||
int xdiff = reverseSort ? b.TypeString.CompareTo(a.TypeString) : a.TypeString.CompareTo(b.TypeString);
|
int xdiff = reverseSort ? b.TypeString.CompareTo(a.TypeString) : a.TypeString.CompareTo(b.TypeString);
|
||||||
if (xdiff != 0) return xdiff;
|
if (xdiff != 0) return xdiff;
|
||||||
|
@ -596,7 +597,7 @@ namespace AssetStudio
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
visibleAssets.Sort(delegate (AssetPreloadData a, AssetPreloadData b)
|
visibleAssets.Sort(delegate (AssetItem a, AssetItem b)
|
||||||
{
|
{
|
||||||
int xdiff = reverseSort ? b.FullSize.CompareTo(a.FullSize) : a.FullSize.CompareTo(b.FullSize);
|
int xdiff = reverseSort ? b.FullSize.CompareTo(a.FullSize) : a.FullSize.CompareTo(b.FullSize);
|
||||||
if (xdiff != 0) return xdiff;
|
if (xdiff != 0) return xdiff;
|
||||||
|
@ -625,7 +626,7 @@ namespace AssetStudio
|
||||||
|
|
||||||
FMODreset();
|
FMODreset();
|
||||||
|
|
||||||
lastSelectedItem = (AssetPreloadData)e.Item;
|
lastSelectedItem = (AssetItem)e.Item;
|
||||||
|
|
||||||
if (e.IsSelected)
|
if (e.IsSelected)
|
||||||
{
|
{
|
||||||
|
@ -650,14 +651,15 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PreviewAsset(AssetPreloadData asset)
|
private void PreviewAsset(AssetItem asset)
|
||||||
{
|
{
|
||||||
|
var reader = asset.reader;
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDType.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
{
|
{
|
||||||
imageTexture?.Dispose();
|
imageTexture?.Dispose();
|
||||||
var m_Texture2D = new Texture2D(asset, true);
|
var m_Texture2D = new Texture2D(reader, true);
|
||||||
|
|
||||||
//Info
|
//Info
|
||||||
asset.InfoText = $"Width: {m_Texture2D.m_Width}\nHeight: {m_Texture2D.m_Height}\nFormat: {m_Texture2D.m_TextureFormat}";
|
asset.InfoText = $"Width: {m_Texture2D.m_Width}\nHeight: {m_Texture2D.m_Height}\nFormat: {m_Texture2D.m_TextureFormat}";
|
||||||
|
@ -692,7 +694,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
{
|
{
|
||||||
var m_AudioClip = new AudioClip(asset, true);
|
var m_AudioClip = new AudioClip(reader, true);
|
||||||
|
|
||||||
//Info
|
//Info
|
||||||
asset.InfoText = "Compression format: ";
|
asset.InfoText = "Compression format: ";
|
||||||
|
@ -814,7 +816,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.Shader:
|
case ClassIDType.Shader:
|
||||||
{
|
{
|
||||||
Shader m_TextAsset = new Shader(asset);
|
Shader m_TextAsset = new Shader(reader);
|
||||||
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
||||||
m_Script_Text = Regex.Replace(m_Script_Text, "(?<!\r)\n", "\r\n");
|
m_Script_Text = Regex.Replace(m_Script_Text, "(?<!\r)\n", "\r\n");
|
||||||
m_Script_Text = m_Script_Text.Replace("\0", "\\0");
|
m_Script_Text = m_Script_Text.Replace("\0", "\\0");
|
||||||
|
@ -824,7 +826,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
{
|
{
|
||||||
TextAsset m_TextAsset = new TextAsset(asset);
|
TextAsset m_TextAsset = new TextAsset(reader);
|
||||||
|
|
||||||
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
||||||
m_Script_Text = Regex.Replace(m_Script_Text, "(?<!\r)\n", "\r\n");
|
m_Script_Text = Regex.Replace(m_Script_Text, "(?<!\r)\n", "\r\n");
|
||||||
|
@ -835,14 +837,13 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
{
|
{
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
if (reader.serializedType?.m_Nodes != null)
|
||||||
if (asset.serializedType?.m_Nodes != null)
|
|
||||||
{
|
{
|
||||||
textPreviewBox.Text = asset.Dump();
|
textPreviewBox.Text = reader.Dump();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
textPreviewBox.Text = GetScriptString(asset);
|
textPreviewBox.Text = GetScriptString(reader);
|
||||||
}
|
}
|
||||||
textPreviewBox.Visible = true;
|
textPreviewBox.Visible = true;
|
||||||
|
|
||||||
|
@ -850,7 +851,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.Font:
|
case ClassIDType.Font:
|
||||||
{
|
{
|
||||||
Font m_Font = new Font(asset);
|
Font m_Font = new Font(reader);
|
||||||
if (m_Font.m_FontData != null)
|
if (m_Font.m_FontData != null)
|
||||||
{
|
{
|
||||||
IntPtr data = Marshal.AllocCoTaskMem(m_Font.m_FontData.Length);
|
IntPtr data = Marshal.AllocCoTaskMem(m_Font.m_FontData.Length);
|
||||||
|
@ -902,7 +903,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.Mesh:
|
case ClassIDType.Mesh:
|
||||||
{
|
{
|
||||||
var m_Mesh = new Mesh(asset);
|
var m_Mesh = new Mesh(reader);
|
||||||
if (m_Mesh.m_VertexCount > 0)
|
if (m_Mesh.m_VertexCount > 0)
|
||||||
{
|
{
|
||||||
viewMatrixData = Matrix4.CreateRotationY(-(float)Math.PI / 4) * Matrix4.CreateRotationX(-(float)Math.PI / 6);
|
viewMatrixData = Matrix4.CreateRotationY(-(float)Math.PI / 4) * Matrix4.CreateRotationX(-(float)Math.PI / 6);
|
||||||
|
@ -1055,7 +1056,7 @@ namespace AssetStudio
|
||||||
case ClassIDType.Sprite:
|
case ClassIDType.Sprite:
|
||||||
{
|
{
|
||||||
imageTexture?.Dispose();
|
imageTexture?.Dispose();
|
||||||
imageTexture = SpriteHelper.GetImageFromSprite(new Sprite(asset));
|
imageTexture = SpriteHelper.GetImageFromSprite(new Sprite(reader));
|
||||||
if (imageTexture != null)
|
if (imageTexture != null)
|
||||||
{
|
{
|
||||||
asset.InfoText = $"Width: {imageTexture.Width}\nHeight: {imageTexture.Height}\n";
|
asset.InfoText = $"Width: {imageTexture.Width}\nHeight: {imageTexture.Height}\n";
|
||||||
|
@ -1083,7 +1084,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
var str = asset.Dump();
|
var str = reader.Dump();
|
||||||
if (str != null)
|
if (str != null)
|
||||||
{
|
{
|
||||||
textPreviewBox.Text = str;
|
textPreviewBox.Text = str;
|
||||||
|
@ -1373,7 +1374,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
timer.Stop();
|
timer.Stop();
|
||||||
|
|
||||||
List<AssetPreloadData> toExportAssets = null;
|
List<AssetItem> toExportAssets = null;
|
||||||
switch (((ToolStripItem)sender).Name)
|
switch (((ToolStripItem)sender).Name)
|
||||||
{
|
{
|
||||||
case "exportAllAssetsMenuItem":
|
case "exportAllAssetsMenuItem":
|
||||||
|
@ -1383,10 +1384,10 @@ namespace AssetStudio
|
||||||
toExportAssets = visibleAssets;
|
toExportAssets = visibleAssets;
|
||||||
break;
|
break;
|
||||||
case "exportSelectedAssetsMenuItem":
|
case "exportSelectedAssetsMenuItem":
|
||||||
toExportAssets = new List<AssetPreloadData>(assetListView.SelectedIndices.Count);
|
toExportAssets = new List<AssetItem>(assetListView.SelectedIndices.Count);
|
||||||
foreach (int i in assetListView.SelectedIndices)
|
foreach (int i in assetListView.SelectedIndices)
|
||||||
{
|
{
|
||||||
toExportAssets.Add((AssetPreloadData)assetListView.Items[i]);
|
toExportAssets.Add((AssetItem)assetListView.Items[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1804,7 +1805,7 @@ namespace AssetStudio
|
||||||
|
|
||||||
private void showOriginalFileToolStripMenuItem_Click(object sender, EventArgs e)
|
private void showOriginalFileToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var selectasset = (AssetPreloadData)assetListView.Items[assetListView.SelectedIndices[0]];
|
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
||||||
var args = $"/select, \"{selectasset.sourceFile.parentPath ?? selectasset.sourceFile.filePath}\"";
|
var args = $"/select, \"{selectasset.sourceFile.parentPath ?? selectasset.sourceFile.filePath}\"";
|
||||||
var pfi = new ProcessStartInfo("explorer.exe", args);
|
var pfi = new ProcessStartInfo("explorer.exe", args);
|
||||||
Process.Start(pfi);
|
Process.Start(pfi);
|
||||||
|
@ -1812,8 +1813,8 @@ namespace AssetStudio
|
||||||
|
|
||||||
private void exportAnimatorwithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
private void exportAnimatorwithAnimationClipMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
AssetPreloadData animator = null;
|
AssetItem animator = null;
|
||||||
List<AssetPreloadData> animationList = new List<AssetPreloadData>();
|
List<AssetItem> animationList = new List<AssetItem>();
|
||||||
var selectedAssets = GetSelectedAssets();
|
var selectedAssets = GetSelectedAssets();
|
||||||
foreach (var assetPreloadData in selectedAssets)
|
foreach (var assetPreloadData in selectedAssets)
|
||||||
{
|
{
|
||||||
|
@ -1877,7 +1878,7 @@ namespace AssetStudio
|
||||||
|
|
||||||
private void jumpToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
private void jumpToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var selectasset = (AssetPreloadData)assetListView.Items[assetListView.SelectedIndices[0]];
|
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
||||||
if (selectasset.gameObject != null)
|
if (selectasset.gameObject != null)
|
||||||
{
|
{
|
||||||
sceneTreeView.SelectedNode = treeNodeDictionary[selectasset.gameObject];
|
sceneTreeView.SelectedNode = treeNodeDictionary[selectasset.gameObject];
|
||||||
|
@ -1904,12 +1905,12 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<AssetPreloadData> GetSelectedAssets()
|
private List<AssetItem> GetSelectedAssets()
|
||||||
{
|
{
|
||||||
var selectedAssets = new List<AssetPreloadData>();
|
var selectedAssets = new List<AssetItem>();
|
||||||
foreach (int index in assetListView.SelectedIndices)
|
foreach (int index in assetListView.SelectedIndices)
|
||||||
{
|
{
|
||||||
selectedAssets.Add((AssetPreloadData)assetListView.Items[index]);
|
selectedAssets.Add((AssetItem)assetListView.Items[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return selectedAssets;
|
return selectedAssets;
|
||||||
|
|
|
@ -9,14 +9,14 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public List<PPtr> m_Animations;
|
public List<PPtr> m_Animations;
|
||||||
|
|
||||||
public Animation(AssetPreloadData preloadData) : base(preloadData)
|
public Animation(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_Animation = sourceFile.ReadPPtr();
|
var m_Animation = reader.ReadPPtr();
|
||||||
int numAnimations = reader.ReadInt32();
|
int numAnimations = reader.ReadInt32();
|
||||||
m_Animations = new List<PPtr>(numAnimations);
|
m_Animations = new List<PPtr>(numAnimations);
|
||||||
for (int i = 0; i < numAnimations; i++)
|
for (int i = 0; i < numAnimations; i++)
|
||||||
{
|
{
|
||||||
m_Animations.Add(sourceFile.ReadPPtr());
|
m_Animations.Add(reader.ReadPPtr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,13 @@ namespace AssetStudio
|
||||||
public T outWeight { get; set; }
|
public T outWeight { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public Keyframe(EndianBinaryReader reader, Func<T> readerFunc, int[] version)
|
public Keyframe(ObjectReader reader, Func<T> readerFunc)
|
||||||
{
|
{
|
||||||
time = reader.ReadSingle();
|
time = reader.ReadSingle();
|
||||||
value = readerFunc();
|
value = readerFunc();
|
||||||
inSlope = readerFunc();
|
inSlope = readerFunc();
|
||||||
outSlope = readerFunc();
|
outSlope = readerFunc();
|
||||||
if (version[0] >= 2018)
|
if (reader.version[0] >= 2018)
|
||||||
{
|
{
|
||||||
weightedMode = reader.ReadInt32();
|
weightedMode = reader.ReadInt32();
|
||||||
inWeight = readerFunc();
|
inWeight = readerFunc();
|
||||||
|
@ -41,13 +41,14 @@ namespace AssetStudio
|
||||||
public int m_PostInfinity { get; set; }
|
public int m_PostInfinity { get; set; }
|
||||||
public int m_RotationOrder { get; set; }
|
public int m_RotationOrder { get; set; }
|
||||||
|
|
||||||
public AnimationCurve(EndianBinaryReader reader, Func<T> readerFunc, int[] version)
|
public AnimationCurve(ObjectReader reader, Func<T> readerFunc)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
int numCurves = reader.ReadInt32();
|
int numCurves = reader.ReadInt32();
|
||||||
m_Curve = new List<Keyframe<T>>(numCurves);
|
m_Curve = new List<Keyframe<T>>(numCurves);
|
||||||
for (int i = 0; i < numCurves; i++)
|
for (int i = 0; i < numCurves; i++)
|
||||||
{
|
{
|
||||||
m_Curve.Add(new Keyframe<T>(reader, readerFunc, version));
|
m_Curve.Add(new Keyframe<T>(reader, readerFunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PreInfinity = reader.ReadInt32();
|
m_PreInfinity = reader.ReadInt32();
|
||||||
|
@ -64,9 +65,9 @@ namespace AssetStudio
|
||||||
public AnimationCurve<Quaternion> curve { get; set; }
|
public AnimationCurve<Quaternion> curve { get; set; }
|
||||||
public string path { get; set; }
|
public string path { get; set; }
|
||||||
|
|
||||||
public QuaternionCurve(EndianBinaryReader reader, int[] version)
|
public QuaternionCurve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
curve = new AnimationCurve<Quaternion>(reader, reader.ReadQuaternion, version);
|
curve = new AnimationCurve<Quaternion>(reader, reader.ReadQuaternion);
|
||||||
path = reader.ReadAlignedString();
|
path = reader.ReadAlignedString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +80,7 @@ namespace AssetStudio
|
||||||
public byte[] m_Data { get; set; }
|
public byte[] m_Data { get; set; }
|
||||||
public byte m_BitSize { get; set; }
|
public byte m_BitSize { get; set; }
|
||||||
|
|
||||||
public PackedFloatVector(EndianBinaryReader reader)
|
public PackedFloatVector(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_NumItems = reader.ReadUInt32();
|
m_NumItems = reader.ReadUInt32();
|
||||||
m_Range = reader.ReadSingle();
|
m_Range = reader.ReadSingle();
|
||||||
|
@ -138,7 +139,7 @@ namespace AssetStudio
|
||||||
public byte[] m_Data { get; set; }
|
public byte[] m_Data { get; set; }
|
||||||
public byte m_BitSize { get; set; }
|
public byte m_BitSize { get; set; }
|
||||||
|
|
||||||
public PackedIntVector(EndianBinaryReader reader)
|
public PackedIntVector(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_NumItems = reader.ReadUInt32();
|
m_NumItems = reader.ReadUInt32();
|
||||||
|
|
||||||
|
@ -182,7 +183,7 @@ namespace AssetStudio
|
||||||
public uint m_NumItems { get; set; }
|
public uint m_NumItems { get; set; }
|
||||||
public byte[] m_Data { get; set; }
|
public byte[] m_Data { get; set; }
|
||||||
|
|
||||||
public PackedQuatVector(EndianBinaryReader reader)
|
public PackedQuatVector(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_NumItems = reader.ReadUInt32();
|
m_NumItems = reader.ReadUInt32();
|
||||||
|
|
||||||
|
@ -266,7 +267,7 @@ namespace AssetStudio
|
||||||
public int m_PreInfinity { get; set; }
|
public int m_PreInfinity { get; set; }
|
||||||
public int m_PostInfinity { get; set; }
|
public int m_PostInfinity { get; set; }
|
||||||
|
|
||||||
public CompressedAnimationCurve(EndianBinaryReader reader)
|
public CompressedAnimationCurve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_Path = reader.ReadAlignedString();
|
m_Path = reader.ReadAlignedString();
|
||||||
m_Times = new PackedIntVector(reader);
|
m_Times = new PackedIntVector(reader);
|
||||||
|
@ -282,9 +283,9 @@ namespace AssetStudio
|
||||||
public AnimationCurve<Vector3> curve { get; set; }
|
public AnimationCurve<Vector3> curve { get; set; }
|
||||||
public string path { get; set; }
|
public string path { get; set; }
|
||||||
|
|
||||||
public Vector3Curve(EndianBinaryReader reader, int[] version)
|
public Vector3Curve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
curve = new AnimationCurve<Vector3>(reader, reader.ReadVector3, version);
|
curve = new AnimationCurve<Vector3>(reader, reader.ReadVector3);
|
||||||
path = reader.ReadAlignedString();
|
path = reader.ReadAlignedString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -298,14 +299,13 @@ namespace AssetStudio
|
||||||
public PPtr script { get; set; }
|
public PPtr script { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public FloatCurve(AssetPreloadData preloadData)
|
public FloatCurve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var reader = preloadData.sourceFile.reader;
|
curve = new AnimationCurve<float>(reader, reader.ReadSingle);
|
||||||
curve = new AnimationCurve<float>(reader, reader.ReadSingle, preloadData.sourceFile.version);
|
|
||||||
attribute = reader.ReadAlignedString();
|
attribute = reader.ReadAlignedString();
|
||||||
path = reader.ReadAlignedString();
|
path = reader.ReadAlignedString();
|
||||||
classID = reader.ReadInt32();
|
classID = reader.ReadInt32();
|
||||||
script = preloadData.sourceFile.ReadPPtr();
|
script = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,11 +315,10 @@ namespace AssetStudio
|
||||||
public PPtr value { get; set; }
|
public PPtr value { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public PPtrKeyframe(AssetPreloadData preloadData)
|
public PPtrKeyframe(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var reader = preloadData.sourceFile.reader;
|
|
||||||
time = reader.ReadSingle();
|
time = reader.ReadSingle();
|
||||||
value = preloadData.sourceFile.ReadPPtr();
|
value = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,21 +331,19 @@ namespace AssetStudio
|
||||||
public PPtr script { get; set; }
|
public PPtr script { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public PPtrCurve(AssetPreloadData preloadData)
|
public PPtrCurve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var reader = preloadData.sourceFile.reader;
|
|
||||||
|
|
||||||
int numCurves = reader.ReadInt32();
|
int numCurves = reader.ReadInt32();
|
||||||
curve = new List<PPtrKeyframe>(numCurves);
|
curve = new List<PPtrKeyframe>(numCurves);
|
||||||
for (int i = 0; i < numCurves; i++)
|
for (int i = 0; i < numCurves; i++)
|
||||||
{
|
{
|
||||||
curve.Add(new PPtrKeyframe(preloadData));
|
curve.Add(new PPtrKeyframe(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
attribute = reader.ReadAlignedString();
|
attribute = reader.ReadAlignedString();
|
||||||
path = reader.ReadAlignedString();
|
path = reader.ReadAlignedString();
|
||||||
classID = reader.ReadInt32();
|
classID = reader.ReadInt32();
|
||||||
script = preloadData.sourceFile.ReadPPtr();
|
script = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,7 +352,7 @@ namespace AssetStudio
|
||||||
public Vector3 m_Center { get; set; }
|
public Vector3 m_Center { get; set; }
|
||||||
public Vector3 m_Extend { get; set; }
|
public Vector3 m_Extend { get; set; }
|
||||||
|
|
||||||
public AABB(EndianBinaryReader reader)
|
public AABB(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_Center = reader.ReadVector3();
|
m_Center = reader.ReadVector3();
|
||||||
m_Extend = reader.ReadVector3();
|
m_Extend = reader.ReadVector3();
|
||||||
|
@ -368,8 +365,9 @@ namespace AssetStudio
|
||||||
public Quaternion q { get; set; }
|
public Quaternion q { get; set; }
|
||||||
public object s { get; set; }
|
public object s { get; set; }
|
||||||
|
|
||||||
public xform(EndianBinaryReader reader, int[] version)
|
public xform(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
t = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
t = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||||
q = reader.ReadQuaternion();
|
q = reader.ReadQuaternion();
|
||||||
s = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
s = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||||
|
@ -385,9 +383,9 @@ namespace AssetStudio
|
||||||
public float m_InOut { get; set; }
|
public float m_InOut { get; set; }
|
||||||
public float m_Grab { get; set; }
|
public float m_Grab { get; set; }
|
||||||
|
|
||||||
public HandPose(EndianBinaryReader reader, int[] version)
|
public HandPose(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_GrabX = new xform(reader, version);
|
m_GrabX = new xform(reader);
|
||||||
|
|
||||||
int numDoFs = reader.ReadInt32();
|
int numDoFs = reader.ReadInt32();
|
||||||
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
||||||
|
@ -407,9 +405,10 @@ namespace AssetStudio
|
||||||
public object m_HintT { get; set; }
|
public object m_HintT { get; set; }
|
||||||
public float m_HintWeightT { get; set; }
|
public float m_HintWeightT { get; set; }
|
||||||
|
|
||||||
public HumanGoal(EndianBinaryReader reader, int[] version)
|
public HumanGoal(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_X = new xform(reader, version);
|
var version = reader.version;
|
||||||
|
m_X = new xform(reader);
|
||||||
m_WeightT = reader.ReadSingle();
|
m_WeightT = reader.ReadSingle();
|
||||||
m_WeightR = reader.ReadSingle();
|
m_WeightR = reader.ReadSingle();
|
||||||
if (version[0] >= 5)//5.0 and up
|
if (version[0] >= 5)//5.0 and up
|
||||||
|
@ -431,9 +430,10 @@ namespace AssetStudio
|
||||||
public float[] m_DoFArray { get; set; }
|
public float[] m_DoFArray { get; set; }
|
||||||
public object[] m_TDoFArray { get; set; }
|
public object[] m_TDoFArray { get; set; }
|
||||||
|
|
||||||
public HumanPose(EndianBinaryReader reader, int[] version)
|
public HumanPose(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_RootX = new xform(reader, version);
|
var version = reader.version;
|
||||||
|
m_RootX = new xform(reader);
|
||||||
m_LookAtPosition = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
m_LookAtPosition = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||||
m_LookAtWeight = reader.ReadVector4();
|
m_LookAtWeight = reader.ReadVector4();
|
||||||
|
|
||||||
|
@ -441,11 +441,11 @@ namespace AssetStudio
|
||||||
m_GoalArray = new List<HumanGoal>(numGoals);
|
m_GoalArray = new List<HumanGoal>(numGoals);
|
||||||
for (int i = 0; i < numGoals; i++)
|
for (int i = 0; i < numGoals; i++)
|
||||||
{
|
{
|
||||||
m_GoalArray.Add(new HumanGoal(reader, version));
|
m_GoalArray.Add(new HumanGoal(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_LeftHandPose = new HandPose(reader, version);
|
m_LeftHandPose = new HandPose(reader);
|
||||||
m_RightHandPose = new HandPose(reader, version);
|
m_RightHandPose = new HandPose(reader);
|
||||||
|
|
||||||
int numDoFs = reader.ReadInt32();
|
int numDoFs = reader.ReadInt32();
|
||||||
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
||||||
|
@ -467,7 +467,7 @@ namespace AssetStudio
|
||||||
public uint[] data { get; set; }
|
public uint[] data { get; set; }
|
||||||
public uint curveCount { get; set; }
|
public uint curveCount { get; set; }
|
||||||
|
|
||||||
public StreamedClip(EndianBinaryReader reader)
|
public StreamedClip(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numData = reader.ReadInt32();
|
int numData = reader.ReadInt32();
|
||||||
data = reader.ReadUInt32Array(numData);
|
data = reader.ReadUInt32Array(numData);
|
||||||
|
@ -570,7 +570,7 @@ namespace AssetStudio
|
||||||
public float m_BeginTime { get; set; }
|
public float m_BeginTime { get; set; }
|
||||||
public float[] m_SampleArray { get; set; }
|
public float[] m_SampleArray { get; set; }
|
||||||
|
|
||||||
public DenseClip(EndianBinaryReader reader)
|
public DenseClip(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_FrameCount = reader.ReadInt32();
|
m_FrameCount = reader.ReadInt32();
|
||||||
m_CurveCount = reader.ReadUInt32();
|
m_CurveCount = reader.ReadUInt32();
|
||||||
|
@ -586,7 +586,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public float[] data { get; set; }
|
public float[] data { get; set; }
|
||||||
|
|
||||||
public ConstantClip(EndianBinaryReader reader)
|
public ConstantClip(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numData = reader.ReadInt32();
|
int numData = reader.ReadInt32();
|
||||||
data = reader.ReadSingleArray(numData);
|
data = reader.ReadSingleArray(numData);
|
||||||
|
@ -600,8 +600,9 @@ namespace AssetStudio
|
||||||
public uint m_Type { get; set; }
|
public uint m_Type { get; set; }
|
||||||
public uint m_Index { get; set; }
|
public uint m_Index { get; set; }
|
||||||
|
|
||||||
public ValueConstant(EndianBinaryReader reader, int[] version)
|
public ValueConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
m_ID = reader.ReadUInt32();
|
m_ID = reader.ReadUInt32();
|
||||||
if (version[0] < 5 || (version[0] == 5 && version[1] < 5))//5.5 down
|
if (version[0] < 5 || (version[0] == 5 && version[1] < 5))//5.5 down
|
||||||
{
|
{
|
||||||
|
@ -616,13 +617,13 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public List<ValueConstant> m_ValueArray { get; set; }
|
public List<ValueConstant> m_ValueArray { get; set; }
|
||||||
|
|
||||||
public ValueArrayConstant(EndianBinaryReader reader, int[] version)
|
public ValueArrayConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numVals = reader.ReadInt32();
|
int numVals = reader.ReadInt32();
|
||||||
m_ValueArray = new List<ValueConstant>(numVals);
|
m_ValueArray = new List<ValueConstant>(numVals);
|
||||||
for (int i = 0; i < numVals; i++)
|
for (int i = 0; i < numVals; i++)
|
||||||
{
|
{
|
||||||
m_ValueArray.Add(new ValueConstant(reader, version));
|
m_ValueArray.Add(new ValueConstant(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -634,15 +635,16 @@ namespace AssetStudio
|
||||||
public ConstantClip m_ConstantClip { get; set; }
|
public ConstantClip m_ConstantClip { get; set; }
|
||||||
public ValueArrayConstant m_Binding { get; set; }
|
public ValueArrayConstant m_Binding { get; set; }
|
||||||
|
|
||||||
public Clip(EndianBinaryReader reader, int[] version)
|
public Clip(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
m_StreamedClip = new StreamedClip(reader);
|
m_StreamedClip = new StreamedClip(reader);
|
||||||
m_DenseClip = new DenseClip(reader);
|
m_DenseClip = new DenseClip(reader);
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
m_ConstantClip = new ConstantClip(reader);
|
m_ConstantClip = new ConstantClip(reader);
|
||||||
}
|
}
|
||||||
m_Binding = new ValueArrayConstant(reader, version);
|
m_Binding = new ValueArrayConstant(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,7 +653,7 @@ namespace AssetStudio
|
||||||
public float m_Start { get; set; }
|
public float m_Start { get; set; }
|
||||||
public float m_Stop { get; set; }
|
public float m_Stop { get; set; }
|
||||||
|
|
||||||
public ValueDelta(EndianBinaryReader reader)
|
public ValueDelta(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_Start = reader.ReadSingle();
|
m_Start = reader.ReadSingle();
|
||||||
m_Stop = reader.ReadSingle();
|
m_Stop = reader.ReadSingle();
|
||||||
|
@ -690,23 +692,24 @@ namespace AssetStudio
|
||||||
public bool m_KeepOriginalPositionXZ { get; set; }
|
public bool m_KeepOriginalPositionXZ { get; set; }
|
||||||
public bool m_HeightFromFeet { get; set; }
|
public bool m_HeightFromFeet { get; set; }
|
||||||
|
|
||||||
public ClipMuscleConstant(EndianBinaryReader reader, int[] version)
|
public ClipMuscleConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_DeltaPose = new HumanPose(reader, version);
|
var version = reader.version;
|
||||||
m_StartX = new xform(reader, version);
|
m_DeltaPose = new HumanPose(reader);
|
||||||
|
m_StartX = new xform(reader);
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||||
{
|
{
|
||||||
m_StopX = new xform(reader, version);
|
m_StopX = new xform(reader);
|
||||||
}
|
}
|
||||||
m_LeftFootStartX = new xform(reader, version);
|
m_LeftFootStartX = new xform(reader);
|
||||||
m_RightFootStartX = new xform(reader, version);
|
m_RightFootStartX = new xform(reader);
|
||||||
if (version[0] < 5)//5.0 down
|
if (version[0] < 5)//5.0 down
|
||||||
{
|
{
|
||||||
m_MotionStartX = new xform(reader, version);
|
m_MotionStartX = new xform(reader);
|
||||||
m_MotionStopX = new xform(reader, version);
|
m_MotionStopX = new xform(reader);
|
||||||
}
|
}
|
||||||
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||||
m_Clip = new Clip(reader, version);
|
m_Clip = new Clip(reader);
|
||||||
m_StartTime = reader.ReadSingle();
|
m_StartTime = reader.ReadSingle();
|
||||||
m_StopTime = reader.ReadSingle();
|
m_StopTime = reader.ReadSingle();
|
||||||
m_OrientationOffsetY = reader.ReadSingle();
|
m_OrientationOffsetY = reader.ReadSingle();
|
||||||
|
@ -763,13 +766,12 @@ namespace AssetStudio
|
||||||
public byte customType { get; set; }
|
public byte customType { get; set; }
|
||||||
public byte isPPtrCurve { get; set; }
|
public byte isPPtrCurve { get; set; }
|
||||||
|
|
||||||
public GenericBinding(AssetPreloadData preloadData)
|
public GenericBinding(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var reader = preloadData.sourceFile.reader;
|
var version = reader.version;
|
||||||
var version = preloadData.sourceFile.version;
|
|
||||||
path = reader.ReadUInt32();
|
path = reader.ReadUInt32();
|
||||||
attribute = reader.ReadUInt32();
|
attribute = reader.ReadUInt32();
|
||||||
script = preloadData.sourceFile.ReadPPtr();
|
script = reader.ReadPPtr();
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
||||||
{
|
{
|
||||||
typeID = reader.ReadInt32();
|
typeID = reader.ReadInt32();
|
||||||
|
@ -789,21 +791,20 @@ namespace AssetStudio
|
||||||
public List<GenericBinding> genericBindings { get; set; }
|
public List<GenericBinding> genericBindings { get; set; }
|
||||||
public List<PPtr> pptrCurveMapping { get; set; }
|
public List<PPtr> pptrCurveMapping { get; set; }
|
||||||
|
|
||||||
public AnimationClipBindingConstant(AssetPreloadData preloadData)
|
public AnimationClipBindingConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var reader = preloadData.sourceFile.reader;
|
|
||||||
int numBindings = reader.ReadInt32();
|
int numBindings = reader.ReadInt32();
|
||||||
genericBindings = new List<GenericBinding>(numBindings);
|
genericBindings = new List<GenericBinding>(numBindings);
|
||||||
for (int i = 0; i < numBindings; i++)
|
for (int i = 0; i < numBindings; i++)
|
||||||
{
|
{
|
||||||
genericBindings.Add(new GenericBinding(preloadData));
|
genericBindings.Add(new GenericBinding(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numMappings = reader.ReadInt32();
|
int numMappings = reader.ReadInt32();
|
||||||
pptrCurveMapping = new List<PPtr>(numMappings);
|
pptrCurveMapping = new List<PPtr>(numMappings);
|
||||||
for (int i = 0; i < numMappings; i++)
|
for (int i = 0; i < numMappings; i++)
|
||||||
{
|
{
|
||||||
pptrCurveMapping.Add(preloadData.sourceFile.ReadPPtr());
|
pptrCurveMapping.Add(reader.ReadPPtr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -852,7 +853,7 @@ namespace AssetStudio
|
||||||
//public List<AnimationEvent> m_Events { get; set; }
|
//public List<AnimationEvent> m_Events { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public AnimationClip(AssetPreloadData preloadData) : base(preloadData)
|
public AnimationClip(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] >= 5)//5.0 and up
|
if (version[0] >= 5)//5.0 and up
|
||||||
{
|
{
|
||||||
|
@ -878,7 +879,7 @@ namespace AssetStudio
|
||||||
m_RotationCurves = new List<QuaternionCurve>(numRCurves);
|
m_RotationCurves = new List<QuaternionCurve>(numRCurves);
|
||||||
for (int i = 0; i < numRCurves; i++)
|
for (int i = 0; i < numRCurves; i++)
|
||||||
{
|
{
|
||||||
m_RotationCurves.Add(new QuaternionCurve(reader, version));
|
m_RotationCurves.Add(new QuaternionCurve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numCRCurves = reader.ReadInt32();
|
int numCRCurves = reader.ReadInt32();
|
||||||
|
@ -894,7 +895,7 @@ namespace AssetStudio
|
||||||
m_EulerCurves = new List<Vector3Curve>(numEulerCurves);
|
m_EulerCurves = new List<Vector3Curve>(numEulerCurves);
|
||||||
for (int i = 0; i < numEulerCurves; i++)
|
for (int i = 0; i < numEulerCurves; i++)
|
||||||
{
|
{
|
||||||
m_EulerCurves.Add(new Vector3Curve(reader, version));
|
m_EulerCurves.Add(new Vector3Curve(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -902,21 +903,21 @@ namespace AssetStudio
|
||||||
m_PositionCurves = new List<Vector3Curve>(numPCurves);
|
m_PositionCurves = new List<Vector3Curve>(numPCurves);
|
||||||
for (int i = 0; i < numPCurves; i++)
|
for (int i = 0; i < numPCurves; i++)
|
||||||
{
|
{
|
||||||
m_PositionCurves.Add(new Vector3Curve(reader, version));
|
m_PositionCurves.Add(new Vector3Curve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numSCurves = reader.ReadInt32();
|
int numSCurves = reader.ReadInt32();
|
||||||
m_ScaleCurves = new List<Vector3Curve>(numSCurves);
|
m_ScaleCurves = new List<Vector3Curve>(numSCurves);
|
||||||
for (int i = 0; i < numSCurves; i++)
|
for (int i = 0; i < numSCurves; i++)
|
||||||
{
|
{
|
||||||
m_ScaleCurves.Add(new Vector3Curve(reader, version));
|
m_ScaleCurves.Add(new Vector3Curve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numFCurves = reader.ReadInt32();
|
int numFCurves = reader.ReadInt32();
|
||||||
m_FloatCurves = new List<FloatCurve>(numFCurves);
|
m_FloatCurves = new List<FloatCurve>(numFCurves);
|
||||||
for (int i = 0; i < numFCurves; i++)
|
for (int i = 0; i < numFCurves; i++)
|
||||||
{
|
{
|
||||||
m_FloatCurves.Add(new FloatCurve(preloadData));
|
m_FloatCurves.Add(new FloatCurve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
|
@ -925,7 +926,7 @@ namespace AssetStudio
|
||||||
m_PPtrCurves = new List<PPtrCurve>(numPtrCurves);
|
m_PPtrCurves = new List<PPtrCurve>(numPtrCurves);
|
||||||
for (int i = 0; i < numPtrCurves; i++)
|
for (int i = 0; i < numPtrCurves; i++)
|
||||||
{
|
{
|
||||||
m_PPtrCurves.Add(new PPtrCurve(preloadData));
|
m_PPtrCurves.Add(new PPtrCurve(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -938,11 +939,11 @@ namespace AssetStudio
|
||||||
if (version[0] >= 4)//4.0 and up
|
if (version[0] >= 4)//4.0 and up
|
||||||
{
|
{
|
||||||
m_MuscleClipSize = reader.ReadUInt32();
|
m_MuscleClipSize = reader.ReadUInt32();
|
||||||
m_MuscleClip = new ClipMuscleConstant(reader, version);
|
m_MuscleClip = new ClipMuscleConstant(reader);
|
||||||
}
|
}
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
m_ClipBindingConstant = new AnimationClipBindingConstant(preloadData);
|
m_ClipBindingConstant = new AnimationClipBindingConstant(reader);
|
||||||
}
|
}
|
||||||
/*int numEvents = reader.ReadInt32();
|
/*int numEvents = reader.ReadInt32();
|
||||||
m_Events = new List<AnimationEvent>(numEvents);
|
m_Events = new List<AnimationEvent>(numEvents);
|
||||||
|
|
|
@ -11,10 +11,10 @@ namespace AssetStudio
|
||||||
public PPtr m_Controller;
|
public PPtr m_Controller;
|
||||||
public bool m_HasTransformHierarchy;
|
public bool m_HasTransformHierarchy;
|
||||||
|
|
||||||
public Animator(AssetPreloadData preloadData) : base(preloadData)
|
public Animator(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Avatar = sourceFile.ReadPPtr();
|
m_Avatar = reader.ReadPPtr();
|
||||||
m_Controller = sourceFile.ReadPPtr();
|
m_Controller = reader.ReadPPtr();
|
||||||
var m_CullingMode = reader.ReadInt32();
|
var m_CullingMode = reader.ReadInt32();
|
||||||
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up
|
||||||
|
|
|
@ -12,11 +12,11 @@ namespace AssetStudio
|
||||||
public uint word1 { get; set; }
|
public uint word1 { get; set; }
|
||||||
public uint word2 { get; set; }
|
public uint word2 { get; set; }
|
||||||
|
|
||||||
public HumanPoseMask(EndianBinaryReader reader, int[] version)
|
public HumanPoseMask(ObjectReader reader)
|
||||||
{
|
{
|
||||||
word0 = reader.ReadUInt32();
|
word0 = reader.ReadUInt32();
|
||||||
word1 = reader.ReadUInt32();
|
word1 = reader.ReadUInt32();
|
||||||
if (version[0] >= 5) //5.0 and up
|
if (reader.version[0] >= 5) //5.0 and up
|
||||||
{
|
{
|
||||||
word2 = reader.ReadUInt32();
|
word2 = reader.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ namespace AssetStudio
|
||||||
public uint m_PathHash { get; set; }
|
public uint m_PathHash { get; set; }
|
||||||
public float m_Weight { get; set; }
|
public float m_Weight { get; set; }
|
||||||
|
|
||||||
public SkeletonMaskElement(EndianBinaryReader reader)
|
public SkeletonMaskElement(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_PathHash = reader.ReadUInt32();
|
m_PathHash = reader.ReadUInt32();
|
||||||
m_Weight = reader.ReadSingle();
|
m_Weight = reader.ReadSingle();
|
||||||
|
@ -39,7 +39,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public SkeletonMaskElement[] m_Data { get; set; }
|
public SkeletonMaskElement[] m_Data { get; set; }
|
||||||
|
|
||||||
public SkeletonMask(EndianBinaryReader reader)
|
public SkeletonMask(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numElements = reader.ReadInt32();
|
int numElements = reader.ReadInt32();
|
||||||
m_Data = new SkeletonMaskElement[numElements];
|
m_Data = new SkeletonMaskElement[numElements];
|
||||||
|
@ -62,11 +62,11 @@ namespace AssetStudio
|
||||||
public bool m_IKPass { get; set; }
|
public bool m_IKPass { get; set; }
|
||||||
public bool m_SyncedLayerAffectsTiming { get; set; }
|
public bool m_SyncedLayerAffectsTiming { get; set; }
|
||||||
|
|
||||||
public LayerConstant(EndianBinaryReader reader, int[] version)
|
public LayerConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_StateMachineIndex = reader.ReadUInt32();
|
m_StateMachineIndex = reader.ReadUInt32();
|
||||||
m_StateMachineMotionSetIndex = reader.ReadUInt32();
|
m_StateMachineMotionSetIndex = reader.ReadUInt32();
|
||||||
m_BodyMask = new HumanPoseMask(reader, version);
|
m_BodyMask = new HumanPoseMask(reader);
|
||||||
m_SkeletonMask = new SkeletonMask(reader);
|
m_SkeletonMask = new SkeletonMask(reader);
|
||||||
m_Binding = reader.ReadUInt32();
|
m_Binding = reader.ReadUInt32();
|
||||||
m_LayerBlendingMode = reader.ReadInt32();
|
m_LayerBlendingMode = reader.ReadInt32();
|
||||||
|
@ -84,7 +84,7 @@ namespace AssetStudio
|
||||||
public float m_EventThreshold { get; set; }
|
public float m_EventThreshold { get; set; }
|
||||||
public float m_ExitTime { get; set; }
|
public float m_ExitTime { get; set; }
|
||||||
|
|
||||||
public ConditionConstant(EndianBinaryReader reader)
|
public ConditionConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_ConditionMode = reader.ReadUInt32();
|
m_ConditionMode = reader.ReadUInt32();
|
||||||
m_EventID = reader.ReadUInt32();
|
m_EventID = reader.ReadUInt32();
|
||||||
|
@ -110,8 +110,9 @@ namespace AssetStudio
|
||||||
public bool m_Atomic { get; set; }
|
public bool m_Atomic { get; set; }
|
||||||
public bool m_CanTransitionToSelf { get; set; }
|
public bool m_CanTransitionToSelf { get; set; }
|
||||||
|
|
||||||
public TransitionConstant(EndianBinaryReader reader, int[] version)
|
public TransitionConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
int numConditions = reader.ReadInt32();
|
int numConditions = reader.ReadInt32();
|
||||||
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
||||||
for (int i = 0; i < numConditions; i++)
|
for (int i = 0; i < numConditions; i++)
|
||||||
|
@ -153,7 +154,7 @@ namespace AssetStudio
|
||||||
public uint[] m_IDArray { get; set; }
|
public uint[] m_IDArray { get; set; }
|
||||||
public uint m_IndexOffset { get; set; }
|
public uint m_IndexOffset { get; set; }
|
||||||
|
|
||||||
public LeafInfoConstant(EndianBinaryReader reader)
|
public LeafInfoConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_IDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
m_IDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||||
m_IndexOffset = reader.ReadUInt32();
|
m_IndexOffset = reader.ReadUInt32();
|
||||||
|
@ -164,7 +165,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public uint[] m_NeighborArray { get; set; }
|
public uint[] m_NeighborArray { get; set; }
|
||||||
|
|
||||||
public MotionNeighborList(EndianBinaryReader reader)
|
public MotionNeighborList(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_NeighborArray = reader.ReadUInt32Array(reader.ReadInt32());
|
m_NeighborArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||||
}
|
}
|
||||||
|
@ -178,7 +179,7 @@ namespace AssetStudio
|
||||||
public float[] m_ChildPairAvgMagInvArray { get; set; }
|
public float[] m_ChildPairAvgMagInvArray { get; set; }
|
||||||
public MotionNeighborList[] m_ChildNeighborListArray { get; set; }
|
public MotionNeighborList[] m_ChildNeighborListArray { get; set; }
|
||||||
|
|
||||||
public Blend2dDataConstant(EndianBinaryReader reader)
|
public Blend2dDataConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_ChildPositionArray = reader.ReadVector2Array(reader.ReadInt32());
|
m_ChildPositionArray = reader.ReadVector2Array(reader.ReadInt32());
|
||||||
m_ChildMagnitudeArray = reader.ReadSingleArray(reader.ReadInt32());
|
m_ChildMagnitudeArray = reader.ReadSingleArray(reader.ReadInt32());
|
||||||
|
@ -198,7 +199,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public float[] m_ChildThresholdArray { get; set; }
|
public float[] m_ChildThresholdArray { get; set; }
|
||||||
|
|
||||||
public Blend1dDataConstant(EndianBinaryReader reader)
|
public Blend1dDataConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_ChildThresholdArray = reader.ReadSingleArray(reader.ReadInt32());
|
m_ChildThresholdArray = reader.ReadSingleArray(reader.ReadInt32());
|
||||||
}
|
}
|
||||||
|
@ -209,7 +210,7 @@ namespace AssetStudio
|
||||||
public uint[] m_ChildBlendEventIDArray { get; set; }
|
public uint[] m_ChildBlendEventIDArray { get; set; }
|
||||||
public bool m_NormalizedBlendValues { get; set; }
|
public bool m_NormalizedBlendValues { get; set; }
|
||||||
|
|
||||||
public BlendDirectDataConstant(EndianBinaryReader reader)
|
public BlendDirectDataConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_ChildBlendEventIDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
m_ChildBlendEventIDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||||
m_NormalizedBlendValues = reader.ReadBoolean();
|
m_NormalizedBlendValues = reader.ReadBoolean();
|
||||||
|
@ -232,8 +233,9 @@ namespace AssetStudio
|
||||||
public float m_CycleOffset { get; set; }
|
public float m_CycleOffset { get; set; }
|
||||||
public bool m_Mirror { get; set; }
|
public bool m_Mirror { get; set; }
|
||||||
|
|
||||||
public BlendTreeNodeConstant(EndianBinaryReader reader, int[] version)
|
public BlendTreeNodeConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
m_BlendType = reader.ReadUInt32();
|
m_BlendType = reader.ReadUInt32();
|
||||||
m_BlendEventID = reader.ReadUInt32();
|
m_BlendEventID = reader.ReadUInt32();
|
||||||
m_BlendEventYID = reader.ReadUInt32();
|
m_BlendEventYID = reader.ReadUInt32();
|
||||||
|
@ -262,13 +264,13 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public BlendTreeNodeConstant[] m_NodeArray { get; set; }
|
public BlendTreeNodeConstant[] m_NodeArray { get; set; }
|
||||||
|
|
||||||
public BlendTreeConstant(EndianBinaryReader reader, int[] version)
|
public BlendTreeConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numNodes = reader.ReadInt32();
|
int numNodes = reader.ReadInt32();
|
||||||
m_NodeArray = new BlendTreeNodeConstant[numNodes];
|
m_NodeArray = new BlendTreeNodeConstant[numNodes];
|
||||||
for (int i = 0; i < numNodes; i++)
|
for (int i = 0; i < numNodes; i++)
|
||||||
{
|
{
|
||||||
m_NodeArray[i] = new BlendTreeNodeConstant(reader, version);
|
m_NodeArray[i] = new BlendTreeNodeConstant(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -294,13 +296,14 @@ namespace AssetStudio
|
||||||
public bool m_Loop { get; set; }
|
public bool m_Loop { get; set; }
|
||||||
public bool m_Mirror { get; set; }
|
public bool m_Mirror { get; set; }
|
||||||
|
|
||||||
public StateConstant(EndianBinaryReader reader, int[] version)
|
public StateConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
int numTransistions = reader.ReadInt32();
|
int numTransistions = reader.ReadInt32();
|
||||||
m_TransitionConstantArray = new TransitionConstant[numTransistions];
|
m_TransitionConstantArray = new TransitionConstant[numTransistions];
|
||||||
for (int i = 0; i < numTransistions; i++)
|
for (int i = 0; i < numTransistions; i++)
|
||||||
{
|
{
|
||||||
m_TransitionConstantArray[i] = new TransitionConstant(reader, version);
|
m_TransitionConstantArray[i] = new TransitionConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numBlendIndices = reader.ReadInt32();
|
int numBlendIndices = reader.ReadInt32();
|
||||||
|
@ -324,7 +327,7 @@ namespace AssetStudio
|
||||||
m_BlendTreeConstantArray = new BlendTreeConstant[numBlends];
|
m_BlendTreeConstantArray = new BlendTreeConstant[numBlends];
|
||||||
for (int i = 0; i < numBlends; i++)
|
for (int i = 0; i < numBlends; i++)
|
||||||
{
|
{
|
||||||
m_BlendTreeConstantArray[i] = new BlendTreeConstant(reader, version);
|
m_BlendTreeConstantArray[i] = new BlendTreeConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_NameID = reader.ReadUInt32();
|
m_NameID = reader.ReadUInt32();
|
||||||
|
@ -366,7 +369,7 @@ namespace AssetStudio
|
||||||
public uint m_Destination { get; set; }
|
public uint m_Destination { get; set; }
|
||||||
public ConditionConstant[] m_ConditionConstantArray { get; set; }
|
public ConditionConstant[] m_ConditionConstantArray { get; set; }
|
||||||
|
|
||||||
public SelectorTransitionConstant(EndianBinaryReader reader)
|
public SelectorTransitionConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_Destination = reader.ReadUInt32();
|
m_Destination = reader.ReadUInt32();
|
||||||
|
|
||||||
|
@ -385,7 +388,7 @@ namespace AssetStudio
|
||||||
public uint m_FullPathID { get; set; }
|
public uint m_FullPathID { get; set; }
|
||||||
public bool m_isEntry { get; set; }
|
public bool m_isEntry { get; set; }
|
||||||
|
|
||||||
public SelectorStateConstant(EndianBinaryReader reader)
|
public SelectorStateConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numTransitions = reader.ReadInt32();
|
int numTransitions = reader.ReadInt32();
|
||||||
m_TransitionConstantArray = new SelectorTransitionConstant[numTransitions];
|
m_TransitionConstantArray = new SelectorTransitionConstant[numTransitions];
|
||||||
|
@ -408,20 +411,21 @@ namespace AssetStudio
|
||||||
public uint m_DefaultState { get; set; }
|
public uint m_DefaultState { get; set; }
|
||||||
public uint m_MotionSetCount { get; set; }
|
public uint m_MotionSetCount { get; set; }
|
||||||
|
|
||||||
public StateMachineConstant(EndianBinaryReader reader, int[] version)
|
public StateMachineConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
int numStates = reader.ReadInt32();
|
int numStates = reader.ReadInt32();
|
||||||
m_StateConstantArray = new StateConstant[numStates];
|
m_StateConstantArray = new StateConstant[numStates];
|
||||||
for (int i = 0; i < numStates; i++)
|
for (int i = 0; i < numStates; i++)
|
||||||
{
|
{
|
||||||
m_StateConstantArray[i] = new StateConstant(reader, version);
|
m_StateConstantArray[i] = new StateConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numAnyStates = reader.ReadInt32();
|
int numAnyStates = reader.ReadInt32();
|
||||||
m_AnyStateTransitionConstantArray = new TransitionConstant[numAnyStates];
|
m_AnyStateTransitionConstantArray = new TransitionConstant[numAnyStates];
|
||||||
for (int i = 0; i < numAnyStates; i++)
|
for (int i = 0; i < numAnyStates; i++)
|
||||||
{
|
{
|
||||||
m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader, version);
|
m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] >= 5) //5.0 and up
|
if (version[0] >= 5) //5.0 and up
|
||||||
|
@ -448,8 +452,9 @@ namespace AssetStudio
|
||||||
public Vector4[] m_QuaternionValues { get; set; }
|
public Vector4[] m_QuaternionValues { get; set; }
|
||||||
public object[] m_ScaleValues { get; set; }
|
public object[] m_ScaleValues { get; set; }
|
||||||
|
|
||||||
public ValueArray(EndianBinaryReader reader, int[] version)
|
public ValueArray(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
if (version[0] < 5 || (version[0] == 5 && version[1] < 5)) //5.5 down
|
if (version[0] < 5 || (version[0] == 5 && version[1] < 5)) //5.5 down
|
||||||
{
|
{
|
||||||
int numBools = reader.ReadInt32();
|
int numBools = reader.ReadInt32();
|
||||||
|
@ -505,24 +510,24 @@ namespace AssetStudio
|
||||||
public ValueArrayConstant m_Values { get; set; }
|
public ValueArrayConstant m_Values { get; set; }
|
||||||
public ValueArray m_DefaultValues { get; set; }
|
public ValueArray m_DefaultValues { get; set; }
|
||||||
|
|
||||||
public ControllerConstant(EndianBinaryReader reader, int[] version)
|
public ControllerConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numLayers = reader.ReadInt32();
|
int numLayers = reader.ReadInt32();
|
||||||
m_LayerArray = new LayerConstant[numLayers];
|
m_LayerArray = new LayerConstant[numLayers];
|
||||||
for (int i = 0; i < numLayers; i++)
|
for (int i = 0; i < numLayers; i++)
|
||||||
{
|
{
|
||||||
m_LayerArray[i] = new LayerConstant(reader, version);
|
m_LayerArray[i] = new LayerConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numStates = reader.ReadInt32();
|
int numStates = reader.ReadInt32();
|
||||||
m_StateMachineArray = new StateMachineConstant[numStates];
|
m_StateMachineArray = new StateMachineConstant[numStates];
|
||||||
for (int i = 0; i < numStates; i++)
|
for (int i = 0; i < numStates; i++)
|
||||||
{
|
{
|
||||||
m_StateMachineArray[i] = new StateMachineConstant(reader, version);
|
m_StateMachineArray[i] = new StateMachineConstant(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Values = new ValueArrayConstant(reader, version);
|
m_Values = new ValueArrayConstant(reader);
|
||||||
m_DefaultValues = new ValueArray(reader, version);
|
m_DefaultValues = new ValueArray(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,10 +535,10 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public PPtr[] m_AnimationClips;
|
public PPtr[] m_AnimationClips;
|
||||||
|
|
||||||
public AnimatorController(AssetPreloadData preloadData) : base(preloadData)
|
public AnimatorController(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_ControllerSize = reader.ReadUInt32();
|
var m_ControllerSize = reader.ReadUInt32();
|
||||||
var m_Controller = new ControllerConstant(reader, version);
|
var m_Controller = new ControllerConstant(reader);
|
||||||
|
|
||||||
int tosSize = reader.ReadInt32();
|
int tosSize = reader.ReadInt32();
|
||||||
var m_TOS = new List<KeyValuePair<uint, string>>(tosSize);
|
var m_TOS = new List<KeyValuePair<uint, string>>(tosSize);
|
||||||
|
@ -546,7 +551,7 @@ namespace AssetStudio
|
||||||
m_AnimationClips = new PPtr[numClips];
|
m_AnimationClips = new PPtr[numClips];
|
||||||
for (int i = 0; i < numClips; i++)
|
for (int i = 0; i < numClips; i++)
|
||||||
{
|
{
|
||||||
m_AnimationClips[i] = sourceFile.ReadPPtr();
|
m_AnimationClips[i] = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,17 +10,17 @@ namespace AssetStudio
|
||||||
public PPtr m_Controller;
|
public PPtr m_Controller;
|
||||||
public PPtr[][] m_Clips;
|
public PPtr[][] m_Clips;
|
||||||
|
|
||||||
public AnimatorOverrideController(AssetPreloadData preloadData) : base(preloadData)
|
public AnimatorOverrideController(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Controller = sourceFile.ReadPPtr();
|
m_Controller = reader.ReadPPtr();
|
||||||
|
|
||||||
int numOverrides = reader.ReadInt32();
|
int numOverrides = reader.ReadInt32();
|
||||||
m_Clips = new PPtr[numOverrides][];
|
m_Clips = new PPtr[numOverrides][];
|
||||||
for (int i = 0; i < numOverrides; i++)
|
for (int i = 0; i < numOverrides; i++)
|
||||||
{
|
{
|
||||||
m_Clips[i] = new PPtr[2];
|
m_Clips[i] = new PPtr[2];
|
||||||
m_Clips[i][0] = sourceFile.ReadPPtr();
|
m_Clips[i][0] = reader.ReadPPtr();
|
||||||
m_Clips[i][1] = sourceFile.ReadPPtr();
|
m_Clips[i][1] = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,12 +23,12 @@ namespace AssetStudio
|
||||||
|
|
||||||
public List<ContainerData> m_Container = new List<ContainerData>();
|
public List<ContainerData> m_Container = new List<ContainerData>();
|
||||||
|
|
||||||
public AssetBundle(AssetPreloadData preloadData) : base(preloadData)
|
public AssetBundle(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var size = reader.ReadInt32();
|
var size = reader.ReadInt32();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
sourceFile.ReadPPtr();
|
reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
size = reader.ReadInt32();
|
size = reader.ReadInt32();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
@ -38,7 +38,7 @@ namespace AssetStudio
|
||||||
temp.second = new AssetInfo();
|
temp.second = new AssetInfo();
|
||||||
temp.second.preloadIndex = reader.ReadInt32();
|
temp.second.preloadIndex = reader.ReadInt32();
|
||||||
temp.second.preloadSize = reader.ReadInt32();
|
temp.second.preloadSize = reader.ReadInt32();
|
||||||
temp.second.asset = sourceFile.ReadPPtr();
|
temp.second.asset = reader.ReadPPtr();
|
||||||
m_Container.Add(temp);
|
m_Container.Add(temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace AssetStudio
|
||||||
public long m_Size;
|
public long m_Size;
|
||||||
public byte[] m_AudioData;
|
public byte[] m_AudioData;
|
||||||
|
|
||||||
public AudioClip(AssetPreloadData preloadData, bool readData) : base(preloadData)
|
public AudioClip(ObjectReader reader, bool readData) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] < 5)
|
if (version[0] < 5)
|
||||||
{
|
{
|
||||||
|
@ -46,7 +46,7 @@ namespace AssetStudio
|
||||||
int m_Stream = reader.ReadInt32();
|
int m_Stream = reader.ReadInt32();
|
||||||
m_Size = reader.ReadInt32();
|
m_Size = reader.ReadInt32();
|
||||||
var tsize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size;
|
var tsize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size;
|
||||||
if (preloadData.Size + preloadData.Offset - reader.Position != tsize)
|
if (reader.byteSize + reader.byteStart - reader.Position != tsize)
|
||||||
{
|
{
|
||||||
m_Offset = reader.ReadInt32();
|
m_Offset = reader.ReadInt32();
|
||||||
m_Source = sourceFile.filePath + ".resS";
|
m_Source = sourceFile.filePath + ".resS";
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace AssetStudio
|
||||||
public int m_ParentId { get; set; }
|
public int m_ParentId { get; set; }
|
||||||
public int m_AxesId { get; set; }
|
public int m_AxesId { get; set; }
|
||||||
|
|
||||||
public Node(EndianBinaryReader reader)
|
public Node(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_ParentId = reader.ReadInt32();
|
m_ParentId = reader.ReadInt32();
|
||||||
m_AxesId = reader.ReadInt32();
|
m_AxesId = reader.ReadInt32();
|
||||||
|
@ -20,8 +20,9 @@ namespace AssetStudio
|
||||||
public object m_Min { get; set; }
|
public object m_Min { get; set; }
|
||||||
public object m_Max { get; set; }
|
public object m_Max { get; set; }
|
||||||
|
|
||||||
public Limit(EndianBinaryReader reader, int[] version)
|
public Limit(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||||
{
|
{
|
||||||
m_Min = reader.ReadVector3();
|
m_Min = reader.ReadVector3();
|
||||||
|
@ -44,8 +45,9 @@ namespace AssetStudio
|
||||||
public float m_Length { get; set; }
|
public float m_Length { get; set; }
|
||||||
public uint m_Type { get; set; }
|
public uint m_Type { get; set; }
|
||||||
|
|
||||||
public Axes(EndianBinaryReader reader, int[] version)
|
public Axes(ObjectReader reader)
|
||||||
{
|
{
|
||||||
|
var version = reader.version;
|
||||||
m_PreQ = reader.ReadVector4();
|
m_PreQ = reader.ReadVector4();
|
||||||
m_PostQ = reader.ReadVector4();
|
m_PostQ = reader.ReadVector4();
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
||||||
|
@ -56,7 +58,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
m_Sgn = reader.ReadVector4();
|
m_Sgn = reader.ReadVector4();
|
||||||
}
|
}
|
||||||
m_Limit = new Limit(reader, version);
|
m_Limit = new Limit(reader);
|
||||||
m_Length = reader.ReadSingle();
|
m_Length = reader.ReadSingle();
|
||||||
m_Type = reader.ReadUInt32();
|
m_Type = reader.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
@ -69,7 +71,7 @@ namespace AssetStudio
|
||||||
public List<Axes> m_AxesArray { get; set; }
|
public List<Axes> m_AxesArray { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public Skeleton(EndianBinaryReader reader, int[] version)
|
public Skeleton(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numNodes = reader.ReadInt32();
|
int numNodes = reader.ReadInt32();
|
||||||
m_Node = new List<Node>(numNodes);
|
m_Node = new List<Node>(numNodes);
|
||||||
|
@ -89,7 +91,7 @@ namespace AssetStudio
|
||||||
m_AxesArray = new List<Axes>(numAxes);
|
m_AxesArray = new List<Axes>(numAxes);
|
||||||
for (int i = 0; i < numAxes; i++)
|
for (int i = 0; i < numAxes; i++)
|
||||||
{
|
{
|
||||||
m_AxesArray.Add(new Axes(reader, version));
|
m_AxesArray.Add(new Axes(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,13 +105,13 @@ namespace AssetStudio
|
||||||
m_X = new List<xform>();
|
m_X = new List<xform>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SkeletonPose(EndianBinaryReader reader, int[] version)
|
public SkeletonPose(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numXforms = reader.ReadInt32();
|
int numXforms = reader.ReadInt32();
|
||||||
m_X = new List<xform>(numXforms);
|
m_X = new List<xform>(numXforms);
|
||||||
for (int i = 0; i < numXforms; i++)
|
for (int i = 0; i < numXforms; i++)
|
||||||
{
|
{
|
||||||
m_X.Add(new xform(reader, version));
|
m_X.Add(new xform(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,7 +120,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public List<int> m_HandBoneIndex { get; set; }
|
public List<int> m_HandBoneIndex { get; set; }
|
||||||
|
|
||||||
public Hand(EndianBinaryReader reader)
|
public Hand(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numIndexes = reader.ReadInt32();
|
int numIndexes = reader.ReadInt32();
|
||||||
m_HandBoneIndex = new List<int>(numIndexes);
|
m_HandBoneIndex = new List<int>(numIndexes);
|
||||||
|
@ -135,9 +137,9 @@ namespace AssetStudio
|
||||||
public uint m_ParentHumanIndex { get; set; }
|
public uint m_ParentHumanIndex { get; set; }
|
||||||
public uint m_ID { get; set; }
|
public uint m_ID { get; set; }
|
||||||
|
|
||||||
public Handle(EndianBinaryReader reader, int[] version)
|
public Handle(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_X = new xform(reader, version);
|
m_X = new xform(reader);
|
||||||
m_ParentHumanIndex = reader.ReadUInt32();
|
m_ParentHumanIndex = reader.ReadUInt32();
|
||||||
m_ID = reader.ReadUInt32();
|
m_ID = reader.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
@ -155,9 +157,9 @@ namespace AssetStudio
|
||||||
public float m_MaxLimitY { get; set; }
|
public float m_MaxLimitY { get; set; }
|
||||||
public float m_MaxLimitZ { get; set; }
|
public float m_MaxLimitZ { get; set; }
|
||||||
|
|
||||||
public Collider(EndianBinaryReader reader, int[] version)
|
public Collider(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_X = new xform(reader, version);
|
m_X = new xform(reader);
|
||||||
m_Type = reader.ReadUInt32();
|
m_Type = reader.ReadUInt32();
|
||||||
m_XMotionType = reader.ReadUInt32();
|
m_XMotionType = reader.ReadUInt32();
|
||||||
m_YMotionType = reader.ReadUInt32();
|
m_YMotionType = reader.ReadUInt32();
|
||||||
|
@ -193,11 +195,12 @@ namespace AssetStudio
|
||||||
public bool m_HasRightHand { get; set; }
|
public bool m_HasRightHand { get; set; }
|
||||||
public bool m_HasTDoF { get; set; }
|
public bool m_HasTDoF { get; set; }
|
||||||
|
|
||||||
public Human(EndianBinaryReader reader, int[] version)
|
public Human(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_RootX = new xform(reader, version);
|
var version = reader.version;
|
||||||
m_Skeleton = new Skeleton(reader, version);
|
m_RootX = new xform(reader);
|
||||||
m_SkeletonPose = new SkeletonPose(reader, version);
|
m_Skeleton = new Skeleton(reader);
|
||||||
|
m_SkeletonPose = new SkeletonPose(reader);
|
||||||
m_LeftHand = new Hand(reader);
|
m_LeftHand = new Hand(reader);
|
||||||
m_RightHand = new Hand(reader);
|
m_RightHand = new Hand(reader);
|
||||||
|
|
||||||
|
@ -207,14 +210,14 @@ namespace AssetStudio
|
||||||
m_Handles = new List<Handle>(numHandles);
|
m_Handles = new List<Handle>(numHandles);
|
||||||
for (int i = 0; i < numHandles; i++)
|
for (int i = 0; i < numHandles; i++)
|
||||||
{
|
{
|
||||||
m_Handles.Add(new Handle(reader, version));
|
m_Handles.Add(new Handle(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numColliders = reader.ReadInt32();
|
int numColliders = reader.ReadInt32();
|
||||||
m_ColliderArray = new List<Collider>(numColliders);
|
m_ColliderArray = new List<Collider>(numColliders);
|
||||||
for (int i = 0; i < numColliders; i++)
|
for (int i = 0; i < numColliders; i++)
|
||||||
{
|
{
|
||||||
m_ColliderArray.Add(new Collider(reader, version));
|
m_ColliderArray.Add(new Collider(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,14 +275,15 @@ namespace AssetStudio
|
||||||
public SkeletonPose m_RootMotionSkeletonPose { get; set; }
|
public SkeletonPose m_RootMotionSkeletonPose { get; set; }
|
||||||
public List<int> m_RootMotionSkeletonIndexArray { get; set; }
|
public List<int> m_RootMotionSkeletonIndexArray { get; set; }
|
||||||
|
|
||||||
public AvatarConstant(EndianBinaryReader reader, int[] version)
|
public AvatarConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
m_AvatarSkeleton = new Skeleton(reader, version);
|
var version = reader.version;
|
||||||
m_AvatarSkeletonPose = new SkeletonPose(reader, version);
|
m_AvatarSkeleton = new Skeleton(reader);
|
||||||
|
m_AvatarSkeletonPose = new SkeletonPose(reader);
|
||||||
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
m_DefaultPose = new SkeletonPose(reader, version);
|
m_DefaultPose = new SkeletonPose(reader);
|
||||||
int numIDs = reader.ReadInt32();
|
int numIDs = reader.ReadInt32();
|
||||||
m_SkeletonNameIDArray = new List<uint>(numIDs);
|
m_SkeletonNameIDArray = new List<uint>(numIDs);
|
||||||
for (int i = 0; i < numIDs; i++)
|
for (int i = 0; i < numIDs; i++)
|
||||||
|
@ -288,7 +292,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Human = new Human(reader, version);
|
m_Human = new Human(reader);
|
||||||
|
|
||||||
int numIndexes = reader.ReadInt32();
|
int numIndexes = reader.ReadInt32();
|
||||||
m_HumanSkeletonIndexArray = new List<int>(numIndexes);
|
m_HumanSkeletonIndexArray = new List<int>(numIndexes);
|
||||||
|
@ -308,12 +312,12 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
|
|
||||||
m_RootMotionBoneIndex = reader.ReadInt32();
|
m_RootMotionBoneIndex = reader.ReadInt32();
|
||||||
m_RootMotionBoneX = new xform(reader, version);
|
m_RootMotionBoneX = new xform(reader);
|
||||||
|
|
||||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
m_RootMotionSkeleton = new Skeleton(reader, version);
|
m_RootMotionSkeleton = new Skeleton(reader);
|
||||||
m_RootMotionSkeletonPose = new SkeletonPose(reader, version);
|
m_RootMotionSkeletonPose = new SkeletonPose(reader);
|
||||||
|
|
||||||
int numMotionIndexes = reader.ReadInt32();
|
int numMotionIndexes = reader.ReadInt32();
|
||||||
m_RootMotionSkeletonIndexArray = new List<int>(numMotionIndexes);
|
m_RootMotionSkeletonIndexArray = new List<int>(numMotionIndexes);
|
||||||
|
@ -331,10 +335,10 @@ namespace AssetStudio
|
||||||
public AvatarConstant m_Avatar { get; set; }
|
public AvatarConstant m_Avatar { get; set; }
|
||||||
public List<KeyValuePair<uint, string>> m_TOS { get; set; }
|
public List<KeyValuePair<uint, string>> m_TOS { get; set; }
|
||||||
|
|
||||||
public Avatar(AssetPreloadData preloadData) : base(preloadData)
|
public Avatar(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_AvatarSize = reader.ReadUInt32();
|
m_AvatarSize = reader.ReadUInt32();
|
||||||
m_Avatar = new AvatarConstant(reader, version);
|
m_Avatar = new AvatarConstant(reader);
|
||||||
|
|
||||||
int numTOS = reader.ReadInt32();
|
int numTOS = reader.ReadInt32();
|
||||||
m_TOS = new List<KeyValuePair<uint, string>>(numTOS);
|
m_TOS = new List<KeyValuePair<uint, string>>(numTOS);
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public byte m_Enabled;
|
public byte m_Enabled;
|
||||||
|
|
||||||
protected Behaviour(AssetPreloadData preloadData) : base(preloadData)
|
protected Behaviour(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Enabled = reader.ReadByte();
|
m_Enabled = reader.ReadByte();
|
||||||
reader.AlignStream(4);
|
reader.AlignStream(4);
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public string m_Version;
|
public string m_Version;
|
||||||
|
|
||||||
public BuildSettings(AssetPreloadData preloadData) : base(preloadData)
|
public BuildSettings(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
int levelsNum = reader.ReadInt32();
|
int levelsNum = reader.ReadInt32();
|
||||||
for (int i = 0; i < levelsNum; i++)
|
for (int i = 0; i < levelsNum; i++)
|
||||||
|
|
|
@ -9,9 +9,9 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public PPtr m_GameObject;
|
public PPtr m_GameObject;
|
||||||
|
|
||||||
protected Component(AssetPreloadData preloadData) : base(preloadData)
|
protected Component(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_GameObject = sourceFile.ReadPPtr();
|
m_GameObject = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,12 +7,12 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public abstract class EditorExtension : Object
|
public abstract class EditorExtension : Object
|
||||||
{
|
{
|
||||||
protected EditorExtension(AssetPreloadData preloadData) : base(preloadData)
|
protected EditorExtension(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (platform == BuildTarget.NoTarget)
|
if (platform == BuildTarget.NoTarget)
|
||||||
{
|
{
|
||||||
var m_PrefabParentObject = sourceFile.ReadPPtr();
|
var m_PrefabParentObject = reader.ReadPPtr();
|
||||||
var m_PrefabInternal = sourceFile.ReadPPtr();
|
var m_PrefabInternal = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,14 +9,14 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public byte[] m_FontData;
|
public byte[] m_FontData;
|
||||||
|
|
||||||
public Font(AssetPreloadData preloadData) : base(preloadData)
|
public Font(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5 and up
|
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5 and up
|
||||||
{
|
{
|
||||||
var m_LineSpacing = reader.ReadSingle();
|
var m_LineSpacing = reader.ReadSingle();
|
||||||
var m_DefaultMaterial = sourceFile.ReadPPtr();
|
var m_DefaultMaterial = reader.ReadPPtr();
|
||||||
var m_FontSize = reader.ReadSingle();
|
var m_FontSize = reader.ReadSingle();
|
||||||
var m_Texture = sourceFile.ReadPPtr();
|
var m_Texture = reader.ReadPPtr();
|
||||||
int m_AsciiStartOffset = reader.ReadInt32();
|
int m_AsciiStartOffset = reader.ReadInt32();
|
||||||
var m_Tracking = reader.ReadSingle();
|
var m_Tracking = reader.ReadSingle();
|
||||||
var m_CharacterSpacing = reader.ReadInt32();
|
var m_CharacterSpacing = reader.ReadInt32();
|
||||||
|
@ -68,7 +68,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_ConvertCase = reader.ReadInt32();
|
int m_ConvertCase = reader.ReadInt32();
|
||||||
PPtr m_DefaultMaterial = sourceFile.ReadPPtr();
|
PPtr m_DefaultMaterial = reader.ReadPPtr();
|
||||||
|
|
||||||
int m_CharacterRects_size = reader.ReadInt32();
|
int m_CharacterRects_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||||
|
@ -93,7 +93,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PPtr m_Texture = sourceFile.ReadPPtr();
|
PPtr m_Texture = reader.ReadPPtr();
|
||||||
|
|
||||||
int m_KerningValues_size = reader.ReadInt32();
|
int m_KerningValues_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_KerningValues_size; i++)
|
for (int i = 0; i < m_KerningValues_size; i++)
|
||||||
|
|
|
@ -16,30 +16,25 @@ namespace AssetStudio
|
||||||
public PPtr m_SkinnedMeshRenderer;
|
public PPtr m_SkinnedMeshRenderer;
|
||||||
public PPtr m_Animator;
|
public PPtr m_Animator;
|
||||||
|
|
||||||
public GameObject(AssetPreloadData preloadData) : base(preloadData)
|
public GameObject(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
int m_Component_size = reader.ReadInt32();
|
int m_Component_size = reader.ReadInt32();
|
||||||
m_Components = new List<PPtr>(m_Component_size);
|
m_Components = new List<PPtr>(m_Component_size);
|
||||||
for (int j = 0; j < m_Component_size; j++)
|
for (int j = 0; j < m_Component_size; j++)
|
||||||
{
|
{
|
||||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
|
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5.0 and up
|
||||||
{
|
{
|
||||||
m_Components.Add(sourceFile.ReadPPtr());
|
m_Components.Add(reader.ReadPPtr());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int first = reader.ReadInt32();
|
int first = reader.ReadInt32();
|
||||||
m_Components.Add(sourceFile.ReadPPtr());
|
m_Components.Add(reader.ReadPPtr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_Layer = reader.ReadInt32();
|
var m_Layer = reader.ReadInt32();
|
||||||
m_Name = reader.ReadAlignedString();
|
m_Name = reader.ReadAlignedString();
|
||||||
|
|
||||||
if (m_Name == "")
|
|
||||||
{
|
|
||||||
m_Name = "GameObject #" + preloadData.uniqueID;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,11 +34,11 @@ namespace AssetStudio
|
||||||
public strFloatPair[] m_Floats;
|
public strFloatPair[] m_Floats;
|
||||||
public strColorPair[] m_Colors;
|
public strColorPair[] m_Colors;
|
||||||
|
|
||||||
public Material(AssetPreloadData preloadData) : base(preloadData)
|
public Material(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Shader = sourceFile.ReadPPtr();
|
m_Shader = reader.ReadPPtr();
|
||||||
|
|
||||||
if (sourceFile.version[0] == 4 && (sourceFile.version[1] >= 2 || (sourceFile.version[1] == 1 && sourceFile.buildType[0] != "a")))
|
if (version[0] == 4 && (version[1] >= 2 || (version[1] == 1 && buildType[0] != "a")))
|
||||||
{
|
{
|
||||||
m_ShaderKeywords = new string[reader.ReadInt32()];
|
m_ShaderKeywords = new string[reader.ReadInt32()];
|
||||||
for (int i = 0; i < m_ShaderKeywords.Length; i++)
|
for (int i = 0; i < m_ShaderKeywords.Length; i++)
|
||||||
|
@ -46,11 +46,11 @@ namespace AssetStudio
|
||||||
m_ShaderKeywords[i] = reader.ReadAlignedString();
|
m_ShaderKeywords[i] = reader.ReadAlignedString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sourceFile.version[0] >= 5)//5.0 and up
|
else if (version[0] >= 5)//5.0 and up
|
||||||
{
|
{
|
||||||
m_ShaderKeywords = new[] { reader.ReadAlignedString() };
|
m_ShaderKeywords = new[] { reader.ReadAlignedString() };
|
||||||
uint m_LightmapFlags = reader.ReadUInt32();
|
uint m_LightmapFlags = reader.ReadUInt32();
|
||||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 6 || sourceFile.version[0] > 5)//5.6.0 and up
|
if (version[0] == 5 && version[1] >= 6 || version[0] > 5)//5.6.0 and up
|
||||||
{
|
{
|
||||||
var m_EnableInstancingVariants = reader.ReadBoolean();
|
var m_EnableInstancingVariants = reader.ReadBoolean();
|
||||||
//var m_DoubleSidedGI = a_Stream.ReadBoolean();//2017.x
|
//var m_DoubleSidedGI = a_Stream.ReadBoolean();//2017.x
|
||||||
|
@ -58,9 +58,9 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sourceFile.version[0] > 4 || sourceFile.version[0] == 4 && sourceFile.version[1] >= 3) { m_CustomRenderQueue = reader.ReadInt32(); }
|
if (version[0] > 4 || version[0] == 4 && version[1] >= 3) { m_CustomRenderQueue = reader.ReadInt32(); }
|
||||||
|
|
||||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 1 || sourceFile.version[0] > 5)//5.1 and up
|
if (version[0] == 5 && version[1] >= 1 || version[0] > 5)//5.1 and up
|
||||||
{
|
{
|
||||||
string[][] stringTagMap = new string[reader.ReadInt32()][];
|
string[][] stringTagMap = new string[reader.ReadInt32()][];
|
||||||
for (int i = 0; i < stringTagMap.Length; i++)
|
for (int i = 0; i < stringTagMap.Length; i++)
|
||||||
|
@ -69,7 +69,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//disabledShaderPasses
|
//disabledShaderPasses
|
||||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 6) || sourceFile.version[0] > 5)//5.6.0 and up
|
if ((version[0] == 5 && version[1] >= 6) || version[0] > 5)//5.6.0 and up
|
||||||
{
|
{
|
||||||
var size = reader.ReadInt32();
|
var size = reader.ReadInt32();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
|
@ -84,7 +84,7 @@ namespace AssetStudio
|
||||||
TexEnv m_TexEnv = new TexEnv()
|
TexEnv m_TexEnv = new TexEnv()
|
||||||
{
|
{
|
||||||
name = reader.ReadAlignedString(),
|
name = reader.ReadAlignedString(),
|
||||||
m_Texture = sourceFile.ReadPPtr(),
|
m_Texture = reader.ReadPPtr(),
|
||||||
m_Scale = new[] { reader.ReadSingle(), reader.ReadSingle() },
|
m_Scale = new[] { reader.ReadSingle(), reader.ReadSingle() },
|
||||||
m_Offset = new[] { reader.ReadSingle(), reader.ReadSingle() }
|
m_Offset = new[] { reader.ReadSingle(), reader.ReadSingle() }
|
||||||
};
|
};
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace AssetStudio
|
||||||
public Vector3 tangent { get; set; }
|
public Vector3 tangent { get; set; }
|
||||||
public uint index { get; set; }
|
public uint index { get; set; }
|
||||||
|
|
||||||
public BlendShapeVertex(EndianBinaryReader reader)
|
public BlendShapeVertex(ObjectReader reader)
|
||||||
{
|
{
|
||||||
vertex = reader.ReadVector3();
|
vertex = reader.ReadVector3();
|
||||||
normal = reader.ReadVector3();
|
normal = reader.ReadVector3();
|
||||||
|
@ -87,7 +87,7 @@ namespace AssetStudio
|
||||||
public bool hasNormals { get; set; }
|
public bool hasNormals { get; set; }
|
||||||
public bool hasTangents { get; set; }
|
public bool hasTangents { get; set; }
|
||||||
|
|
||||||
public MeshBlendShape(EndianBinaryReader reader)
|
public MeshBlendShape(ObjectReader reader)
|
||||||
{
|
{
|
||||||
firstVertex = reader.ReadUInt32();
|
firstVertex = reader.ReadUInt32();
|
||||||
vertexCount = reader.ReadUInt32();
|
vertexCount = reader.ReadUInt32();
|
||||||
|
@ -104,7 +104,7 @@ namespace AssetStudio
|
||||||
public int frameIndex { get; set; }
|
public int frameIndex { get; set; }
|
||||||
public int frameCount { get; set; }
|
public int frameCount { get; set; }
|
||||||
|
|
||||||
public MeshBlendShapeChannel(EndianBinaryReader reader)
|
public MeshBlendShapeChannel(ObjectReader reader)
|
||||||
{
|
{
|
||||||
name = reader.ReadAlignedString();
|
name = reader.ReadAlignedString();
|
||||||
nameHash = reader.ReadUInt32();
|
nameHash = reader.ReadUInt32();
|
||||||
|
@ -118,7 +118,7 @@ namespace AssetStudio
|
||||||
public List<MeshBlendShapeChannel> channels { get; set; }
|
public List<MeshBlendShapeChannel> channels { get; set; }
|
||||||
public List<float> fullWeights { get; set; }
|
public List<float> fullWeights { get; set; }
|
||||||
|
|
||||||
public BlendShapeData(EndianBinaryReader reader)
|
public BlendShapeData(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numVerts = reader.ReadInt32();
|
int numVerts = reader.ReadInt32();
|
||||||
vertices = new List<BlendShapeVertex>(numVerts);
|
vertices = new List<BlendShapeVertex>(numVerts);
|
||||||
|
@ -150,10 +150,13 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float BytesToFloat(byte[] inputBytes)
|
private float BytesToFloat(byte[] inputBytes, EndianType endian)
|
||||||
{
|
{
|
||||||
float result = 0;
|
float result = 0;
|
||||||
if (reader.endian == EndianType.BigEndian) { Array.Reverse(inputBytes); }
|
if (endian == EndianType.BigEndian)
|
||||||
|
{
|
||||||
|
Array.Reverse(inputBytes);
|
||||||
|
}
|
||||||
|
|
||||||
switch (inputBytes.Length)
|
switch (inputBytes.Length)
|
||||||
{
|
{
|
||||||
|
@ -236,7 +239,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mesh(AssetPreloadData preloadData) : base(preloadData)
|
public Mesh(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
bool m_Use16BitIndices = true; //3.5.0 and newer always uses 16bit indices
|
bool m_Use16BitIndices = true; //3.5.0 and newer always uses 16bit indices
|
||||||
uint m_MeshCompression = 0;
|
uint m_MeshCompression = 0;
|
||||||
|
@ -292,7 +295,7 @@ namespace AssetStudio
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region BlendShapeData for 4.1.0 to 4.2.x, excluding 4.1.0 alpha
|
#region BlendShapeData for 4.1.0 to 4.2.x, excluding 4.1.0 alpha
|
||||||
if (version[0] == 4 && ((version[1] == 1 && preloadData.sourceFile.buildType[0] != "a") || (version[1] > 1 && version[1] <= 2)))
|
if (version[0] == 4 && ((version[1] == 1 && buildType[0] != "a") || (version[1] > 1 && version[1] <= 2)))
|
||||||
{
|
{
|
||||||
int m_Shapes_size = reader.ReadInt32();
|
int m_Shapes_size = reader.ReadInt32();
|
||||||
if (m_Shapes_size > 0)
|
if (m_Shapes_size > 0)
|
||||||
|
@ -348,7 +351,7 @@ namespace AssetStudio
|
||||||
bool m_IsReadable = reader.ReadBoolean();
|
bool m_IsReadable = reader.ReadBoolean();
|
||||||
bool m_KeepVertices = reader.ReadBoolean();
|
bool m_KeepVertices = reader.ReadBoolean();
|
||||||
bool m_KeepIndices = reader.ReadBoolean();
|
bool m_KeepIndices = reader.ReadBoolean();
|
||||||
if (preloadData.HasStructMember("m_UsedForStaticMeshColliderOnly"))
|
if (reader.HasStructMember("m_UsedForStaticMeshColliderOnly"))
|
||||||
{
|
{
|
||||||
var m_UsedForStaticMeshColliderOnly = reader.ReadBoolean();
|
var m_UsedForStaticMeshColliderOnly = reader.ReadBoolean();
|
||||||
}
|
}
|
||||||
|
@ -356,7 +359,7 @@ namespace AssetStudio
|
||||||
reader.AlignStream(4);
|
reader.AlignStream(4);
|
||||||
//This is a bug fixed in 2017.3.1p1 and later versions
|
//This is a bug fixed in 2017.3.1p1 and later versions
|
||||||
if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4
|
if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4
|
||||||
((version[0] == 2017 && version[1] == 3 && version[2] == 1) && preloadData.sourceFile.buildType[0] == "p") || //fixed after 2017.3.1px
|
((version[0] == 2017 && version[1] == 3 && version[2] == 1) && buildType[0] == "p") || //fixed after 2017.3.1px
|
||||||
((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression
|
((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression
|
||||||
{
|
{
|
||||||
var m_IndexFormat = reader.ReadInt32();
|
var m_IndexFormat = reader.ReadInt32();
|
||||||
|
@ -594,7 +597,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preloadData.sourceFile.m_TargetPlatform == BuildTarget.XBOX360 && componentByteSize > 1) //swap bytes for Xbox
|
if (platform == BuildTarget.XBOX360 && componentByteSize > 1) //swap bytes for Xbox
|
||||||
{
|
{
|
||||||
for (var i = 0; i < componentBytes.Length / componentByteSize; i++)
|
for (var i = 0; i < componentBytes.Length / componentByteSize; i++)
|
||||||
{
|
{
|
||||||
|
@ -715,7 +718,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preloadData.sourceFile.m_TargetPlatform == BuildTarget.XBOX360 && componentByteSize > 1) //swap bytes for Xbox
|
if (platform == BuildTarget.XBOX360 && componentByteSize > 1) //swap bytes for Xbox
|
||||||
{
|
{
|
||||||
for (var i = 0; i < componentBytes.Length / componentByteSize; i++)
|
for (var i = 0; i < componentBytes.Length / componentByteSize; i++)
|
||||||
{
|
{
|
||||||
|
@ -818,7 +821,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
int m_DataSizeOffset = vertexOffset + componentByteSize * d;
|
int m_DataSizeOffset = vertexOffset + componentByteSize * d;
|
||||||
Buffer.BlockCopy(m_DataSize, m_DataSizeOffset, componentBytes, 0, componentByteSize);
|
Buffer.BlockCopy(m_DataSize, m_DataSizeOffset, componentBytes, 0, componentByteSize);
|
||||||
componentsArray[v * m_Channel.dimension + d] = BytesToFloat(componentBytes);
|
componentsArray[v * m_Channel.dimension + d] = BytesToFloat(componentBytes, reader.endian);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,9 @@ namespace AssetStudio
|
||||||
public long preloadIndex;
|
public long preloadIndex;
|
||||||
public PPtr m_Mesh;
|
public PPtr m_Mesh;
|
||||||
|
|
||||||
public MeshFilter(AssetPreloadData preloadData) : base(preloadData)
|
public MeshFilter(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Mesh = sourceFile.ReadPPtr();
|
m_Mesh = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class MeshRenderer : Renderer
|
public sealed class MeshRenderer : Renderer
|
||||||
{
|
{
|
||||||
public MeshRenderer(AssetPreloadData preloadData) : base(preloadData)
|
public MeshRenderer(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@ namespace AssetStudio
|
||||||
public PPtr m_Script;
|
public PPtr m_Script;
|
||||||
public string m_Name;
|
public string m_Name;
|
||||||
|
|
||||||
public MonoBehaviour(AssetPreloadData preloadData) : base(preloadData)
|
public MonoBehaviour(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Script = sourceFile.ReadPPtr();
|
m_Script = reader.ReadPPtr();
|
||||||
m_Name = reader.ReadAlignedString();
|
m_Name = reader.ReadAlignedString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace AssetStudio
|
||||||
public string m_Namespace = string.Empty;
|
public string m_Namespace = string.Empty;
|
||||||
public string m_AssemblyName;
|
public string m_AssemblyName;
|
||||||
|
|
||||||
public MonoScript(AssetPreloadData preloadData) : base(preloadData)
|
public MonoScript(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up
|
if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,12 +9,12 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public byte[] m_MovieData;
|
public byte[] m_MovieData;
|
||||||
|
|
||||||
public MovieTexture(AssetPreloadData preloadData) : base(preloadData)
|
public MovieTexture(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_Loop = reader.ReadBoolean();
|
var m_Loop = reader.ReadBoolean();
|
||||||
reader.AlignStream(4);
|
reader.AlignStream(4);
|
||||||
//PPtr<AudioClip>
|
//PPtr<AudioClip>
|
||||||
sourceFile.ReadPPtr();
|
reader.ReadPPtr();
|
||||||
m_MovieData = reader.ReadBytes(reader.ReadInt32());
|
m_MovieData = reader.ReadBytes(reader.ReadInt32());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public string m_Name;
|
public string m_Name;
|
||||||
|
|
||||||
public NamedObject(AssetPreloadData preloadData) : base(preloadData)
|
public NamedObject(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Name = reader.ReadAlignedString();
|
m_Name = reader.ReadAlignedString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,21 +7,20 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public abstract class Object
|
public abstract class Object
|
||||||
{
|
{
|
||||||
public AssetPreloadData preloadData;
|
protected AssetsFile sourceFile;
|
||||||
public AssetsFile sourceFile;
|
public ObjectReader reader;
|
||||||
protected EndianBinaryReader reader;
|
|
||||||
public int[] version;
|
public int[] version;
|
||||||
protected string[] buildType;
|
protected string[] buildType;
|
||||||
protected BuildTarget platform;
|
public BuildTarget platform;
|
||||||
|
|
||||||
protected Object(AssetPreloadData preloadData)
|
protected Object(ObjectReader reader)
|
||||||
{
|
{
|
||||||
this.preloadData = preloadData;
|
this.reader = reader;
|
||||||
sourceFile = preloadData.sourceFile;
|
reader.Reset();
|
||||||
reader = preloadData.InitReader();
|
sourceFile = reader.assetsFile;
|
||||||
version = sourceFile.version;
|
version = reader.version;
|
||||||
buildType = sourceFile.buildType;
|
buildType = reader.buildType;
|
||||||
platform = sourceFile.m_TargetPlatform;
|
platform = reader.platform;
|
||||||
|
|
||||||
if (platform == BuildTarget.NoTarget)
|
if (platform == BuildTarget.NoTarget)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace AssetStudio
|
||||||
public string companyName;
|
public string companyName;
|
||||||
public string productName;
|
public string productName;
|
||||||
|
|
||||||
public PlayerSettings(AssetPreloadData preloadData) : base(preloadData)
|
public PlayerSettings(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4.0 nad up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4.0 nad up
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class RectTransform : Transform
|
public sealed class RectTransform : Transform
|
||||||
{
|
{
|
||||||
public RectTransform(AssetPreloadData preloadData) : base(preloadData)
|
public RectTransform(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace AssetStudio
|
||||||
public StaticBatchInfo m_StaticBatchInfo;
|
public StaticBatchInfo m_StaticBatchInfo;
|
||||||
public uint[] m_SubsetIndices;
|
public uint[] m_SubsetIndices;
|
||||||
|
|
||||||
protected Renderer(AssetPreloadData preloadData) : base(preloadData)
|
protected Renderer(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] < 5)
|
if (version[0] < 5)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ namespace AssetStudio
|
||||||
m_Materials = new PPtr[reader.ReadInt32()];
|
m_Materials = new PPtr[reader.ReadInt32()];
|
||||||
for (int m = 0; m < m_Materials.Length; m++)
|
for (int m = 0; m < m_Materials.Length; m++)
|
||||||
{
|
{
|
||||||
m_Materials[m] = sourceFile.ReadPPtr();
|
m_Materials[m] = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] < 3)
|
if (version[0] < 3)
|
||||||
|
@ -63,7 +63,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
|
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5.0 and up
|
||||||
{
|
{
|
||||||
m_StaticBatchInfo = new StaticBatchInfo
|
m_StaticBatchInfo = new StaticBatchInfo
|
||||||
{
|
{
|
||||||
|
@ -77,12 +77,12 @@ namespace AssetStudio
|
||||||
m_SubsetIndices = reader.ReadUInt32Array(numSubsetIndices);
|
m_SubsetIndices = reader.ReadUInt32Array(numSubsetIndices);
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_StaticBatchRoot = sourceFile.ReadPPtr();
|
var m_StaticBatchRoot = reader.ReadPPtr();
|
||||||
|
|
||||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 and up
|
if ((version[0] == 5 && version[1] >= 4) || version[0] > 5)//5.4.0 and up
|
||||||
{
|
{
|
||||||
var m_ProbeAnchor = sourceFile.ReadPPtr();
|
var m_ProbeAnchor = reader.ReadPPtr();
|
||||||
var m_LightProbeVolumeOverride = sourceFile.ReadPPtr();
|
var m_LightProbeVolumeOverride = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))//3.5 - 5.3
|
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))//3.5 - 5.3
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
int m_ReflectionProbeUsage = reader.ReadInt32();
|
int m_ReflectionProbeUsage = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
var m_LightProbeAnchor = sourceFile.ReadPPtr();
|
var m_LightProbeAnchor = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
||||||
|
|
|
@ -12,17 +12,17 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public byte[] m_Script;
|
public byte[] m_Script;
|
||||||
|
|
||||||
public Shader(AssetPreloadData preloadData) : base(preloadData)
|
public Shader(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 5 || sourceFile.version[0] > 5) //5.5.0 and up
|
if (version[0] == 5 && version[1] >= 5 || version[0] > 5) //5.5.0 and up
|
||||||
{
|
{
|
||||||
var str = preloadData.Dump();
|
var str = reader.Dump();
|
||||||
m_Script = Encoding.UTF8.GetBytes(str ?? "Serialized Shader can't be read");
|
m_Script = Encoding.UTF8.GetBytes(str ?? "Serialized Shader can't be read");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_Script = reader.ReadBytes(reader.ReadInt32());
|
m_Script = reader.ReadBytes(reader.ReadInt32());
|
||||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 3) //5.3 - 5.4
|
if (version[0] == 5 && version[1] >= 3) //5.3 - 5.4
|
||||||
{
|
{
|
||||||
reader.AlignStream(4);
|
reader.AlignStream(4);
|
||||||
var m_PathName = reader.ReadAlignedString();
|
var m_PathName = reader.ReadAlignedString();
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace AssetStudio
|
||||||
public PPtr[] m_Bones;
|
public PPtr[] m_Bones;
|
||||||
public List<float> m_BlendShapeWeights;
|
public List<float> m_BlendShapeWeights;
|
||||||
|
|
||||||
public SkinnedMeshRenderer(AssetPreloadData preloadData) : base(preloadData)
|
public SkinnedMeshRenderer(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
int m_Quality = reader.ReadInt32();
|
int m_Quality = reader.ReadInt32();
|
||||||
var m_UpdateWhenOffscreen = reader.ReadBoolean();
|
var m_UpdateWhenOffscreen = reader.ReadBoolean();
|
||||||
|
@ -20,15 +20,15 @@ namespace AssetStudio
|
||||||
|
|
||||||
if (version[0] == 2 && version[1] < 6)//2.6 down
|
if (version[0] == 2 && version[1] < 6)//2.6 down
|
||||||
{
|
{
|
||||||
var m_DisableAnimationWhenOffscreen = sourceFile.ReadPPtr();
|
var m_DisableAnimationWhenOffscreen = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Mesh = sourceFile.ReadPPtr();
|
m_Mesh = reader.ReadPPtr();
|
||||||
|
|
||||||
m_Bones = new PPtr[reader.ReadInt32()];
|
m_Bones = new PPtr[reader.ReadInt32()];
|
||||||
for (int b = 0; b < m_Bones.Length; b++)
|
for (int b = 0; b < m_Bones.Length; b++)
|
||||||
{
|
{
|
||||||
m_Bones[b] = sourceFile.ReadPPtr();
|
m_Bones[b] = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] < 3)
|
if (version[0] < 3)
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace AssetStudio
|
||||||
public RectangleF textureRect;
|
public RectangleF textureRect;
|
||||||
public PointF[][] m_PhysicsShape;
|
public PointF[][] m_PhysicsShape;
|
||||||
|
|
||||||
public Sprite(AssetPreloadData preloadData) : base(preloadData)
|
public Sprite(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
//Rectf m_Rect
|
//Rectf m_Rect
|
||||||
m_Rect = new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
m_Rect = new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||||
|
@ -58,16 +58,16 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
|
|
||||||
//PPtr<SpriteAtlas> m_SpriteAtlas
|
//PPtr<SpriteAtlas> m_SpriteAtlas
|
||||||
m_SpriteAtlas = sourceFile.ReadPPtr();
|
m_SpriteAtlas = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
//SpriteRenderData m_RD
|
//SpriteRenderData m_RD
|
||||||
// PPtr<Texture2D> texture
|
// PPtr<Texture2D> texture
|
||||||
texture = sourceFile.ReadPPtr();
|
texture = reader.ReadPPtr();
|
||||||
// PPtr<Texture2D> alphaTexture
|
// PPtr<Texture2D> alphaTexture
|
||||||
if (version[0] >= 5) //5.0 and up
|
if (version[0] >= 5) //5.0 and up
|
||||||
{
|
{
|
||||||
var alphaTexture = sourceFile.ReadPPtr();
|
var alphaTexture = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
||||||
|
|
|
@ -13,14 +13,14 @@ namespace AssetStudio
|
||||||
public List<Guid> guids = new List<Guid>();
|
public List<Guid> guids = new List<Guid>();
|
||||||
|
|
||||||
|
|
||||||
public SpriteAtlas(AssetPreloadData preloadData) : base(preloadData)
|
public SpriteAtlas(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
//vector m_PackedSprites
|
//vector m_PackedSprites
|
||||||
var size = reader.ReadInt32();
|
var size = reader.ReadInt32();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
//PPtr<Sprite> data
|
//PPtr<Sprite> data
|
||||||
sourceFile.ReadPPtr();
|
reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
//vector m_PackedSpriteNamesToIndex
|
//vector m_PackedSpriteNamesToIndex
|
||||||
size = reader.ReadInt32();
|
size = reader.ReadInt32();
|
||||||
|
@ -37,14 +37,14 @@ namespace AssetStudio
|
||||||
var second = reader.ReadInt64();
|
var second = reader.ReadInt64();
|
||||||
//SpriteAtlasData second
|
//SpriteAtlasData second
|
||||||
// PPtr<Texture2D> texture
|
// PPtr<Texture2D> texture
|
||||||
textures.Add(sourceFile.ReadPPtr());
|
textures.Add(reader.ReadPPtr());
|
||||||
// PPtr<Texture2D> alphaTexture
|
// PPtr<Texture2D> alphaTexture
|
||||||
var alphaTexture = sourceFile.ReadPPtr();
|
var alphaTexture = reader.ReadPPtr();
|
||||||
// Rectf textureRect
|
// Rectf textureRect
|
||||||
textureRects.Add(new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
textureRects.Add(new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
||||||
// Vector2f textureRectOffset
|
// Vector2f textureRectOffset
|
||||||
reader.Position += 8;
|
reader.Position += 8;
|
||||||
if (sourceFile.version[0] > 2017 || (sourceFile.version[0] == 2017 && sourceFile.version[1] >= 2))//2017.2 and up
|
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2))//2017.2 and up
|
||||||
{
|
{
|
||||||
// Vector2f atlasRectOffset
|
// Vector2f atlasRectOffset
|
||||||
reader.Position += 8;
|
reader.Position += 8;
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public byte[] m_Script;
|
public byte[] m_Script;
|
||||||
|
|
||||||
public TextAsset(AssetPreloadData preloadData) : base(preloadData)
|
public TextAsset(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Script = reader.ReadBytes(reader.ReadInt32());
|
m_Script = reader.ReadBytes(reader.ReadInt32());
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public abstract class Texture : NamedObject
|
public abstract class Texture : NamedObject
|
||||||
{
|
{
|
||||||
protected Texture(AssetPreloadData preloadData) : base(preloadData)
|
protected Texture(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up
|
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace AssetStudio
|
||||||
public uint size;
|
public uint size;
|
||||||
public string path;
|
public string path;
|
||||||
|
|
||||||
public Texture2D(AssetPreloadData preloadData, bool readData) : base(preloadData)
|
public Texture2D(ObjectReader reader, bool readData) : base(reader)
|
||||||
{
|
{
|
||||||
m_Width = reader.ReadInt32();
|
m_Width = reader.ReadInt32();
|
||||||
m_Height = reader.ReadInt32();
|
m_Height = reader.ReadInt32();
|
||||||
|
@ -58,11 +58,11 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
else if (preloadData.HasStructMember("m_StreamingMipmapsPriority")) //will fix in some patch version bundle
|
else if (reader.HasStructMember("m_StreamingMipmapsPriority")) //will fix in some patch version bundle
|
||||||
{
|
{
|
||||||
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
if (preloadData.HasStructMember("m_StreamingGroupID")) //What the hell is this?
|
if (reader.HasStructMember("m_StreamingGroupID")) //What the hell is this?
|
||||||
{
|
{
|
||||||
var m_StreamingGroupID = reader.ReadUInt32();
|
var m_StreamingGroupID = reader.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace AssetStudio
|
||||||
public List<PPtr> m_Children;
|
public List<PPtr> m_Children;
|
||||||
public PPtr m_Father;
|
public PPtr m_Father;
|
||||||
|
|
||||||
public Transform(AssetPreloadData preloadData) : base(preloadData)
|
public Transform(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_LocalRotation = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
m_LocalRotation = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||||
m_LocalPosition = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
m_LocalPosition = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||||
|
@ -23,9 +23,9 @@ namespace AssetStudio
|
||||||
m_Children = new List<PPtr>(m_ChildrenCount);
|
m_Children = new List<PPtr>(m_ChildrenCount);
|
||||||
for (int j = 0; j < m_ChildrenCount; j++)
|
for (int j = 0; j < m_ChildrenCount; j++)
|
||||||
{
|
{
|
||||||
m_Children.Add(sourceFile.ReadPPtr());
|
m_Children.Add(reader.ReadPPtr());
|
||||||
}
|
}
|
||||||
m_Father = sourceFile.ReadPPtr();
|
m_Father = reader.ReadPPtr();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,14 +13,14 @@ namespace AssetStudio
|
||||||
public string m_Source;
|
public string m_Source;
|
||||||
public ulong m_Size;
|
public ulong m_Size;
|
||||||
|
|
||||||
public VideoClip(AssetPreloadData preloadData, bool readData) : base(preloadData)
|
public VideoClip(ObjectReader reader, bool readData) : base(reader)
|
||||||
{
|
{
|
||||||
m_OriginalPath = reader.ReadAlignedString();
|
m_OriginalPath = reader.ReadAlignedString();
|
||||||
var m_ProxyWidth = reader.ReadUInt32();
|
var m_ProxyWidth = reader.ReadUInt32();
|
||||||
var m_ProxyHeight = reader.ReadUInt32();
|
var m_ProxyHeight = reader.ReadUInt32();
|
||||||
var Width = reader.ReadUInt32();
|
var Width = reader.ReadUInt32();
|
||||||
var Height = reader.ReadUInt32();
|
var Height = reader.ReadUInt32();
|
||||||
if (sourceFile.version[0] >= 2017)//2017.x and up
|
if (version[0] >= 2017)//2017.x and up
|
||||||
{
|
{
|
||||||
var m_PixelAspecRatioNum = reader.ReadUInt32();
|
var m_PixelAspecRatioNum = reader.ReadUInt32();
|
||||||
var m_PixelAspecRatioDen = reader.ReadUInt32();
|
var m_PixelAspecRatioDen = reader.ReadUInt32();
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
|
{
|
||||||
|
public class AssetItem : ListViewItem
|
||||||
|
{
|
||||||
|
public AssetsFile sourceFile;
|
||||||
|
public ObjectReader reader;
|
||||||
|
public long FullSize;
|
||||||
|
public ClassIDType Type;
|
||||||
|
public string TypeString;
|
||||||
|
public string InfoText;
|
||||||
|
public string UniqueID;
|
||||||
|
public GameObject gameObject;
|
||||||
|
|
||||||
|
public AssetItem(ObjectReader reader)
|
||||||
|
{
|
||||||
|
sourceFile = reader.assetsFile;
|
||||||
|
this.reader = reader;
|
||||||
|
FullSize = reader.byteSize;
|
||||||
|
Type = reader.type;
|
||||||
|
TypeString = Type.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,67 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
|
||||||
public class AssetPreloadData : ListViewItem
|
|
||||||
{
|
|
||||||
public AssetsFile sourceFile;
|
|
||||||
public long m_PathID;
|
|
||||||
public uint Offset;
|
|
||||||
public uint Size;
|
|
||||||
public long FullSize;
|
|
||||||
public SerializedType serializedType;
|
|
||||||
public ClassIDType Type;
|
|
||||||
public string TypeString;
|
|
||||||
public string InfoText;
|
|
||||||
public string uniqueID;
|
|
||||||
public GameObject gameObject;
|
|
||||||
|
|
||||||
public AssetPreloadData(AssetsFile assetsFile, ObjectInfo objectInfo, string uniqueID)
|
|
||||||
{
|
|
||||||
sourceFile = assetsFile;
|
|
||||||
m_PathID = objectInfo.m_PathID;
|
|
||||||
Offset = objectInfo.byteStart;
|
|
||||||
Size = objectInfo.byteSize;
|
|
||||||
FullSize = objectInfo.byteSize;
|
|
||||||
serializedType = objectInfo.serializedType;
|
|
||||||
if (Enum.IsDefined(typeof(ClassIDType), objectInfo.classID))
|
|
||||||
{
|
|
||||||
Type = (ClassIDType)objectInfo.classID;
|
|
||||||
TypeString = Type.ToString();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Type = ClassIDType.UnknownType;
|
|
||||||
TypeString = $"UnknownType {objectInfo.classID}";
|
|
||||||
}
|
|
||||||
this.uniqueID = uniqueID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EndianBinaryReader InitReader()
|
|
||||||
{
|
|
||||||
var reader = sourceFile.reader;
|
|
||||||
reader.Position = Offset;
|
|
||||||
return reader;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Dump()
|
|
||||||
{
|
|
||||||
var reader = InitReader();
|
|
||||||
if (serializedType?.m_Nodes != null)
|
|
||||||
{
|
|
||||||
var sb = new StringBuilder();
|
|
||||||
TypeTreeHelper.ReadTypeString(sb, serializedType.m_Nodes, reader);
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HasStructMember(string name)
|
|
||||||
{
|
|
||||||
return serializedType?.m_Nodes != null && serializedType.m_Nodes.Any(x => x.m_Name == name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,10 +17,9 @@ namespace AssetStudio
|
||||||
public string[] buildType;
|
public string[] buildType;
|
||||||
public string platformStr;
|
public string platformStr;
|
||||||
public bool valid;
|
public bool valid;
|
||||||
public Dictionary<long, AssetPreloadData> preloadTable = new Dictionary<long, AssetPreloadData>();
|
public Dictionary<long, ObjectReader> ObjectReaders = new Dictionary<long, ObjectReader>();
|
||||||
public Dictionary<long, GameObject> GameObjectList = new Dictionary<long, GameObject>();
|
public Dictionary<long, GameObject> GameObjects = new Dictionary<long, GameObject>();
|
||||||
public Dictionary<long, Transform> TransformList = new Dictionary<long, Transform>();
|
public Dictionary<long, Transform> Transforms = new Dictionary<long, Transform>();
|
||||||
public List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>();
|
|
||||||
|
|
||||||
//class SerializedFile
|
//class SerializedFile
|
||||||
public SerializedFileHeader header;
|
public SerializedFileHeader header;
|
||||||
|
@ -98,9 +97,6 @@ namespace AssetStudio
|
||||||
|
|
||||||
//Read Objects
|
//Read Objects
|
||||||
int objectCount = reader.ReadInt32();
|
int objectCount = reader.ReadInt32();
|
||||||
|
|
||||||
var assetIDfmt = "D" + objectCount.ToString().Length; //format for unique ID
|
|
||||||
|
|
||||||
m_Objects = new Dictionary<long, ObjectInfo>(objectCount);
|
m_Objects = new Dictionary<long, ObjectInfo>(objectCount);
|
||||||
for (int i = 0; i < objectCount; i++)
|
for (int i = 0; i < objectCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -136,17 +132,17 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
m_Objects.Add(objectInfo.m_PathID, objectInfo);
|
m_Objects.Add(objectInfo.m_PathID, objectInfo);
|
||||||
|
|
||||||
//Create AssetPreloadData
|
//Create Reader
|
||||||
var asset = new AssetPreloadData(this, objectInfo, i.ToString(assetIDfmt));
|
var objectReader = new ObjectReader(reader, this, objectInfo);
|
||||||
preloadTable.Add(asset.m_PathID, asset);
|
ObjectReaders.Add(objectInfo.m_PathID, objectReader);
|
||||||
|
|
||||||
#region read BuildSettings to get version for version 2.x files
|
#region read BuildSettings to get version for version 2.x files
|
||||||
if (asset.Type == ClassIDType.BuildSettings && header.m_Version == 6)
|
if (objectReader.type == ClassIDType.BuildSettings && header.m_Version == 6)
|
||||||
{
|
{
|
||||||
var nextAsset = reader.Position;
|
var nextAsset = reader.Position;
|
||||||
|
|
||||||
var BSettings = new BuildSettings(asset);
|
var buildSettings = new BuildSettings(objectReader);
|
||||||
unityVersion = BSettings.m_Version;
|
unityVersion = buildSettings.m_Version;
|
||||||
|
|
||||||
reader.Position = nextAsset;
|
reader.Position = nextAsset;
|
||||||
}
|
}
|
||||||
|
@ -331,16 +327,5 @@ namespace AssetStudio
|
||||||
reader.Position += stringBufferSize;
|
reader.Position += stringBufferSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PPtr ReadPPtr()
|
|
||||||
{
|
|
||||||
var result = new PPtr
|
|
||||||
{
|
|
||||||
m_FileID = reader.ReadInt32(),
|
|
||||||
m_PathID = header.m_Version < 14 ? reader.ReadInt32() : reader.ReadInt64(),
|
|
||||||
assetsFile = this
|
|
||||||
};
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace AssetStudio
|
||||||
|
|
||||||
public string GetExtensionName()
|
public string GetExtensionName()
|
||||||
{
|
{
|
||||||
if (m_AudioClip.sourceFile.version[0] < 5)
|
if (m_AudioClip.version[0] < 5)
|
||||||
{
|
{
|
||||||
switch (m_AudioClip.m_Type)
|
switch (m_AudioClip.m_Type)
|
||||||
{
|
{
|
||||||
|
@ -136,7 +136,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (m_AudioClip.sourceFile.version[0] < 5)
|
if (m_AudioClip.version[0] < 5)
|
||||||
{
|
{
|
||||||
switch (m_AudioClip.m_Type)
|
switch (m_AudioClip.m_Type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,9 +10,9 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
static class Exporter
|
static class Exporter
|
||||||
{
|
{
|
||||||
public static bool ExportTexture2D(AssetPreloadData asset, string exportPathName, bool flip)
|
public static bool ExportTexture2D(ObjectReader reader, string exportPathName, bool flip)
|
||||||
{
|
{
|
||||||
var m_Texture2D = new Texture2D(asset, true);
|
var m_Texture2D = new Texture2D(reader, true);
|
||||||
if (m_Texture2D.image_data == null || m_Texture2D.image_data.Length == 0)
|
if (m_Texture2D.image_data == null || m_Texture2D.image_data.Length == 0)
|
||||||
return false;
|
return false;
|
||||||
var converter = new Texture2DConverter(m_Texture2D);
|
var converter = new Texture2DConverter(m_Texture2D);
|
||||||
|
@ -36,7 +36,7 @@ namespace AssetStudio
|
||||||
format = ImageFormat.Jpeg;
|
format = ImageFormat.Jpeg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var exportFullName = exportPathName + asset.Text + "." + ext.ToLower();
|
var exportFullName = exportPathName + reader.exportName + "." + ext.ToLower();
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
bitmap.Save(exportFullName, format);
|
bitmap.Save(exportFullName, format);
|
||||||
|
@ -45,7 +45,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var exportFullName = exportPathName + asset.Text + converter.GetExtensionName();
|
var exportFullName = exportPathName + reader.exportName + converter.GetExtensionName();
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, converter.ConvertToContainer());
|
File.WriteAllBytes(exportFullName, converter.ConvertToContainer());
|
||||||
|
@ -53,16 +53,16 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportAudioClip(AssetPreloadData asset, string exportPath)
|
public static bool ExportAudioClip(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_AudioClip = new AudioClip(asset, true);
|
var m_AudioClip = new AudioClip(reader, true);
|
||||||
if (m_AudioClip.m_AudioData == null)
|
if (m_AudioClip.m_AudioData == null)
|
||||||
return false;
|
return false;
|
||||||
var convertAudio = (bool)Properties.Settings.Default["convertAudio"];
|
var convertAudio = (bool)Properties.Settings.Default["convertAudio"];
|
||||||
var converter = new AudioClipConverter(m_AudioClip);
|
var converter = new AudioClipConverter(m_AudioClip);
|
||||||
if (convertAudio && converter.IsFMODSupport)
|
if (convertAudio && converter.IsFMODSupport)
|
||||||
{
|
{
|
||||||
var exportFullName = exportPath + asset.Text + ".wav";
|
var exportFullName = exportPath + reader.exportName + ".wav";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
var buffer = converter.ConvertToWav();
|
var buffer = converter.ConvertToWav();
|
||||||
|
@ -72,7 +72,7 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var exportFullName = exportPath + asset.Text + converter.GetExtensionName();
|
var exportFullName = exportPath + reader.exportName + converter.GetExtensionName();
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_AudioClip.m_AudioData);
|
File.WriteAllBytes(exportFullName, m_AudioClip.m_AudioData);
|
||||||
|
@ -80,56 +80,56 @@ namespace AssetStudio
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportShader(AssetPreloadData asset, string exportPath)
|
public static bool ExportShader(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_Shader = new Shader(asset);
|
var m_Shader = new Shader(reader);
|
||||||
var exportFullName = exportPath + asset.Text + ".shader";
|
var exportFullName = exportPath + reader.exportName + ".shader";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_Shader.m_Script);
|
File.WriteAllBytes(exportFullName, m_Shader.m_Script);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportTextAsset(AssetPreloadData asset, string exportPath)
|
public static bool ExportTextAsset(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_TextAsset = new TextAsset(asset);
|
var m_TextAsset = new TextAsset(reader);
|
||||||
var exportFullName = exportPath + asset.Text + ".txt";
|
var exportFullName = exportPath + reader.exportName + ".txt";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_TextAsset.m_Script);
|
File.WriteAllBytes(exportFullName, m_TextAsset.m_Script);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportMonoBehaviour(AssetPreloadData asset, string exportPath)
|
public static bool ExportMonoBehaviour(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var exportFullName = exportPath + asset.Text + ".txt";
|
var exportFullName = exportPath + reader.exportName + ".txt";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
var m_MonoBehaviour = new MonoBehaviour(reader);
|
||||||
string str;
|
string str;
|
||||||
if (asset.serializedType?.m_Nodes != null)
|
if (reader.serializedType?.m_Nodes != null)
|
||||||
{
|
{
|
||||||
str = asset.Dump();
|
str = reader.Dump();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
str = Studio.GetScriptString(asset);
|
str = Studio.GetScriptString(reader);
|
||||||
}
|
}
|
||||||
File.WriteAllText(exportFullName, str);
|
File.WriteAllText(exportFullName, str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportFont(AssetPreloadData asset, string exportPath)
|
public static bool ExportFont(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_Font = new Font(asset);
|
var m_Font = new Font(reader);
|
||||||
if (m_Font.m_FontData != null)
|
if (m_Font.m_FontData != null)
|
||||||
{
|
{
|
||||||
string extension = ".ttf";
|
var extension = ".ttf";
|
||||||
if (m_Font.m_FontData[0] == 79 && m_Font.m_FontData[1] == 84 && m_Font.m_FontData[2] == 84 && m_Font.m_FontData[3] == 79)
|
if (m_Font.m_FontData[0] == 79 && m_Font.m_FontData[1] == 84 && m_Font.m_FontData[2] == 84 && m_Font.m_FontData[3] == 79)
|
||||||
{
|
{
|
||||||
extension = ".otf";
|
extension = ".otf";
|
||||||
}
|
}
|
||||||
var exportFullName = exportPath + asset.Text + extension;
|
var exportFullName = exportPath + reader.exportName + extension;
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_Font.m_FontData);
|
File.WriteAllBytes(exportFullName, m_Font.m_FontData);
|
||||||
|
@ -138,12 +138,12 @@ namespace AssetStudio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportMesh(AssetPreloadData asset, string exportPath)
|
public static bool ExportMesh(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_Mesh = new Mesh(asset);
|
var m_Mesh = new Mesh(reader);
|
||||||
if (m_Mesh.m_VertexCount <= 0)
|
if (m_Mesh.m_VertexCount <= 0)
|
||||||
return false;
|
return false;
|
||||||
var exportFullName = exportPath + asset.Text + ".obj";
|
var exportFullName = exportPath + reader.exportName + ".obj";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
|
@ -219,12 +219,12 @@ namespace AssetStudio
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportVideoClip(AssetPreloadData asset, string exportPath)
|
public static bool ExportVideoClip(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_VideoClip = new VideoClip(asset, true);
|
var m_VideoClip = new VideoClip(reader, true);
|
||||||
if (m_VideoClip.m_VideoData != null)
|
if (m_VideoClip.m_VideoData != null)
|
||||||
{
|
{
|
||||||
var exportFullName = exportPath + asset.Text + Path.GetExtension(m_VideoClip.m_OriginalPath);
|
var exportFullName = exportPath + reader.exportName + Path.GetExtension(m_VideoClip.m_OriginalPath);
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_VideoClip.m_VideoData);
|
File.WriteAllBytes(exportFullName, m_VideoClip.m_VideoData);
|
||||||
|
@ -233,17 +233,17 @@ namespace AssetStudio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportMovieTexture(AssetPreloadData asset, string exportPath)
|
public static bool ExportMovieTexture(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var m_MovieTexture = new MovieTexture(asset);
|
var m_MovieTexture = new MovieTexture(reader);
|
||||||
var exportFullName = exportPath + asset.Text + ".ogv";
|
var exportFullName = exportPath + reader.exportName + ".ogv";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
File.WriteAllBytes(exportFullName, m_MovieTexture.m_MovieData);
|
File.WriteAllBytes(exportFullName, m_MovieTexture.m_MovieData);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportSprite(AssetPreloadData asset, string exportPath)
|
public static bool ExportSprite(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
ImageFormat format = null;
|
ImageFormat format = null;
|
||||||
var type = (string)Properties.Settings.Default["convertType"];
|
var type = (string)Properties.Settings.Default["convertType"];
|
||||||
|
@ -259,10 +259,10 @@ namespace AssetStudio
|
||||||
format = ImageFormat.Jpeg;
|
format = ImageFormat.Jpeg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var exportFullName = exportPath + asset.Text + "." + type.ToLower();
|
var exportFullName = exportPath + reader.exportName + "." + type.ToLower();
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
var bitmap = SpriteHelper.GetImageFromSprite(new Sprite(asset));
|
var bitmap = SpriteHelper.GetImageFromSprite(new Sprite(reader));
|
||||||
if (bitmap != null)
|
if (bitmap != null)
|
||||||
{
|
{
|
||||||
bitmap.Save(exportFullName, format);
|
bitmap.Save(exportFullName, format);
|
||||||
|
@ -271,13 +271,12 @@ namespace AssetStudio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportRawFile(AssetPreloadData asset, string exportPath)
|
public static bool ExportRawFile(ObjectReader reader, string exportPath)
|
||||||
{
|
{
|
||||||
var exportFullName = exportPath + asset.Text + ".dat";
|
var exportFullName = exportPath + reader.exportName + ".dat";
|
||||||
if (ExportFileExists(exportFullName))
|
if (ExportFileExists(exportFullName))
|
||||||
return false;
|
return false;
|
||||||
var bytes = asset.InitReader().ReadBytes((int)asset.Size);
|
File.WriteAllBytes(exportFullName, reader.GetRawData());
|
||||||
File.WriteAllBytes(exportFullName, bytes);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,15 +290,15 @@ namespace AssetStudio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportAnimator(AssetPreloadData animator, string exportPath, List<AssetPreloadData> animationList = null)
|
public static bool ExportAnimator(ObjectReader animator, string exportPath, List<AssetItem> animationList = null)
|
||||||
{
|
{
|
||||||
var m_Animator = new Animator(animator);
|
var m_Animator = new Animator(animator);
|
||||||
var convert = animationList != null ? new ModelConverter(m_Animator, animationList) : new ModelConverter(m_Animator);
|
var convert = animationList != null ? new ModelConverter(m_Animator, animationList) : new ModelConverter(m_Animator);
|
||||||
exportPath = exportPath + Studio.FixFileName(animator.Text) + ".fbx";
|
exportPath = exportPath + Studio.FixFileName(animator.exportName) + ".fbx";
|
||||||
return ModelConverter(convert, exportPath);
|
return ModelConverter(convert, exportPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ExportGameObject(GameObject gameObject, string exportPath, List<AssetPreloadData> animationList = null)
|
public static bool ExportGameObject(GameObject gameObject, string exportPath, List<AssetItem> animationList = null)
|
||||||
{
|
{
|
||||||
var convert = animationList != null ? new ModelConverter(gameObject, animationList) : new ModelConverter(gameObject);
|
var convert = animationList != null ? new ModelConverter(gameObject, animationList) : new ModelConverter(gameObject);
|
||||||
exportPath = exportPath + Studio.FixFileName(gameObject.m_Name) + ".fbx";
|
exportPath = exportPath + Studio.FixFileName(gameObject.m_Name) + ".fbx";
|
||||||
|
|
|
@ -20,12 +20,12 @@ namespace AssetStudio
|
||||||
|
|
||||||
private Avatar avatar;
|
private Avatar avatar;
|
||||||
private Dictionary<uint, string> morphChannelInfo = new Dictionary<uint, string>();
|
private Dictionary<uint, string> morphChannelInfo = new Dictionary<uint, string>();
|
||||||
private HashSet<AssetPreloadData> animationClipHashSet = new HashSet<AssetPreloadData>();
|
private HashSet<ObjectReader> animationClipHashSet = new HashSet<ObjectReader>();
|
||||||
private Dictionary<uint, string> bonePathHash = new Dictionary<uint, string>();
|
private Dictionary<uint, string> bonePathHash = new Dictionary<uint, string>();
|
||||||
|
|
||||||
public ModelConverter(GameObject m_GameObject)
|
public ModelConverter(GameObject m_GameObject)
|
||||||
{
|
{
|
||||||
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGetPD(out var m_Animator))
|
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGet(out var m_Animator))
|
||||||
{
|
{
|
||||||
var animator = new Animator(m_Animator);
|
var animator = new Animator(m_Animator);
|
||||||
InitWithAnimator(animator);
|
InitWithAnimator(animator);
|
||||||
|
@ -36,9 +36,9 @@ namespace AssetStudio
|
||||||
ConvertAnimations();
|
ConvertAnimations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelConverter(GameObject m_GameObject, List<AssetPreloadData> animationList)
|
public ModelConverter(GameObject m_GameObject, List<AssetItem> animationList)
|
||||||
{
|
{
|
||||||
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGetPD(out var m_Animator))
|
if (m_GameObject.m_Animator != null && m_GameObject.m_Animator.TryGet(out var m_Animator))
|
||||||
{
|
{
|
||||||
var animator = new Animator(m_Animator);
|
var animator = new Animator(m_Animator);
|
||||||
InitWithAnimator(animator);
|
InitWithAnimator(animator);
|
||||||
|
@ -47,7 +47,7 @@ namespace AssetStudio
|
||||||
InitWithGameObject(m_GameObject);
|
InitWithGameObject(m_GameObject);
|
||||||
foreach (var assetPreloadData in animationList)
|
foreach (var assetPreloadData in animationList)
|
||||||
{
|
{
|
||||||
animationClipHashSet.Add(assetPreloadData);
|
animationClipHashSet.Add(assetPreloadData.reader);
|
||||||
}
|
}
|
||||||
ConvertAnimations();
|
ConvertAnimations();
|
||||||
}
|
}
|
||||||
|
@ -59,19 +59,19 @@ namespace AssetStudio
|
||||||
ConvertAnimations();
|
ConvertAnimations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelConverter(Animator m_Animator, List<AssetPreloadData> animationList)
|
public ModelConverter(Animator m_Animator, List<AssetItem> animationList)
|
||||||
{
|
{
|
||||||
InitWithAnimator(m_Animator);
|
InitWithAnimator(m_Animator);
|
||||||
foreach (var assetPreloadData in animationList)
|
foreach (var assetPreloadData in animationList)
|
||||||
{
|
{
|
||||||
animationClipHashSet.Add(assetPreloadData);
|
animationClipHashSet.Add(assetPreloadData.reader);
|
||||||
}
|
}
|
||||||
ConvertAnimations();
|
ConvertAnimations();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitWithAnimator(Animator m_Animator)
|
private void InitWithAnimator(Animator m_Animator)
|
||||||
{
|
{
|
||||||
if (m_Animator.m_Avatar.TryGetPD(out var m_Avatar))
|
if (m_Animator.m_Avatar.TryGet(out var m_Avatar))
|
||||||
avatar = new Avatar(m_Avatar);
|
avatar = new Avatar(m_Avatar);
|
||||||
|
|
||||||
m_Animator.m_GameObject.TryGetGameObject(out var m_GameObject);
|
m_Animator.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||||
|
@ -124,28 +124,28 @@ namespace AssetStudio
|
||||||
m_Transform.m_GameObject.TryGetGameObject(out var m_GameObject);
|
m_Transform.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||||
foreach (var m_Component in m_GameObject.m_Components)
|
foreach (var m_Component in m_GameObject.m_Components)
|
||||||
{
|
{
|
||||||
if (m_Component.TryGetPD(out var assetPreloadData))
|
if (m_Component.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
switch (assetPreloadData.Type)
|
switch (objectReader.type)
|
||||||
{
|
{
|
||||||
case ClassIDType.MeshRenderer:
|
case ClassIDType.MeshRenderer:
|
||||||
{
|
{
|
||||||
var m_Renderer = new MeshRenderer(assetPreloadData);
|
var m_Renderer = new MeshRenderer(objectReader);
|
||||||
ConvertMeshRenderer(m_Renderer);
|
ConvertMeshRenderer(m_Renderer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.SkinnedMeshRenderer:
|
case ClassIDType.SkinnedMeshRenderer:
|
||||||
{
|
{
|
||||||
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(assetPreloadData);
|
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(objectReader);
|
||||||
ConvertMeshRenderer(m_SkinnedMeshRenderer);
|
ConvertMeshRenderer(m_SkinnedMeshRenderer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.Animation:
|
case ClassIDType.Animation:
|
||||||
{
|
{
|
||||||
var m_Animation = new Animation(assetPreloadData);
|
var m_Animation = new Animation(objectReader);
|
||||||
foreach (var animation in m_Animation.m_Animations)
|
foreach (var animation in m_Animation.m_Animations)
|
||||||
{
|
{
|
||||||
if (animation.TryGetPD(out var animationClip))
|
if (animation.TryGet(out var animationClip))
|
||||||
{
|
{
|
||||||
animationClipHashSet.Add(animationClip);
|
animationClipHashSet.Add(animationClip);
|
||||||
}
|
}
|
||||||
|
@ -164,19 +164,19 @@ namespace AssetStudio
|
||||||
|
|
||||||
private void CollectAnimationClip(Animator m_Animator)
|
private void CollectAnimationClip(Animator m_Animator)
|
||||||
{
|
{
|
||||||
if (m_Animator.m_Controller.TryGetPD(out var assetPreloadData))
|
if (m_Animator.m_Controller.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
if (assetPreloadData.Type == ClassIDType.AnimatorOverrideController)
|
if (objectReader.type == ClassIDType.AnimatorOverrideController)
|
||||||
{
|
{
|
||||||
var m_AnimatorOverrideController = new AnimatorOverrideController(assetPreloadData);
|
var m_AnimatorOverrideController = new AnimatorOverrideController(objectReader);
|
||||||
if (m_AnimatorOverrideController.m_Controller.TryGetPD(out assetPreloadData))
|
if (m_AnimatorOverrideController.m_Controller.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
var m_AnimatorController = new AnimatorController(assetPreloadData);
|
var m_AnimatorController = new AnimatorController(objectReader);
|
||||||
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
||||||
{
|
{
|
||||||
if (m_AnimationClip.TryGetPD(out assetPreloadData))
|
if (m_AnimationClip.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
animationClipHashSet.Add(assetPreloadData);
|
animationClipHashSet.Add(objectReader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,14 +188,14 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
else if (assetPreloadData.Type == ClassIDType.AnimatorController)
|
else if (objectReader.type == ClassIDType.AnimatorController)
|
||||||
{
|
{
|
||||||
var m_AnimatorController = new AnimatorController(assetPreloadData);
|
var m_AnimatorController = new AnimatorController(objectReader);
|
||||||
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
||||||
{
|
{
|
||||||
if (m_AnimationClip.TryGetPD(out assetPreloadData))
|
if (m_AnimationClip.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
animationClipHashSet.Add(assetPreloadData);
|
animationClipHashSet.Add(objectReader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -294,7 +294,7 @@ namespace AssetStudio
|
||||||
Material mat = null;
|
Material mat = null;
|
||||||
if (i - firstSubMesh < meshR.m_Materials.Length)
|
if (i - firstSubMesh < meshR.m_Materials.Length)
|
||||||
{
|
{
|
||||||
if (meshR.m_Materials[i - firstSubMesh].TryGetPD(out var MaterialPD))
|
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var MaterialPD))
|
||||||
{
|
{
|
||||||
mat = new Material(MaterialPD);
|
mat = new Material(MaterialPD);
|
||||||
}
|
}
|
||||||
|
@ -567,7 +567,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
if (meshR is SkinnedMeshRenderer sMesh)
|
if (meshR is SkinnedMeshRenderer sMesh)
|
||||||
{
|
{
|
||||||
if (sMesh.m_Mesh.TryGetPD(out var MeshPD))
|
if (sMesh.m_Mesh.TryGet(out var MeshPD))
|
||||||
{
|
{
|
||||||
return new Mesh(MeshPD);
|
return new Mesh(MeshPD);
|
||||||
}
|
}
|
||||||
|
@ -577,12 +577,12 @@ namespace AssetStudio
|
||||||
meshR.m_GameObject.TryGetGameObject(out var m_GameObject);
|
meshR.m_GameObject.TryGetGameObject(out var m_GameObject);
|
||||||
foreach (var m_Component in m_GameObject.m_Components)
|
foreach (var m_Component in m_GameObject.m_Components)
|
||||||
{
|
{
|
||||||
if (m_Component.TryGetPD(out var assetPreloadData))
|
if (m_Component.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
if (assetPreloadData.Type == ClassIDType.MeshFilter)
|
if (objectReader.type == ClassIDType.MeshFilter)
|
||||||
{
|
{
|
||||||
var m_MeshFilter = new MeshFilter(assetPreloadData);
|
var m_MeshFilter = new MeshFilter(objectReader);
|
||||||
if (m_MeshFilter.m_Mesh.TryGetPD(out var MeshPD))
|
if (m_MeshFilter.m_Mesh.TryGet(out var MeshPD))
|
||||||
{
|
{
|
||||||
return new Mesh(MeshPD);
|
return new Mesh(MeshPD);
|
||||||
}
|
}
|
||||||
|
@ -675,7 +675,7 @@ namespace AssetStudio
|
||||||
foreach (var texEnv in mat.m_TexEnvs)
|
foreach (var texEnv in mat.m_TexEnvs)
|
||||||
{
|
{
|
||||||
Texture2D tex2D = null;
|
Texture2D tex2D = null;
|
||||||
if (texEnv.m_Texture.TryGetPD(out var TexturePD) && TexturePD.Type == ClassIDType.Texture2D)//TODO other Texture
|
if (texEnv.m_Texture.TryGet(out var TexturePD) && TexturePD.type == ClassIDType.Texture2D)//TODO other Texture
|
||||||
{
|
{
|
||||||
tex2D = new Texture2D(TexturePD, true);
|
tex2D = new Texture2D(TexturePD, true);
|
||||||
}
|
}
|
||||||
|
@ -689,7 +689,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
iMat.Textures[dest] = TexturePD.Text + ".png";
|
iMat.Textures[dest] = TexturePD.exportName + ".png";
|
||||||
iMat.TexOffsets[dest] = new Vector2(texEnv.m_Offset[0], texEnv.m_Offset[1]);
|
iMat.TexOffsets[dest] = new Vector2(texEnv.m_Offset[0], texEnv.m_Offset[1]);
|
||||||
iMat.TexScales[dest] = new Vector2(texEnv.m_Scale[0], texEnv.m_Scale[1]);
|
iMat.TexScales[dest] = new Vector2(texEnv.m_Scale[0], texEnv.m_Scale[1]);
|
||||||
ConvertTexture2D(tex2D, iMat.Textures[dest]);
|
ConvertTexture2D(tex2D, iMat.Textures[dest]);
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
|
{
|
||||||
|
public class ObjectReader : EndianBinaryReader
|
||||||
|
{
|
||||||
|
public AssetsFile assetsFile;
|
||||||
|
public long m_PathID;
|
||||||
|
public uint byteStart;
|
||||||
|
public uint byteSize;
|
||||||
|
public ClassIDType type;
|
||||||
|
public SerializedType serializedType;
|
||||||
|
public BuildTarget platform;
|
||||||
|
private uint m_Version;
|
||||||
|
|
||||||
|
public int[] version => assetsFile.version;
|
||||||
|
public string[] buildType => assetsFile.buildType;
|
||||||
|
|
||||||
|
public string exportName; //TODO Remove it
|
||||||
|
|
||||||
|
public ObjectReader(EndianBinaryReader reader, AssetsFile assetsFile, ObjectInfo objectInfo) : base(reader.BaseStream, reader.endian)
|
||||||
|
{
|
||||||
|
this.assetsFile = assetsFile;
|
||||||
|
m_PathID = objectInfo.m_PathID;
|
||||||
|
byteStart = objectInfo.byteStart;
|
||||||
|
byteSize = objectInfo.byteSize;
|
||||||
|
if (Enum.IsDefined(typeof(ClassIDType), objectInfo.classID))
|
||||||
|
{
|
||||||
|
type = (ClassIDType)objectInfo.classID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
type = ClassIDType.UnknownType;
|
||||||
|
}
|
||||||
|
serializedType = objectInfo.serializedType;
|
||||||
|
platform = assetsFile.m_TargetPlatform;
|
||||||
|
m_Version = assetsFile.header.m_Version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
Position = byteStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Dump()
|
||||||
|
{
|
||||||
|
Reset();
|
||||||
|
if (serializedType?.m_Nodes != null)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
TypeTreeHelper.ReadTypeString(sb, serializedType.m_Nodes, this);
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasStructMember(string name)
|
||||||
|
{
|
||||||
|
return serializedType?.m_Nodes != null && serializedType.m_Nodes.Any(x => x.m_Name == name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PPtr ReadPPtr()
|
||||||
|
{
|
||||||
|
return new PPtr
|
||||||
|
{
|
||||||
|
m_FileID = ReadInt32(),
|
||||||
|
m_PathID = m_Version < 14 ? ReadInt32() : ReadInt64(),
|
||||||
|
assetsFile = assetsFile
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] GetRawData()
|
||||||
|
{
|
||||||
|
Reset();
|
||||||
|
return ReadBytes((int)byteSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ namespace AssetStudio
|
||||||
public AssetsFile assetsFile;
|
public AssetsFile assetsFile;
|
||||||
public int index = -2; //-2 - Prepare, -1 - Missing
|
public int index = -2; //-2 - Prepare, -1 - Missing
|
||||||
|
|
||||||
private bool TryGet(out AssetsFile result)
|
private bool TryGetAssetsFile(out AssetsFile result)
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
if (m_FileID == 0)
|
if (m_FileID == 0)
|
||||||
|
@ -43,12 +43,12 @@ namespace AssetStudio
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryGetPD(out AssetPreloadData result)
|
public bool TryGet(out ObjectReader result)
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
if (TryGet(out var sourceFile))
|
if (TryGetAssetsFile(out var sourceFile))
|
||||||
{
|
{
|
||||||
if (sourceFile.preloadTable.TryGetValue(m_PathID, out result))
|
if (sourceFile.ObjectReaders.TryGetValue(m_PathID, out result))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -59,9 +59,9 @@ namespace AssetStudio
|
||||||
|
|
||||||
public bool TryGetTransform(out Transform m_Transform)
|
public bool TryGetTransform(out Transform m_Transform)
|
||||||
{
|
{
|
||||||
if (TryGet(out var sourceFile))
|
if (TryGetAssetsFile(out var sourceFile))
|
||||||
{
|
{
|
||||||
if (sourceFile.TransformList.TryGetValue(m_PathID, out m_Transform))
|
if (sourceFile.Transforms.TryGetValue(m_PathID, out m_Transform))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -73,9 +73,9 @@ namespace AssetStudio
|
||||||
|
|
||||||
public bool TryGetGameObject(out GameObject m_GameObject)
|
public bool TryGetGameObject(out GameObject m_GameObject)
|
||||||
{
|
{
|
||||||
if (TryGet(out var sourceFile))
|
if (TryGetAssetsFile(out var sourceFile))
|
||||||
{
|
{
|
||||||
if (sourceFile.GameObjectList.TryGetValue(m_PathID, out m_GameObject))
|
if (sourceFile.GameObjects.TryGetValue(m_PathID, out m_GameObject))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,39 +12,39 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
public static Bitmap GetImageFromSprite(Sprite m_Sprite)
|
public static Bitmap GetImageFromSprite(Sprite m_Sprite)
|
||||||
{
|
{
|
||||||
if (m_Sprite.m_SpriteAtlas != null && m_Sprite.m_SpriteAtlas.TryGetPD(out var assetPreloadData))
|
if (m_Sprite.m_SpriteAtlas != null && m_Sprite.m_SpriteAtlas.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
var m_SpriteAtlas = new SpriteAtlas(assetPreloadData);
|
var m_SpriteAtlas = new SpriteAtlas(objectReader);
|
||||||
var index = m_SpriteAtlas.guids.FindIndex(x => x == m_Sprite.first);
|
var index = m_SpriteAtlas.guids.FindIndex(x => x == m_Sprite.first);
|
||||||
|
|
||||||
if (index >= 0 && m_SpriteAtlas.textures[index].TryGetPD(out assetPreloadData))
|
if (index >= 0 && m_SpriteAtlas.textures[index].TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (m_Sprite.m_PhysicsShape.Length > 0)
|
if (m_Sprite.m_PhysicsShape.Length > 0)
|
||||||
{
|
{
|
||||||
return CutImage(assetPreloadData, m_SpriteAtlas.textureRects[index], m_Sprite);
|
return CutImage(objectReader, m_SpriteAtlas.textureRects[index], m_Sprite);
|
||||||
}
|
}
|
||||||
return CutImage(assetPreloadData, m_SpriteAtlas.textureRects[index]);
|
return CutImage(objectReader, m_SpriteAtlas.textureRects[index]);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
return CutImage(assetPreloadData, m_SpriteAtlas.textureRects[index]);
|
return CutImage(objectReader, m_SpriteAtlas.textureRects[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_Sprite.texture.TryGetPD(out assetPreloadData))
|
if (m_Sprite.texture.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
return CutImage(assetPreloadData, m_Sprite.textureRect);
|
return CutImage(objectReader, m_Sprite.textureRect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Bitmap CutImage(AssetPreloadData texture2DAsset, RectangleF textureRect)
|
private static Bitmap CutImage(ObjectReader texture2DAsset, RectangleF textureRect)
|
||||||
{
|
{
|
||||||
var texture2D = new Texture2DConverter(new Texture2D(texture2DAsset, true));
|
var texture2D = new Texture2DConverter(new Texture2D(texture2DAsset, true));
|
||||||
using (var originalImage = texture2D.ConvertToBitmap(false))
|
using (var originalImage = texture2D.ConvertToBitmap(false))
|
||||||
|
@ -60,7 +60,7 @@ namespace AssetStudio
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Bitmap CutImage(AssetPreloadData texture2DAsset, RectangleF textureRect, Sprite sprite)
|
private static Bitmap CutImage(ObjectReader texture2DAsset, RectangleF textureRect, Sprite sprite)
|
||||||
{
|
{
|
||||||
var texture2D = new Texture2DConverter(new Texture2D(texture2DAsset, true));
|
var texture2D = new Texture2DConverter(new Texture2D(texture2DAsset, true));
|
||||||
using (var originalImage = texture2D.ConvertToBitmap(false))
|
using (var originalImage = texture2D.ConvertToBitmap(false))
|
||||||
|
|
|
@ -17,9 +17,9 @@ namespace AssetStudio
|
||||||
public static List<AssetsFile> assetsfileList = new List<AssetsFile>(); //loaded files
|
public static List<AssetsFile> assetsfileList = new List<AssetsFile>(); //loaded files
|
||||||
public static Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>();
|
public static Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>();
|
||||||
public static Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>(); //use for read res files
|
public static Dictionary<string, EndianBinaryReader> resourceFileReaders = new Dictionary<string, EndianBinaryReader>(); //use for read res files
|
||||||
public static List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>(); //used to hold all assets while the ListView is filtered
|
public static List<AssetItem> exportableAssets = new List<AssetItem>(); //used to hold all assets while the ListView is filtered
|
||||||
private static HashSet<string> assetsNameHash = new HashSet<string>(); //avoid the same name asset
|
private static HashSet<string> assetsNameHash = new HashSet<string>(); //avoid the same name asset
|
||||||
public static List<AssetPreloadData> visibleAssets = new List<AssetPreloadData>(); //used to build the ListView from all or filtered assets
|
public static List<AssetItem> visibleAssets = new List<AssetItem>(); //used to build the ListView from all or filtered assets
|
||||||
public static Dictionary<string, SortedDictionary<int, TypeTreeItem>> AllTypeMap = new Dictionary<string, SortedDictionary<int, TypeTreeItem>>();
|
public static Dictionary<string, SortedDictionary<int, TypeTreeItem>> AllTypeMap = new Dictionary<string, SortedDictionary<int, TypeTreeItem>>();
|
||||||
public static string mainPath;
|
public static string mainPath;
|
||||||
public static string productName = "";
|
public static string productName = "";
|
||||||
|
@ -157,65 +157,70 @@ namespace AssetStudio
|
||||||
|
|
||||||
public static void BuildAssetStructures(bool loadAssets, bool displayAll, bool buildHierarchy, bool buildClassStructures, bool displayOriginalName)
|
public static void BuildAssetStructures(bool loadAssets, bool displayAll, bool buildHierarchy, bool buildClassStructures, bool displayOriginalName)
|
||||||
{
|
{
|
||||||
#region first loop - read asset data & create list
|
var tempDic = new Dictionary<ObjectReader, AssetItem>();
|
||||||
|
// first loop - read asset data & create list
|
||||||
if (loadAssets)
|
if (loadAssets)
|
||||||
{
|
{
|
||||||
SetProgressBarValue(0);
|
SetProgressBarValue(0);
|
||||||
SetProgressBarMaximum(assetsfileList.Sum(x => x.preloadTable.Values.Count));
|
SetProgressBarMaximum(assetsfileList.Sum(x => x.ObjectReaders.Count));
|
||||||
StatusStripUpdate("Building asset list...");
|
StatusStripUpdate("Building asset list...");
|
||||||
|
|
||||||
string fileIDfmt = "D" + assetsfileList.Count.ToString().Length;
|
var fileIDfmt = "D" + assetsfileList.Count.ToString().Length;
|
||||||
|
|
||||||
for (var i = 0; i < assetsfileList.Count; i++)
|
for (var i = 0; i < assetsfileList.Count; i++)
|
||||||
{
|
{
|
||||||
var assetsFile = assetsfileList[i];
|
var assetsFile = assetsfileList[i];
|
||||||
|
var tempExportableAssets = new List<AssetItem>();
|
||||||
string fileID = i.ToString(fileIDfmt);
|
var fileID = i.ToString(fileIDfmt);
|
||||||
AssetBundle ab = null;
|
AssetBundle ab = null;
|
||||||
foreach (var asset in assetsFile.preloadTable.Values)
|
var j = 0;
|
||||||
|
var assetIDfmt = "D" + assetsFile.m_Objects.Count.ToString().Length;
|
||||||
|
foreach (var objectReader in assetsFile.ObjectReaders.Values)
|
||||||
{
|
{
|
||||||
asset.uniqueID = fileID + asset.uniqueID;
|
var assetItem = new AssetItem(objectReader);
|
||||||
|
tempDic.Add(objectReader, assetItem);
|
||||||
|
assetItem.UniqueID = fileID + j.ToString(assetIDfmt);
|
||||||
var exportable = false;
|
var exportable = false;
|
||||||
switch (asset.Type)
|
switch (assetItem.Type)
|
||||||
{
|
{
|
||||||
case ClassIDType.GameObject:
|
case ClassIDType.GameObject:
|
||||||
{
|
{
|
||||||
var m_GameObject = new GameObject(asset);
|
var m_GameObject = new GameObject(objectReader);
|
||||||
asset.Text = m_GameObject.m_Name;
|
assetItem.Text = m_GameObject.m_Name;
|
||||||
assetsFile.GameObjectList.Add(asset.m_PathID, m_GameObject);
|
assetsFile.GameObjects.Add(objectReader.m_PathID, m_GameObject);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.Transform:
|
case ClassIDType.Transform:
|
||||||
{
|
{
|
||||||
var m_Transform = new Transform(asset);
|
var m_Transform = new Transform(objectReader);
|
||||||
assetsFile.TransformList.Add(asset.m_PathID, m_Transform);
|
assetsFile.Transforms.Add(objectReader.m_PathID, m_Transform);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.RectTransform:
|
case ClassIDType.RectTransform:
|
||||||
{
|
{
|
||||||
var m_Rect = new RectTransform(asset);
|
var m_Rect = new RectTransform(objectReader);
|
||||||
assetsFile.TransformList.Add(asset.m_PathID, m_Rect);
|
assetsFile.Transforms.Add(objectReader.m_PathID, m_Rect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
{
|
{
|
||||||
var m_Texture2D = new Texture2D(asset, false);
|
var m_Texture2D = new Texture2D(objectReader, false);
|
||||||
if (!string.IsNullOrEmpty(m_Texture2D.path))
|
if (!string.IsNullOrEmpty(m_Texture2D.path))
|
||||||
asset.FullSize = asset.Size + m_Texture2D.size;
|
assetItem.FullSize = objectReader.byteSize + m_Texture2D.size;
|
||||||
goto case ClassIDType.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDType.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
{
|
{
|
||||||
var m_AudioClip = new AudioClip(asset, false);
|
var m_AudioClip = new AudioClip(objectReader, false);
|
||||||
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
||||||
asset.FullSize = asset.Size + m_AudioClip.m_Size;
|
assetItem.FullSize = objectReader.byteSize + m_AudioClip.m_Size;
|
||||||
goto case ClassIDType.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDType.VideoClip:
|
case ClassIDType.VideoClip:
|
||||||
{
|
{
|
||||||
var m_VideoClip = new VideoClip(asset, false);
|
var m_VideoClip = new VideoClip(objectReader, false);
|
||||||
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
||||||
asset.FullSize = asset.Size + (long)m_VideoClip.m_Size;
|
assetItem.FullSize = objectReader.byteSize + (long)m_VideoClip.m_Size;
|
||||||
goto case ClassIDType.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDType.NamedObject:
|
case ClassIDType.NamedObject:
|
||||||
|
@ -227,8 +232,8 @@ namespace AssetStudio
|
||||||
case ClassIDType.MovieTexture:
|
case ClassIDType.MovieTexture:
|
||||||
case ClassIDType.Sprite:
|
case ClassIDType.Sprite:
|
||||||
{
|
{
|
||||||
var obj = new NamedObject(asset);
|
var obj = new NamedObject(objectReader);
|
||||||
asset.Text = obj.m_Name;
|
assetItem.Text = obj.m_Name;
|
||||||
exportable = true;
|
exportable = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -239,8 +244,8 @@ namespace AssetStudio
|
||||||
case ClassIDType.MonoScript:
|
case ClassIDType.MonoScript:
|
||||||
case ClassIDType.SpriteAtlas:
|
case ClassIDType.SpriteAtlas:
|
||||||
{
|
{
|
||||||
var obj = new NamedObject(asset);
|
var obj = new NamedObject(objectReader);
|
||||||
asset.Text = obj.m_Name;
|
assetItem.Text = obj.m_Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.Animator:
|
case ClassIDType.Animator:
|
||||||
|
@ -250,78 +255,82 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
case ClassIDType.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
{
|
{
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
var m_MonoBehaviour = new MonoBehaviour(objectReader);
|
||||||
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGetPD(out var script))
|
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGet(out var script))
|
||||||
{
|
{
|
||||||
var m_Script = new MonoScript(script);
|
var m_Script = new MonoScript(script);
|
||||||
asset.Text = m_Script.m_ClassName;
|
assetItem.Text = m_Script.m_ClassName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asset.Text = m_MonoBehaviour.m_Name;
|
assetItem.Text = m_MonoBehaviour.m_Name;
|
||||||
}
|
}
|
||||||
exportable = true;
|
exportable = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.PlayerSettings:
|
case ClassIDType.PlayerSettings:
|
||||||
{
|
{
|
||||||
var plSet = new PlayerSettings(asset);
|
var plSet = new PlayerSettings(objectReader);
|
||||||
productName = plSet.productName;
|
productName = plSet.productName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDType.AssetBundle:
|
case ClassIDType.AssetBundle:
|
||||||
{
|
{
|
||||||
ab = new AssetBundle(asset);
|
ab = new AssetBundle(objectReader);
|
||||||
asset.Text = ab.m_Name;
|
assetItem.Text = ab.m_Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (asset.Text == "")
|
if (assetItem.Text == "")
|
||||||
{
|
{
|
||||||
asset.Text = asset.TypeString + " #" + asset.uniqueID;
|
assetItem.Text = assetItem.TypeString + " #" + assetItem.UniqueID;
|
||||||
}
|
}
|
||||||
asset.SubItems.AddRange(new[] { asset.TypeString, asset.FullSize.ToString() });
|
assetItem.SubItems.AddRange(new[] { assetItem.TypeString, assetItem.FullSize.ToString() });
|
||||||
//处理同名文件
|
//处理同名文件
|
||||||
if (!assetsNameHash.Add((asset.TypeString + asset.Text).ToUpper()))
|
if (!assetsNameHash.Add((assetItem.TypeString + assetItem.Text).ToUpper()))
|
||||||
{
|
{
|
||||||
asset.Text += " #" + asset.uniqueID;
|
assetItem.Text += " #" + assetItem.UniqueID;
|
||||||
}
|
}
|
||||||
//处理非法文件名
|
//处理非法文件名
|
||||||
asset.Text = FixFileName(asset.Text);
|
assetItem.Text = FixFileName(assetItem.Text);
|
||||||
if (displayAll)
|
if (displayAll)
|
||||||
{
|
{
|
||||||
exportable = true;
|
exportable = true;
|
||||||
}
|
}
|
||||||
if (exportable)
|
if (exportable)
|
||||||
{
|
{
|
||||||
assetsFile.exportableAssets.Add(asset);
|
tempExportableAssets.Add(assetItem);
|
||||||
}
|
}
|
||||||
|
objectReader.exportName = assetItem.Text;
|
||||||
|
|
||||||
ProgressBarPerformStep();
|
ProgressBarPerformStep();
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
if (displayOriginalName)
|
if (displayOriginalName)
|
||||||
{
|
{
|
||||||
assetsFile.exportableAssets.ForEach(x =>
|
foreach (var x in tempExportableAssets)
|
||||||
{
|
{
|
||||||
var replacename = ab?.m_Container.Find(y => y.second.asset.m_PathID == x.m_PathID)?.first;
|
var replacename = ab?.m_Container.Find(y => y.second.asset.m_PathID == x.reader.m_PathID)?.first;
|
||||||
if (!string.IsNullOrEmpty(replacename))
|
if (!string.IsNullOrEmpty(replacename))
|
||||||
{
|
{
|
||||||
var ex = Path.GetExtension(replacename);
|
var ex = Path.GetExtension(replacename);
|
||||||
x.Text = !string.IsNullOrEmpty(ex) ? replacename.Replace(ex, "") : replacename;
|
x.Text = !string.IsNullOrEmpty(ex) ? replacename.Replace(ex, "") : replacename;
|
||||||
|
x.reader.exportName = x.Text;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
exportableAssets.AddRange(assetsFile.exportableAssets);
|
exportableAssets.AddRange(tempExportableAssets);
|
||||||
|
tempExportableAssets.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
visibleAssets = exportableAssets;
|
visibleAssets = exportableAssets;
|
||||||
assetsNameHash.Clear();
|
assetsNameHash.Clear();
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region second loop - build tree structure
|
// second loop - build tree structure
|
||||||
if (buildHierarchy)
|
if (buildHierarchy)
|
||||||
{
|
{
|
||||||
var gameObjectCount = assetsfileList.Sum(x => x.GameObjectList.Values.Count);
|
var gameObjectCount = assetsfileList.Sum(x => x.GameObjects.Count);
|
||||||
if (gameObjectCount > 0)
|
if (gameObjectCount > 0)
|
||||||
{
|
{
|
||||||
SetProgressBarValue(0);
|
SetProgressBarValue(0);
|
||||||
|
@ -333,13 +342,13 @@ namespace AssetStudio
|
||||||
var fileNode = new GameObjectTreeNode(null); //RootNode
|
var fileNode = new GameObjectTreeNode(null); //RootNode
|
||||||
fileNode.Text = assetsFile.fileName;
|
fileNode.Text = assetsFile.fileName;
|
||||||
|
|
||||||
foreach (var m_GameObject in assetsFile.GameObjectList.Values)
|
foreach (var m_GameObject in assetsFile.GameObjects.Values)
|
||||||
{
|
{
|
||||||
foreach (var m_Component in m_GameObject.m_Components)
|
foreach (var m_Component in m_GameObject.m_Components)
|
||||||
{
|
{
|
||||||
if (m_Component.TryGetPD(out var asset))
|
if (m_Component.TryGet(out var asset))
|
||||||
{
|
{
|
||||||
switch (asset.Type)
|
switch (asset.type)
|
||||||
{
|
{
|
||||||
case ClassIDType.Transform:
|
case ClassIDType.Transform:
|
||||||
{
|
{
|
||||||
|
@ -354,12 +363,13 @@ namespace AssetStudio
|
||||||
case ClassIDType.MeshFilter:
|
case ClassIDType.MeshFilter:
|
||||||
{
|
{
|
||||||
m_GameObject.m_MeshFilter = m_Component;
|
m_GameObject.m_MeshFilter = m_Component;
|
||||||
if (m_Component.TryGetPD(out var assetPreloadData))
|
if (m_Component.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
var m_MeshFilter = new MeshFilter(assetPreloadData);
|
var m_MeshFilter = new MeshFilter(objectReader);
|
||||||
if (m_MeshFilter.m_Mesh.TryGetPD(out assetPreloadData))
|
if (m_MeshFilter.m_Mesh.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
assetPreloadData.gameObject = m_GameObject;
|
var item = tempDic[objectReader];
|
||||||
|
item.gameObject = m_GameObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -367,12 +377,13 @@ namespace AssetStudio
|
||||||
case ClassIDType.SkinnedMeshRenderer:
|
case ClassIDType.SkinnedMeshRenderer:
|
||||||
{
|
{
|
||||||
m_GameObject.m_SkinnedMeshRenderer = m_Component;
|
m_GameObject.m_SkinnedMeshRenderer = m_Component;
|
||||||
if (m_Component.TryGetPD(out var assetPreloadData))
|
if (m_Component.TryGet(out var objectReader))
|
||||||
{
|
{
|
||||||
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(assetPreloadData);
|
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(objectReader);
|
||||||
if (m_SkinnedMeshRenderer.m_Mesh.TryGetPD(out assetPreloadData))
|
if (m_SkinnedMeshRenderer.m_Mesh.TryGet(out objectReader))
|
||||||
{
|
{
|
||||||
assetPreloadData.gameObject = m_GameObject;
|
var item = tempDic[objectReader];
|
||||||
|
item.gameObject = m_GameObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -380,7 +391,9 @@ namespace AssetStudio
|
||||||
case ClassIDType.Animator:
|
case ClassIDType.Animator:
|
||||||
{
|
{
|
||||||
m_GameObject.m_Animator = m_Component;
|
m_GameObject.m_Animator = m_Component;
|
||||||
asset.Text = m_GameObject.preloadData.Text;
|
var item = tempDic[asset];
|
||||||
|
item.Text = m_GameObject.reader.exportName;
|
||||||
|
asset.exportName = m_GameObject.reader.exportName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -410,6 +423,7 @@ namespace AssetStudio
|
||||||
treeNodeDictionary.Add(m_GameObject, currentNode);
|
treeNodeDictionary.Add(m_GameObject, currentNode);
|
||||||
}
|
}
|
||||||
parentNode.Nodes.Add(currentNode);
|
parentNode.Nodes.Add(currentNode);
|
||||||
|
|
||||||
ProgressBarPerformStep();
|
ProgressBarPerformStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,9 +434,9 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
tempDic.Clear();
|
||||||
|
|
||||||
#region build list of class strucutres
|
// build list of class strucutres
|
||||||
if (buildClassStructures)
|
if (buildClassStructures)
|
||||||
{
|
{
|
||||||
foreach (var assetsFile in assetsfileList)
|
foreach (var assetsFile in assetsfileList)
|
||||||
|
@ -455,7 +469,6 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string FixFileName(string str)
|
public static string FixFileName(string str)
|
||||||
|
@ -481,7 +494,7 @@ namespace AssetStudio
|
||||||
return selectFile.Distinct().ToArray();
|
return selectFile.Distinct().ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ExportAssets(string savePath, List<AssetPreloadData> toExportAssets, int assetGroupSelectedIndex, bool openAfterExport)
|
public static void ExportAssets(string savePath, List<AssetItem> toExportAssets, int assetGroupSelectedIndex, bool openAfterExport)
|
||||||
{
|
{
|
||||||
ThreadPool.QueueUserWorkItem(state =>
|
ThreadPool.QueueUserWorkItem(state =>
|
||||||
{
|
{
|
||||||
|
@ -504,72 +517,73 @@ namespace AssetStudio
|
||||||
exportpath = savePath + "\\" + asset.TypeString + "\\";
|
exportpath = savePath + "\\" + asset.TypeString + "\\";
|
||||||
}
|
}
|
||||||
StatusStripUpdate($"Exporting {asset.TypeString}: {asset.Text}");
|
StatusStripUpdate($"Exporting {asset.TypeString}: {asset.Text}");
|
||||||
|
var reader = asset.reader;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDType.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
if (ExportTexture2D(asset, exportpath, true))
|
if (ExportTexture2D(reader, exportpath, true))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
if (ExportAudioClip(asset, exportpath))
|
if (ExportAudioClip(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.Shader:
|
case ClassIDType.Shader:
|
||||||
if (ExportShader(asset, exportpath))
|
if (ExportShader(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
if (ExportTextAsset(asset, exportpath))
|
if (ExportTextAsset(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
if (ExportMonoBehaviour(asset, exportpath))
|
if (ExportMonoBehaviour(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.Font:
|
case ClassIDType.Font:
|
||||||
if (ExportFont(asset, exportpath))
|
if (ExportFont(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.Mesh:
|
case ClassIDType.Mesh:
|
||||||
if (ExportMesh(asset, exportpath))
|
if (ExportMesh(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.VideoClip:
|
case ClassIDType.VideoClip:
|
||||||
if (ExportVideoClip(asset, exportpath))
|
if (ExportVideoClip(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.MovieTexture:
|
case ClassIDType.MovieTexture:
|
||||||
if (ExportMovieTexture(asset, exportpath))
|
if (ExportMovieTexture(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.Sprite:
|
case ClassIDType.Sprite:
|
||||||
if (ExportSprite(asset, exportpath))
|
if (ExportSprite(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDType.Animator:
|
case ClassIDType.Animator:
|
||||||
if (ExportAnimator(asset, exportpath))
|
if (ExportAnimator(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
|
@ -577,7 +591,7 @@ namespace AssetStudio
|
||||||
case ClassIDType.AnimationClip:
|
case ClassIDType.AnimationClip:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (ExportRawFile(asset, exportpath))
|
if (ExportRawFile(reader, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
|
@ -667,14 +681,14 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ExportAnimatorWithAnimationClip(AssetPreloadData animator, List<AssetPreloadData> animationList, string exportPath)
|
public static void ExportAnimatorWithAnimationClip(AssetItem animator, List<AssetItem> animationList, string exportPath)
|
||||||
{
|
{
|
||||||
ThreadPool.QueueUserWorkItem(state =>
|
ThreadPool.QueueUserWorkItem(state =>
|
||||||
{
|
{
|
||||||
StatusStripUpdate($"Exporting {animator.Text}");
|
StatusStripUpdate($"Exporting {animator.Text}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ExportAnimator(animator, exportPath, animationList);
|
ExportAnimator(animator.reader, exportPath, animationList);
|
||||||
StatusStripUpdate($"Finished exporting {animator.Text}");
|
StatusStripUpdate($"Finished exporting {animator.Text}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -686,7 +700,7 @@ namespace AssetStudio
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ExportObjectsWithAnimationClip(string exportPath, TreeNodeCollection nodes, List<AssetPreloadData> animationList = null)
|
public static void ExportObjectsWithAnimationClip(string exportPath, TreeNodeCollection nodes, List<AssetItem> animationList = null)
|
||||||
{
|
{
|
||||||
ThreadPool.QueueUserWorkItem(state =>
|
ThreadPool.QueueUserWorkItem(state =>
|
||||||
{
|
{
|
||||||
|
@ -777,7 +791,7 @@ namespace AssetStudio
|
||||||
return new[] { (float)(eax * 180 / Math.PI), (float)(eay * 180 / Math.PI), (float)(eaz * 180 / Math.PI) };
|
return new[] { (float)(eax * 180 / Math.PI), (float)(eay * 180 / Math.PI), (float)(eaz * 180 / Math.PI) };
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetScriptString(AssetPreloadData assetPreloadData)
|
public static string GetScriptString(ObjectReader reader)
|
||||||
{
|
{
|
||||||
if (!moduleLoaded)
|
if (!moduleLoaded)
|
||||||
{
|
{
|
||||||
|
@ -807,7 +821,7 @@ namespace AssetStudio
|
||||||
|
|
||||||
moduleLoaded = true;
|
moduleLoaded = true;
|
||||||
}
|
}
|
||||||
var m_MonoBehaviour = new MonoBehaviour(assetPreloadData);
|
var m_MonoBehaviour = new MonoBehaviour(reader);
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.AppendLine("PPtr<GameObject> m_GameObject");
|
sb.AppendLine("PPtr<GameObject> m_GameObject");
|
||||||
sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_GameObject.m_FileID}");
|
sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_GameObject.m_FileID}");
|
||||||
|
@ -817,7 +831,7 @@ namespace AssetStudio
|
||||||
sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_Script.m_FileID}");
|
sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_Script.m_FileID}");
|
||||||
sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_Script.m_PathID}");
|
sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_Script.m_PathID}");
|
||||||
sb.AppendLine($"string m_Name = \"{m_MonoBehaviour.m_Name}\"");
|
sb.AppendLine($"string m_Name = \"{m_MonoBehaviour.m_Name}\"");
|
||||||
if (m_MonoBehaviour.m_Script.TryGetPD(out var script))
|
if (m_MonoBehaviour.m_Script.TryGet(out var script))
|
||||||
{
|
{
|
||||||
var m_Script = new MonoScript(script);
|
var m_Script = new MonoScript(script);
|
||||||
if (!LoadedModuleDic.TryGetValue(m_Script.m_AssemblyName, out var module))
|
if (!LoadedModuleDic.TryGetValue(m_Script.m_AssemblyName, out var module))
|
||||||
|
@ -849,7 +863,7 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DumpType(typeDef.ToTypeSig(), sb, assetPreloadData.sourceFile, null, -1, true);
|
DumpType(typeDef.ToTypeSig(), sb, reader, null, -1, true);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@ -868,10 +882,9 @@ namespace AssetStudio
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void DumpType(TypeSig typeSig, StringBuilder sb, AssetsFile assetsFile, string name, int indent, bool isRoot = false)
|
private static void DumpType(TypeSig typeSig, StringBuilder sb, ObjectReader reader, string name, int indent, bool isRoot = false)
|
||||||
{
|
{
|
||||||
var typeDef = typeSig.ToTypeDefOrRef().ResolveTypeDefThrow();
|
var typeDef = typeSig.ToTypeDefOrRef().ResolveTypeDefThrow();
|
||||||
var reader = assetsFile.reader;
|
|
||||||
if (typeSig.IsPrimitive)
|
if (typeSig.IsPrimitive)
|
||||||
{
|
{
|
||||||
object value = null;
|
object value = null;
|
||||||
|
@ -944,7 +957,7 @@ namespace AssetStudio
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent + 2)}[{i}]");
|
sb.AppendLine($"{new string('\t', indent + 2)}[{i}]");
|
||||||
DumpType(typeDef.ToTypeSig(), sb, assetsFile, "data", indent + 2);
|
DumpType(typeDef.ToTypeSig(), sb, reader, "data", indent + 2);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -964,14 +977,14 @@ namespace AssetStudio
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent + 2)}[{i}]");
|
sb.AppendLine($"{new string('\t', indent + 2)}[{i}]");
|
||||||
DumpType(genericInstSig.GenericArguments[0], sb, assetsFile, "data", indent + 2);
|
DumpType(genericInstSig.GenericArguments[0], sb, reader, "data", indent + 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (indent != -1 && IsAssignFromUnityObject(typeDef))
|
if (indent != -1 && IsAssignFromUnityObject(typeDef))
|
||||||
{
|
{
|
||||||
var pptr = assetsFile.ReadPPtr();
|
var pptr = reader.ReadPPtr();
|
||||||
sb.AppendLine($"{new string('\t', indent)}PPtr<{typeDef.Name}> {name} = {{fileID: {pptr.m_FileID}, pathID: {pptr.m_PathID}}}");
|
sb.AppendLine($"{new string('\t', indent)}PPtr<{typeDef.Name}> {name} = {{fileID: {pptr.m_FileID}, pathID: {pptr.m_PathID}}}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -999,15 +1012,15 @@ namespace AssetStudio
|
||||||
if (typeDef.FullName == "UnityEngine.AnimationCurve")
|
if (typeDef.FullName == "UnityEngine.AnimationCurve")
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
var animationCurve = new AnimationCurve<float>(reader, reader.ReadSingle, assetsFile.version);
|
var animationCurve = new AnimationCurve<float>(reader, reader.ReadSingle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (typeDef.FullName == "UnityEngine.Gradient")
|
if (typeDef.FullName == "UnityEngine.Gradient")
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
if (assetsFile.version[0] == 5 && assetsFile.version[1] < 5)
|
if (reader.version[0] == 5 && reader.version[1] < 5)
|
||||||
reader.Position += 68;
|
reader.Position += 68;
|
||||||
else if (assetsFile.version[0] == 5 && assetsFile.version[1] < 6)
|
else if (reader.version[0] == 5 && reader.version[1] < 6)
|
||||||
reader.Position += 72;
|
reader.Position += 72;
|
||||||
else
|
else
|
||||||
reader.Position += 168;
|
reader.Position += 168;
|
||||||
|
@ -1034,11 +1047,11 @@ namespace AssetStudio
|
||||||
}
|
}
|
||||||
if (indent == -1 && typeDef.BaseType.FullName != "UnityEngine.Object")
|
if (indent == -1 && typeDef.BaseType.FullName != "UnityEngine.Object")
|
||||||
{
|
{
|
||||||
DumpType(typeDef.BaseType.ToTypeSig(), sb, assetsFile, null, indent, true);
|
DumpType(typeDef.BaseType.ToTypeSig(), sb, reader, null, indent, true);
|
||||||
}
|
}
|
||||||
if (indent != -1 && typeDef.BaseType.FullName != "System.Object")
|
if (indent != -1 && typeDef.BaseType.FullName != "System.Object")
|
||||||
{
|
{
|
||||||
DumpType(typeDef.BaseType.ToTypeSig(), sb, assetsFile, null, indent, true);
|
DumpType(typeDef.BaseType.ToTypeSig(), sb, reader, null, indent, true);
|
||||||
}
|
}
|
||||||
foreach (var fieldDef in typeDef.Fields)
|
foreach (var fieldDef in typeDef.Fields)
|
||||||
{
|
{
|
||||||
|
@ -1047,12 +1060,12 @@ namespace AssetStudio
|
||||||
{
|
{
|
||||||
if (fieldDef.CustomAttributes.Any(x => x.TypeFullName.Contains("SerializeField")))
|
if (fieldDef.CustomAttributes.Any(x => x.TypeFullName.Contains("SerializeField")))
|
||||||
{
|
{
|
||||||
DumpType(fieldDef.FieldType, sb, assetsFile, fieldDef.Name, indent + 1);
|
DumpType(fieldDef.FieldType, sb, reader, fieldDef.Name, indent + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((fieldDef.Attributes & FieldAttributes.Static) == 0 && (fieldDef.Attributes & FieldAttributes.InitOnly) == 0 && (fieldDef.Attributes & FieldAttributes.NotSerialized) == 0)
|
else if ((fieldDef.Attributes & FieldAttributes.Static) == 0 && (fieldDef.Attributes & FieldAttributes.InitOnly) == 0 && (fieldDef.Attributes & FieldAttributes.NotSerialized) == 0)
|
||||||
{
|
{
|
||||||
DumpType(fieldDef.FieldType, sb, assetsFile, fieldDef.Name, indent + 1);
|
DumpType(fieldDef.FieldType, sb, reader, fieldDef.Name, indent + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,8 +94,8 @@ namespace AssetStudio
|
||||||
m_Height = m_Texture2D.m_Height;
|
m_Height = m_Texture2D.m_Height;
|
||||||
m_TextureFormat = m_Texture2D.m_TextureFormat;
|
m_TextureFormat = m_Texture2D.m_TextureFormat;
|
||||||
var mMipMap = m_Texture2D.m_MipMap;
|
var mMipMap = m_Texture2D.m_MipMap;
|
||||||
version = m_Texture2D.sourceFile.version;
|
version = m_Texture2D.version;
|
||||||
var platform = m_Texture2D.sourceFile.m_TargetPlatform;
|
var platform = m_Texture2D.platform;
|
||||||
|
|
||||||
if (version[0] < 5 || (version[0] == 5 && version[1] < 2))//5.2 down
|
if (version[0] < 5 || (version[0] == 5 && version[1] < 2))//5.2 down
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue