mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-26 13:50:21 -04:00
continue work
This commit is contained in:
parent
40b191f039
commit
17bd7a210a
@ -181,6 +181,7 @@
|
|||||||
<Compile Include="StudioClasses\LocalSerializedObjectIdentifier.cs" />
|
<Compile Include="StudioClasses\LocalSerializedObjectIdentifier.cs" />
|
||||||
<Compile Include="StudioClasses\ObjectInfo.cs" />
|
<Compile Include="StudioClasses\ObjectInfo.cs" />
|
||||||
<Compile Include="StudioClasses\SerializedFileHeader.cs" />
|
<Compile Include="StudioClasses\SerializedFileHeader.cs" />
|
||||||
|
<Compile Include="StudioClasses\SerializedType.cs" />
|
||||||
<Compile Include="StudioClasses\SevenZipHelper.cs">
|
<Compile Include="StudioClasses\SevenZipHelper.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -194,7 +195,7 @@
|
|||||||
<Compile Include="StudioClasses\BinaryReaderExtensions.cs" />
|
<Compile Include="StudioClasses\BinaryReaderExtensions.cs" />
|
||||||
<Compile Include="StudioClasses\BinaryWriterExtensions.cs" />
|
<Compile Include="StudioClasses\BinaryWriterExtensions.cs" />
|
||||||
<Compile Include="StudioClasses\BuildTarget.cs" />
|
<Compile Include="StudioClasses\BuildTarget.cs" />
|
||||||
<Compile Include="StudioClasses\ClassIDReference.cs" />
|
<Compile Include="StudioClasses\ClassIDType.cs" />
|
||||||
<Compile Include="StudioClasses\TypeTreeNode.cs" />
|
<Compile Include="StudioClasses\TypeTreeNode.cs" />
|
||||||
<Compile Include="StudioClasses\TypeTreeHelper.cs" />
|
<Compile Include="StudioClasses\TypeTreeHelper.cs" />
|
||||||
<Compile Include="StudioClasses\ResourcesHelper.cs" />
|
<Compile Include="StudioClasses\ResourcesHelper.cs" />
|
||||||
@ -207,7 +208,7 @@
|
|||||||
<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" />
|
||||||
<Compile Include="StudioClasses\TypeItem.cs" />
|
<Compile Include="StudioClasses\TypeTreeItem.cs" />
|
||||||
<Compile Include="StudioClasses\FBXExporter.cs" />
|
<Compile Include="StudioClasses\FBXExporter.cs" />
|
||||||
<Compile Include="StudioClasses\SpriteHelper.cs" />
|
<Compile Include="StudioClasses\SpriteHelper.cs" />
|
||||||
<Compile Include="StudioClasses\Exporter.cs" />
|
<Compile Include="StudioClasses\Exporter.cs" />
|
||||||
|
@ -352,8 +352,8 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
switch (lastLoadedAsset.Type)
|
switch (lastLoadedAsset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
case ClassIDReference.Sprite:
|
case ClassIDType.Sprite:
|
||||||
{
|
{
|
||||||
if (enablePreview.Checked && imageTexture != null)
|
if (enablePreview.Checked && imageTexture != null)
|
||||||
{
|
{
|
||||||
@ -366,15 +366,15 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Shader:
|
case ClassIDType.Shader:
|
||||||
case ClassIDReference.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
case ClassIDReference.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
textPreviewBox.Visible = !textPreviewBox.Visible;
|
textPreviewBox.Visible = !textPreviewBox.Visible;
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Font:
|
case ClassIDType.Font:
|
||||||
fontPreviewBox.Visible = !fontPreviewBox.Visible;
|
fontPreviewBox.Visible = !fontPreviewBox.Visible;
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
{
|
{
|
||||||
FMODpanel.Visible = !FMODpanel.Visible;
|
FMODpanel.Visible = !FMODpanel.Visible;
|
||||||
|
|
||||||
@ -646,7 +646,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (e.IsSelected)
|
if (e.IsSelected)
|
||||||
{
|
{
|
||||||
classTextBox.Text = ((TypeItem)classesListView.SelectedItems[0]).ToString();
|
classTextBox.Text = ((TypeTreeItem)classesListView.SelectedItems[0]).ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -654,7 +654,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
{
|
{
|
||||||
imageTexture?.Dispose();
|
imageTexture?.Dispose();
|
||||||
var m_Texture2D = new Texture2D(asset, true);
|
var m_Texture2D = new Texture2D(asset, true);
|
||||||
@ -690,7 +690,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
{
|
{
|
||||||
var m_AudioClip = new AudioClip(asset, true);
|
var m_AudioClip = new AudioClip(asset, true);
|
||||||
|
|
||||||
@ -812,7 +812,7 @@ namespace AssetStudio
|
|||||||
FMODtimerLabel.Text = $"0:0.0 / {FMODlenms / 1000 / 60}:{FMODlenms / 1000 % 60}.{FMODlenms / 10 % 100}";
|
FMODtimerLabel.Text = $"0:0.0 / {FMODlenms / 1000 / 60}:{FMODlenms / 1000 % 60}.{FMODlenms / 10 % 100}";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Shader:
|
case ClassIDType.Shader:
|
||||||
{
|
{
|
||||||
Shader m_TextAsset = new Shader(asset);
|
Shader m_TextAsset = new Shader(asset);
|
||||||
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
string m_Script_Text = Encoding.UTF8.GetString(m_TextAsset.m_Script);
|
||||||
@ -822,7 +822,7 @@ namespace AssetStudio
|
|||||||
textPreviewBox.Visible = true;
|
textPreviewBox.Visible = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
{
|
{
|
||||||
TextAsset m_TextAsset = new TextAsset(asset);
|
TextAsset m_TextAsset = new TextAsset(asset);
|
||||||
|
|
||||||
@ -833,10 +833,10 @@ namespace AssetStudio
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
{
|
{
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
var m_MonoBehaviour = new MonoBehaviour(asset);
|
||||||
if (asset.Type1 != asset.Type2 && asset.sourceFile.m_Type.ContainsKey(asset.Type1))
|
if (asset.serializedType.m_Nodes != null)
|
||||||
{
|
{
|
||||||
textPreviewBox.Text = asset.Dump();
|
textPreviewBox.Text = asset.Dump();
|
||||||
}
|
}
|
||||||
@ -848,7 +848,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Font:
|
case ClassIDType.Font:
|
||||||
{
|
{
|
||||||
Font m_Font = new Font(asset);
|
Font m_Font = new Font(asset);
|
||||||
if (m_Font.m_FontData != null)
|
if (m_Font.m_FontData != null)
|
||||||
@ -900,7 +900,7 @@ namespace AssetStudio
|
|||||||
StatusStripUpdate("Unsupported font for preview. Try to export.");
|
StatusStripUpdate("Unsupported font for preview. Try to export.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Mesh:
|
case ClassIDType.Mesh:
|
||||||
{
|
{
|
||||||
var m_Mesh = new Mesh(asset);
|
var m_Mesh = new Mesh(asset);
|
||||||
if (m_Mesh.m_VertexCount > 0)
|
if (m_Mesh.m_VertexCount > 0)
|
||||||
@ -1046,13 +1046,13 @@ namespace AssetStudio
|
|||||||
+ "'Ctrl W'=Wireframe | 'Ctrl S'=Shade | 'Ctrl N'=ReNormal ");
|
+ "'Ctrl W'=Wireframe | 'Ctrl S'=Shade | 'Ctrl N'=ReNormal ");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.VideoClip:
|
case ClassIDType.VideoClip:
|
||||||
case ClassIDReference.MovieTexture:
|
case ClassIDType.MovieTexture:
|
||||||
{
|
{
|
||||||
StatusStripUpdate("Only supported export.");
|
StatusStripUpdate("Only supported export.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Sprite:
|
case ClassIDType.Sprite:
|
||||||
{
|
{
|
||||||
imageTexture?.Dispose();
|
imageTexture?.Dispose();
|
||||||
imageTexture = SpriteHelper.GetImageFromSprite(new Sprite(asset));
|
imageTexture = SpriteHelper.GetImageFromSprite(new Sprite(asset));
|
||||||
@ -1071,12 +1071,12 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Animator:
|
case ClassIDType.Animator:
|
||||||
{
|
{
|
||||||
StatusStripUpdate("Can be exported to FBX file.");
|
StatusStripUpdate("Can be exported to FBX file.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.AnimationClip:
|
case ClassIDType.AnimationClip:
|
||||||
{
|
{
|
||||||
StatusStripUpdate("Can be exported with Animator or objects");
|
StatusStripUpdate("Can be exported with Animator or objects");
|
||||||
break;
|
break;
|
||||||
@ -1840,11 +1840,11 @@ namespace AssetStudio
|
|||||||
if (assetListView.SelectedIndices.Count >= 1)
|
if (assetListView.SelectedIndices.Count >= 1)
|
||||||
{
|
{
|
||||||
var selectedAssets = GetSelectedAssets();
|
var selectedAssets = GetSelectedAssets();
|
||||||
if (selectedAssets.Any(x => x.Type == ClassIDReference.Animator) && selectedAssets.Any(x => x.Type == ClassIDReference.AnimationClip))
|
if (selectedAssets.Any(x => x.Type == ClassIDType.Animator) && selectedAssets.Any(x => x.Type == ClassIDType.AnimationClip))
|
||||||
{
|
{
|
||||||
exportAnimatorwithselectedAnimationClipMenuItem.Visible = true;
|
exportAnimatorwithselectedAnimationClipMenuItem.Visible = true;
|
||||||
}
|
}
|
||||||
else if (selectedAssets.All(x => x.Type == ClassIDReference.AnimationClip))
|
else if (selectedAssets.All(x => x.Type == ClassIDType.AnimationClip))
|
||||||
{
|
{
|
||||||
exportobjectswithselectedAnimationClipMenuItem.Visible = true;
|
exportobjectswithselectedAnimationClipMenuItem.Visible = true;
|
||||||
}
|
}
|
||||||
@ -1879,11 +1879,11 @@ namespace AssetStudio
|
|||||||
var selectedAssets = GetSelectedAssets();
|
var selectedAssets = GetSelectedAssets();
|
||||||
foreach (var assetPreloadData in selectedAssets)
|
foreach (var assetPreloadData in selectedAssets)
|
||||||
{
|
{
|
||||||
if (assetPreloadData.Type == ClassIDReference.Animator)
|
if (assetPreloadData.Type == ClassIDType.Animator)
|
||||||
{
|
{
|
||||||
animator = assetPreloadData;
|
animator = assetPreloadData;
|
||||||
}
|
}
|
||||||
else if (assetPreloadData.Type == ClassIDReference.AnimationClip)
|
else if (assetPreloadData.Type == ClassIDType.AnimationClip)
|
||||||
{
|
{
|
||||||
animationList.Add(assetPreloadData);
|
animationList.Add(assetPreloadData);
|
||||||
}
|
}
|
||||||
@ -1927,7 +1927,7 @@ namespace AssetStudio
|
|||||||
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
if (saveFolderDialog1.ShowDialog(this) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
var exportPath = saveFolderDialog1.Folder + "\\GameObject\\";
|
var exportPath = saveFolderDialog1.Folder + "\\GameObject\\";
|
||||||
var animationList = GetSelectedAssets().Where(x => x.Type == ClassIDReference.AnimationClip).ToList();
|
var animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
||||||
ExportObjectsWithAnimationClip(exportPath, sceneTreeView.Nodes, animationList.Count == 0 ? null : animationList);
|
ExportObjectsWithAnimationClip(exportPath, sceneTreeView.Nodes, animationList.Count == 0 ? null : animationList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1981,7 +1981,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
assetListView.BeginUpdate();
|
assetListView.BeginUpdate();
|
||||||
assetListView.SelectedIndices.Clear();
|
assetListView.SelectedIndices.Clear();
|
||||||
var show = new List<ClassIDReference>();
|
var show = new List<ClassIDType>();
|
||||||
if (!allToolStripMenuItem.Checked)
|
if (!allToolStripMenuItem.Checked)
|
||||||
{
|
{
|
||||||
for (var i = 1; i < filterTypeToolStripMenuItem.DropDownItems.Count; i++)
|
for (var i = 1; i < filterTypeToolStripMenuItem.DropDownItems.Count; i++)
|
||||||
@ -1989,7 +1989,7 @@ namespace AssetStudio
|
|||||||
var item = (ToolStripMenuItem)filterTypeToolStripMenuItem.DropDownItems[i];
|
var item = (ToolStripMenuItem)filterTypeToolStripMenuItem.DropDownItems[i];
|
||||||
if (item.Checked)
|
if (item.Checked)
|
||||||
{
|
{
|
||||||
show.Add((ClassIDReference)Enum.Parse(typeof(ClassIDReference), item.Text));
|
show.Add((ClassIDType)Enum.Parse(typeof(ClassIDType), item.Text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
visibleAssets = exportableAssets.FindAll(x => show.Contains(x.Type));
|
visibleAssets = exportableAssets.FindAll(x => show.Contains(x.Type));
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
@ -11,14 +9,13 @@ namespace AssetStudio
|
|||||||
public long m_PathID;
|
public long m_PathID;
|
||||||
public uint Offset;
|
public uint Offset;
|
||||||
public int Size;
|
public int Size;
|
||||||
public ClassIDReference Type;
|
public ClassIDType Type;
|
||||||
public int Type1;
|
public int typeID;
|
||||||
public int Type2;
|
public int classID;
|
||||||
|
public SerializedType serializedType;
|
||||||
public string TypeString;
|
public string TypeString;
|
||||||
public int fullSize;
|
public int fullSize;
|
||||||
public string InfoText;
|
public string InfoText;
|
||||||
|
|
||||||
public AssetsFile sourceFile;
|
public AssetsFile sourceFile;
|
||||||
public GameObject gameObject;
|
public GameObject gameObject;
|
||||||
public string uniqueID;
|
public string uniqueID;
|
||||||
@ -33,10 +30,10 @@ namespace AssetStudio
|
|||||||
public string Dump()
|
public string Dump()
|
||||||
{
|
{
|
||||||
var reader = InitReader();
|
var reader = InitReader();
|
||||||
if (sourceFile.m_Type.TryGetValue(Type1, out var typeTreeList))
|
if (serializedType.m_Nodes != null)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
TypeTreeHelper.ReadTypeString(sb, typeTreeList, reader);
|
TypeTreeHelper.ReadTypeString(sb, serializedType.m_Nodes, reader);
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -44,7 +41,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public bool HasStructMember(string name)
|
public bool HasStructMember(string name)
|
||||||
{
|
{
|
||||||
return sourceFile.m_Type.TryGetValue(Type1, out var typeTreeList) && typeTreeList.Any(x => x.m_Name == name);
|
return serializedType.m_Nodes != null && serializedType.m_Nodes.Any(x => x.m_Name == name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,8 @@ namespace AssetStudio
|
|||||||
private EndianType m_FileEndianess;
|
private EndianType m_FileEndianess;
|
||||||
public string unityVersion = "2.5.0f5";
|
public string unityVersion = "2.5.0f5";
|
||||||
public BuildTarget m_TargetPlatform = BuildTarget.UnknownPlatform;
|
public BuildTarget m_TargetPlatform = BuildTarget.UnknownPlatform;
|
||||||
private bool m_EnableTypeTree;
|
private bool m_EnableTypeTree = true;
|
||||||
public SortedDictionary<int, List<TypeTreeNode>> m_Type = new SortedDictionary<int, List<TypeTreeNode>>();
|
public List<SerializedType> m_Types;
|
||||||
private List<int[]> classIDs = new List<int[]>();
|
|
||||||
public Dictionary<long, ObjectInfo> m_Objects;
|
public Dictionary<long, ObjectInfo> m_Objects;
|
||||||
private List<LocalSerializedObjectIdentifier> m_ScriptTypes;
|
private List<LocalSerializedObjectIdentifier> m_ScriptTypes;
|
||||||
public List<FileIdentifier> m_Externals;
|
public List<FileIdentifier> m_Externals;
|
||||||
@ -86,19 +85,10 @@ namespace AssetStudio
|
|||||||
|
|
||||||
//Read types
|
//Read types
|
||||||
int typeCount = reader.ReadInt32();
|
int typeCount = reader.ReadInt32();
|
||||||
|
m_Types = new List<SerializedType>(typeCount);
|
||||||
for (int i = 0; i < typeCount; i++)
|
for (int i = 0; i < typeCount; i++)
|
||||||
{
|
{
|
||||||
if (header.m_Version < 13)
|
m_Types.Add(ReadSerializedType());;
|
||||||
{
|
|
||||||
int classID = reader.ReadInt32();
|
|
||||||
var typeTreeList = new List<TypeTreeNode>();
|
|
||||||
ReadTypeTree(typeTreeList, 0);
|
|
||||||
m_Type.Add(classID, typeTreeList);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ReadTypeTree5();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (header.m_Version >= 7 && header.m_Version < 14)
|
if (header.m_Version >= 7 && header.m_Version < 14)
|
||||||
@ -127,32 +117,33 @@ namespace AssetStudio
|
|||||||
asset.Offset = reader.ReadUInt32();
|
asset.Offset = reader.ReadUInt32();
|
||||||
asset.Offset += header.m_DataOffset;
|
asset.Offset += header.m_DataOffset;
|
||||||
asset.Size = reader.ReadInt32();
|
asset.Size = reader.ReadInt32();
|
||||||
if (header.m_Version > 15)
|
asset.typeID = reader.ReadInt32();
|
||||||
|
if (header.m_Version < 16)
|
||||||
{
|
{
|
||||||
int index = reader.ReadInt32();
|
asset.classID = reader.ReadUInt16();
|
||||||
asset.Type1 = classIDs[index][0];
|
asset.serializedType = m_Types.Find(x => x.classID == asset.typeID);
|
||||||
asset.Type2 = classIDs[index][1];
|
reader.Position += 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asset.Type1 = reader.ReadInt32();
|
var type = m_Types[asset.typeID];
|
||||||
asset.Type2 = reader.ReadUInt16();
|
asset.serializedType = type;
|
||||||
reader.Position += 2;
|
asset.classID = type.classID;
|
||||||
}
|
}
|
||||||
if (header.m_Version == 15 || header.m_Version == 16)
|
if (header.m_Version == 15 || header.m_Version == 16)
|
||||||
{
|
{
|
||||||
var stripped = reader.ReadByte();
|
var stripped = reader.ReadByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Enum.IsDefined(typeof(ClassIDReference), asset.Type2))
|
if (Enum.IsDefined(typeof(ClassIDType), asset.classID))
|
||||||
{
|
{
|
||||||
asset.Type = (ClassIDReference)asset.Type2;
|
asset.Type = (ClassIDType)asset.classID;
|
||||||
asset.TypeString = asset.Type.ToString();
|
asset.TypeString = asset.Type.ToString();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asset.Type = ClassIDReference.UnknownType;
|
asset.Type = ClassIDType.UnknownType;
|
||||||
asset.TypeString = "UnknownType " + asset.Type2;
|
asset.TypeString = $"UnknownType {asset.classID}";
|
||||||
}
|
}
|
||||||
|
|
||||||
asset.uniqueID = i.ToString(assetIDfmt);
|
asset.uniqueID = i.ToString(assetIDfmt);
|
||||||
@ -163,7 +154,7 @@ namespace AssetStudio
|
|||||||
preloadTable.Add(asset.m_PathID, asset);
|
preloadTable.Add(asset.m_PathID, asset);
|
||||||
|
|
||||||
#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 == ClassIDReference.BuildSettings && header.m_Version == 6)
|
if (asset.Type == ClassIDType.BuildSettings && header.m_Version == 6)
|
||||||
{
|
{
|
||||||
long nextAsset = reader.Position;
|
long nextAsset = reader.Position;
|
||||||
|
|
||||||
@ -238,114 +229,125 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReadTypeTree(List<TypeTreeNode> typeTreeList, int depth)
|
private SerializedType ReadSerializedType()
|
||||||
{
|
{
|
||||||
var typeTree = new TypeTreeNode();
|
var type = new SerializedType();
|
||||||
typeTreeList.Add(typeTree);
|
|
||||||
typeTree.m_Level = depth;
|
type.classID = reader.ReadInt32();
|
||||||
typeTree.m_Type = reader.ReadStringToNull();
|
|
||||||
typeTree.m_Name = reader.ReadStringToNull();
|
if (header.m_Version >= 16)
|
||||||
typeTree.m_ByteSize = reader.ReadInt32();
|
{
|
||||||
|
type.m_IsStrippedType = reader.ReadBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (header.m_Version >= 17)
|
||||||
|
{
|
||||||
|
type.m_ScriptTypeIndex = reader.ReadInt16();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (header.m_Version >= 13)
|
||||||
|
{
|
||||||
|
if ((header.m_Version < 16 && type.classID < 0) || (header.m_Version >= 16 && type.classID == 114))
|
||||||
|
{
|
||||||
|
type.m_ScriptID = reader.ReadBytes(16); //Hash128
|
||||||
|
}
|
||||||
|
type.m_OldTypeHash = reader.ReadBytes(16); //Hash128
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_EnableTypeTree)
|
||||||
|
{
|
||||||
|
var typeTree = new List<TypeTreeNode>();
|
||||||
|
if (header.m_Version >= 12 || header.m_Version == 10)
|
||||||
|
{
|
||||||
|
ReadTypeTree5(typeTree);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ReadTypeTree(typeTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
type.m_Nodes = typeTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReadTypeTree(List<TypeTreeNode> typeTree, int depth = 0)
|
||||||
|
{
|
||||||
|
var typeTreeNode = new TypeTreeNode();
|
||||||
|
typeTree.Add(typeTreeNode);
|
||||||
|
typeTreeNode.m_Level = depth;
|
||||||
|
typeTreeNode.m_Type = reader.ReadStringToNull();
|
||||||
|
typeTreeNode.m_Name = reader.ReadStringToNull();
|
||||||
|
typeTreeNode.m_ByteSize = reader.ReadInt32();
|
||||||
if (header.m_Version == 2)
|
if (header.m_Version == 2)
|
||||||
{
|
{
|
||||||
var variableCount = reader.ReadInt32();
|
var variableCount = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
if (header.m_Version != 3)
|
if (header.m_Version != 3)
|
||||||
{
|
{
|
||||||
typeTree.m_Index = reader.ReadInt32();
|
typeTreeNode.m_Index = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
typeTree.m_IsArray = reader.ReadInt32();
|
typeTreeNode.m_IsArray = reader.ReadInt32();
|
||||||
typeTree.m_Version = reader.ReadInt32();
|
typeTreeNode.m_Version = reader.ReadInt32();
|
||||||
if (header.m_Version != 3)
|
if (header.m_Version != 3)
|
||||||
{
|
{
|
||||||
typeTree.m_MetaFlag = reader.ReadInt32();
|
typeTreeNode.m_MetaFlag = reader.ReadInt32();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int childrenCount = reader.ReadInt32();
|
int childrenCount = reader.ReadInt32();
|
||||||
for (int i = 0; i < childrenCount; i++)
|
for (int i = 0; i < childrenCount; i++)
|
||||||
{
|
{
|
||||||
ReadTypeTree(typeTreeList, depth + 1);
|
ReadTypeTree(typeTree, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReadTypeTree5()
|
private void ReadTypeTree5(List<TypeTreeNode> typeTree)
|
||||||
{
|
{
|
||||||
int classID = reader.ReadInt32();
|
int numberOfNodes = reader.ReadInt32();
|
||||||
if (header.m_Version > 15)//5.5.0 and up
|
int stringBufferSize = reader.ReadInt32();
|
||||||
{
|
|
||||||
reader.ReadByte();
|
|
||||||
int typeID = reader.ReadInt16();
|
|
||||||
if (typeID >= 0)
|
|
||||||
{
|
|
||||||
typeID = -1 - typeID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
typeID = classID;
|
|
||||||
}
|
|
||||||
classIDs.Add(new[] { typeID, classID });
|
|
||||||
if (classID == 114)
|
|
||||||
{
|
|
||||||
reader.Position += 16;
|
|
||||||
}
|
|
||||||
classID = typeID;
|
|
||||||
}
|
|
||||||
else if (classID < 0)
|
|
||||||
{
|
|
||||||
reader.Position += 16;
|
|
||||||
}
|
|
||||||
reader.Position += 16;
|
|
||||||
|
|
||||||
if (m_EnableTypeTree)
|
reader.Position += numberOfNodes * 24;
|
||||||
|
using (var stringBufferReader = new BinaryReader(new MemoryStream(reader.ReadBytes(stringBufferSize))))
|
||||||
{
|
{
|
||||||
int varCount = reader.ReadInt32();
|
reader.Position -= numberOfNodes * 24 + stringBufferSize;
|
||||||
int stringSize = reader.ReadInt32();
|
for (int i = 0; i < numberOfNodes; i++)
|
||||||
|
|
||||||
reader.Position += varCount * 24;
|
|
||||||
using (var stringReader = new BinaryReader(new MemoryStream(reader.ReadBytes(stringSize))))
|
|
||||||
{
|
{
|
||||||
var typeTreeList = new List<TypeTreeNode>();
|
var typeTreeNode = new TypeTreeNode();
|
||||||
reader.Position -= varCount * 24 + stringSize;
|
typeTree.Add(typeTreeNode);
|
||||||
for (int i = 0; i < varCount; i++)
|
typeTreeNode.m_Version = reader.ReadUInt16();
|
||||||
|
typeTreeNode.m_Level = reader.ReadByte();
|
||||||
|
typeTreeNode.m_IsArray = reader.ReadBoolean() ? 1 : 0;
|
||||||
|
|
||||||
|
var m_TypeStrOffset = reader.ReadUInt16();
|
||||||
|
var temp = reader.ReadUInt16();
|
||||||
|
if (temp == 0)
|
||||||
{
|
{
|
||||||
var typeTree = new TypeTreeNode();
|
stringBufferReader.BaseStream.Position = m_TypeStrOffset;
|
||||||
typeTreeList.Add(typeTree);
|
typeTreeNode.m_Type = stringBufferReader.ReadStringToNull();
|
||||||
typeTree.m_Version = reader.ReadUInt16();
|
|
||||||
typeTree.m_Level = reader.ReadByte();
|
|
||||||
typeTree.m_IsArray = reader.ReadBoolean() ? 1 : 0;
|
|
||||||
|
|
||||||
ushort varTypeIndex = reader.ReadUInt16();
|
|
||||||
ushort test = reader.ReadUInt16();
|
|
||||||
if (test == 0) //varType is an offset in the string block
|
|
||||||
{
|
|
||||||
stringReader.BaseStream.Position = varTypeIndex;
|
|
||||||
typeTree.m_Type = stringReader.ReadStringToNull();
|
|
||||||
}
|
|
||||||
else //varType is an index in an internal strig array
|
|
||||||
{
|
|
||||||
typeTree.m_Type = CommonString.StringBuffer.ContainsKey(varTypeIndex) ? CommonString.StringBuffer[varTypeIndex] : varTypeIndex.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort varNameIndex = reader.ReadUInt16();
|
|
||||||
test = reader.ReadUInt16();
|
|
||||||
if (test == 0)
|
|
||||||
{
|
|
||||||
stringReader.BaseStream.Position = varNameIndex;
|
|
||||||
typeTree.m_Name = stringReader.ReadStringToNull();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
typeTree.m_Name = CommonString.StringBuffer.ContainsKey(varNameIndex) ? CommonString.StringBuffer[varNameIndex] : varNameIndex.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
typeTree.m_ByteSize = reader.ReadInt32();
|
|
||||||
typeTree.m_Index = reader.ReadInt32();
|
|
||||||
typeTree.m_MetaFlag = reader.ReadInt32();
|
|
||||||
}
|
}
|
||||||
reader.Position += stringSize;
|
else
|
||||||
m_Type[classID] = typeTreeList;
|
{
|
||||||
|
typeTreeNode.m_Type = CommonString.StringBuffer.ContainsKey(m_TypeStrOffset) ? CommonString.StringBuffer[m_TypeStrOffset] : m_TypeStrOffset.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
var m_NameStrOffset = reader.ReadUInt16();
|
||||||
|
temp = reader.ReadUInt16();
|
||||||
|
if (temp == 0)
|
||||||
|
{
|
||||||
|
stringBufferReader.BaseStream.Position = m_NameStrOffset;
|
||||||
|
typeTreeNode.m_Name = stringBufferReader.ReadStringToNull();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
typeTreeNode.m_Name = CommonString.StringBuffer.ContainsKey(m_NameStrOffset) ? CommonString.StringBuffer[m_NameStrOffset] : m_NameStrOffset.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
typeTreeNode.m_ByteSize = reader.ReadInt32();
|
||||||
|
typeTreeNode.m_Index = reader.ReadInt32();
|
||||||
|
typeTreeNode.m_MetaFlag = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
reader.Position += stringBufferSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public enum ClassIDReference
|
public enum ClassIDType
|
||||||
{
|
{
|
||||||
UnknownType = -1,
|
UnknownType = -1,
|
||||||
|
Object = 0,
|
||||||
GameObject = 1,
|
GameObject = 1,
|
||||||
Component = 2,
|
Component = 2,
|
||||||
LevelGameManager = 3,
|
LevelGameManager = 3,
|
||||||
@ -218,6 +219,8 @@
|
|||||||
VideoPlayer = 328,
|
VideoPlayer = 328,
|
||||||
VideoClip = 329,
|
VideoClip = 329,
|
||||||
OcclusionCullingData = 363,
|
OcclusionCullingData = 363,
|
||||||
|
//kLargestRuntimeClassID = 364
|
||||||
|
SmallestEditorClassID = 1000,
|
||||||
Prefab = 1001,
|
Prefab = 1001,
|
||||||
EditorExtensionImpl = 1002,
|
EditorExtensionImpl = 1002,
|
||||||
AssetImporter = 1003,
|
AssetImporter = 1003,
|
||||||
@ -251,6 +254,7 @@
|
|||||||
PVRImporter = 1052,
|
PVRImporter = 1052,
|
||||||
ASTCImporter = 1053,
|
ASTCImporter = 1053,
|
||||||
KTXImporter = 1054,
|
KTXImporter = 1054,
|
||||||
|
IHVImageFormatImporter = 1055,
|
||||||
AnimatorStateTransition = 1101,
|
AnimatorStateTransition = 1101,
|
||||||
AnimatorState = 1102,
|
AnimatorState = 1102,
|
||||||
HumanTemplate = 1105,
|
HumanTemplate = 1105,
|
||||||
@ -262,6 +266,16 @@
|
|||||||
SubstanceImporter = 1112,
|
SubstanceImporter = 1112,
|
||||||
LightmapParameters = 1113,
|
LightmapParameters = 1113,
|
||||||
LightmapSnapshot = 1120,
|
LightmapSnapshot = 1120,
|
||||||
|
GISRaster = 1121,
|
||||||
|
GISRasterImporter = 1122,
|
||||||
|
CadImporter = 1123,
|
||||||
|
SketchUpImporter = 1124,
|
||||||
|
BuildReport = 1125,
|
||||||
|
PackedAssets = 1126,
|
||||||
|
VideoClipImporter = 1127,
|
||||||
|
ActivationLogComponent = 2000,
|
||||||
|
//kLargestEditorClassID = 2001
|
||||||
|
//kClassIdOutOfHierarchy = 100000
|
||||||
SubDerived = 367388927,
|
SubDerived = 367388927,
|
||||||
SiblingDerived = 334799969,
|
SiblingDerived = 334799969,
|
||||||
SpriteAtlas = 687078895,
|
SpriteAtlas = 687078895,
|
@ -107,7 +107,7 @@ namespace AssetStudio
|
|||||||
return false;
|
return false;
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
var m_MonoBehaviour = new MonoBehaviour(asset);
|
||||||
string str;
|
string str;
|
||||||
if (asset.Type1 != asset.Type2 && asset.sourceFile.m_Type.ContainsKey(asset.Type1))
|
if (asset.serializedType.m_Nodes != null)
|
||||||
{
|
{
|
||||||
str = asset.Dump();
|
str = asset.Dump();
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
foreach (var asset in exportableAssets)
|
foreach (var asset in exportableAssets)
|
||||||
{
|
{
|
||||||
if (asset.Type == ClassIDReference.Texture2D && asset.Text == texName)
|
if (asset.Type == ClassIDType.Texture2D && asset.Text == texName)
|
||||||
{
|
{
|
||||||
TexturePD = asset;
|
TexturePD = asset;
|
||||||
break;
|
break;
|
||||||
@ -244,7 +244,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
if (TexturePD != null && TexturePD.Type == ClassIDReference.Texture2D)
|
if (TexturePD != null && TexturePD.Type == ClassIDType.Texture2D)
|
||||||
{
|
{
|
||||||
Textures.Add(TexturePD);
|
Textures.Add(TexturePD);
|
||||||
|
|
||||||
|
@ -127,19 +127,19 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
switch (assetPreloadData.Type)
|
switch (assetPreloadData.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.MeshRenderer:
|
case ClassIDType.MeshRenderer:
|
||||||
{
|
{
|
||||||
var m_Renderer = new MeshRenderer(assetPreloadData);
|
var m_Renderer = new MeshRenderer(assetPreloadData);
|
||||||
ConvertMeshRenderer(m_Renderer);
|
ConvertMeshRenderer(m_Renderer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.SkinnedMeshRenderer:
|
case ClassIDType.SkinnedMeshRenderer:
|
||||||
{
|
{
|
||||||
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(assetPreloadData);
|
var m_SkinnedMeshRenderer = new SkinnedMeshRenderer(assetPreloadData);
|
||||||
ConvertMeshRenderer(m_SkinnedMeshRenderer);
|
ConvertMeshRenderer(m_SkinnedMeshRenderer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Animation:
|
case ClassIDType.Animation:
|
||||||
{
|
{
|
||||||
var m_Animation = new Animation(assetPreloadData);
|
var m_Animation = new Animation(assetPreloadData);
|
||||||
foreach (var animation in m_Animation.m_Animations)
|
foreach (var animation in m_Animation.m_Animations)
|
||||||
@ -165,7 +165,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (m_Animator.m_Controller.TryGetPD(out var assetPreloadData))
|
if (m_Animator.m_Controller.TryGetPD(out var assetPreloadData))
|
||||||
{
|
{
|
||||||
if (assetPreloadData.Type == ClassIDReference.AnimatorOverrideController)
|
if (assetPreloadData.Type == ClassIDType.AnimatorOverrideController)
|
||||||
{
|
{
|
||||||
var m_AnimatorOverrideController = new AnimatorOverrideController(assetPreloadData);
|
var m_AnimatorOverrideController = new AnimatorOverrideController(assetPreloadData);
|
||||||
if (m_AnimatorOverrideController.m_Controller.TryGetPD(out assetPreloadData))
|
if (m_AnimatorOverrideController.m_Controller.TryGetPD(out assetPreloadData))
|
||||||
@ -187,7 +187,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
else if (assetPreloadData.Type == ClassIDReference.AnimatorController)
|
else if (assetPreloadData.Type == ClassIDType.AnimatorController)
|
||||||
{
|
{
|
||||||
var m_AnimatorController = new AnimatorController(assetPreloadData);
|
var m_AnimatorController = new AnimatorController(assetPreloadData);
|
||||||
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
foreach (var m_AnimationClip in m_AnimatorController.m_AnimationClips)
|
||||||
@ -581,7 +581,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (m_Component.TryGetPD(out var assetPreloadData))
|
if (m_Component.TryGetPD(out var assetPreloadData))
|
||||||
{
|
{
|
||||||
if (assetPreloadData.Type == ClassIDReference.MeshFilter)
|
if (assetPreloadData.Type == ClassIDType.MeshFilter)
|
||||||
{
|
{
|
||||||
var m_MeshFilter = new MeshFilter(assetPreloadData);
|
var m_MeshFilter = new MeshFilter(assetPreloadData);
|
||||||
if (m_MeshFilter.m_Mesh.TryGetPD(out var MeshPD))
|
if (m_MeshFilter.m_Mesh.TryGetPD(out var MeshPD))
|
||||||
@ -667,7 +667,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 == ClassIDReference.Texture2D)//TODO other Texture
|
if (texEnv.m_Texture.TryGetPD(out var TexturePD) && TexturePD.Type == ClassIDType.Texture2D)//TODO other Texture
|
||||||
{
|
{
|
||||||
tex2D = new Texture2D(TexturePD, true);
|
tex2D = new Texture2D(TexturePD, true);
|
||||||
}
|
}
|
||||||
|
17
AssetStudio/StudioClasses/SerializedType.cs
Normal file
17
AssetStudio/StudioClasses/SerializedType.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
|
{
|
||||||
|
public class SerializedType
|
||||||
|
{
|
||||||
|
public int classID;
|
||||||
|
public bool m_IsStrippedType;
|
||||||
|
public short m_ScriptTypeIndex = -1;
|
||||||
|
public List<TypeTreeNode> m_Nodes;
|
||||||
|
public byte[] m_ScriptID; //Hash128
|
||||||
|
public byte[] m_OldTypeHash; //Hash128
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,7 @@ namespace AssetStudio
|
|||||||
public static List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>(); //used to hold all assets while the ListView is filtered
|
public static List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>(); //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<AssetPreloadData> visibleAssets = new List<AssetPreloadData>(); //used to build the ListView from all or filtered assets
|
||||||
public static Dictionary<string, Dictionary<int, TypeItem>> AllTypeMap = new Dictionary<string, Dictionary<int, TypeItem>>();
|
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 = "";
|
||||||
public static bool moduleLoaded;
|
public static bool moduleLoaded;
|
||||||
@ -178,77 +178,77 @@ namespace AssetStudio
|
|||||||
var exportable = false;
|
var exportable = false;
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.GameObject:
|
case ClassIDType.GameObject:
|
||||||
{
|
{
|
||||||
var m_GameObject = new GameObject(asset);
|
var m_GameObject = new GameObject(asset);
|
||||||
asset.Text = m_GameObject.m_Name;
|
asset.Text = m_GameObject.m_Name;
|
||||||
assetsFile.GameObjectList.Add(asset.m_PathID, m_GameObject);
|
assetsFile.GameObjectList.Add(asset.m_PathID, m_GameObject);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Transform:
|
case ClassIDType.Transform:
|
||||||
{
|
{
|
||||||
var m_Transform = new Transform(asset);
|
var m_Transform = new Transform(asset);
|
||||||
assetsFile.TransformList.Add(asset.m_PathID, m_Transform);
|
assetsFile.TransformList.Add(asset.m_PathID, m_Transform);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.RectTransform:
|
case ClassIDType.RectTransform:
|
||||||
{
|
{
|
||||||
var m_Rect = new RectTransform(asset);
|
var m_Rect = new RectTransform(asset);
|
||||||
assetsFile.TransformList.Add(asset.m_PathID, m_Rect);
|
assetsFile.TransformList.Add(asset.m_PathID, m_Rect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
{
|
{
|
||||||
var m_Texture2D = new Texture2D(asset, false);
|
var m_Texture2D = new Texture2D(asset, false);
|
||||||
if (!string.IsNullOrEmpty(m_Texture2D.path))
|
if (!string.IsNullOrEmpty(m_Texture2D.path))
|
||||||
asset.fullSize = asset.Size + (int)m_Texture2D.size;
|
asset.fullSize = asset.Size + (int)m_Texture2D.size;
|
||||||
goto case ClassIDReference.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDReference.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
{
|
{
|
||||||
var m_AudioClip = new AudioClip(asset, false);
|
var m_AudioClip = new AudioClip(asset, false);
|
||||||
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
||||||
asset.fullSize = asset.Size + (int)m_AudioClip.m_Size;
|
asset.fullSize = asset.Size + (int)m_AudioClip.m_Size;
|
||||||
goto case ClassIDReference.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDReference.VideoClip:
|
case ClassIDType.VideoClip:
|
||||||
{
|
{
|
||||||
var m_VideoClip = new VideoClip(asset, false);
|
var m_VideoClip = new VideoClip(asset, false);
|
||||||
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
||||||
asset.fullSize = asset.Size + (int)m_VideoClip.m_Size;
|
asset.fullSize = asset.Size + (int)m_VideoClip.m_Size;
|
||||||
goto case ClassIDReference.NamedObject;
|
goto case ClassIDType.NamedObject;
|
||||||
}
|
}
|
||||||
case ClassIDReference.NamedObject:
|
case ClassIDType.NamedObject:
|
||||||
case ClassIDReference.Mesh:
|
case ClassIDType.Mesh:
|
||||||
case ClassIDReference.Shader:
|
case ClassIDType.Shader:
|
||||||
case ClassIDReference.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
case ClassIDReference.AnimationClip:
|
case ClassIDType.AnimationClip:
|
||||||
case ClassIDReference.Font:
|
case ClassIDType.Font:
|
||||||
case ClassIDReference.MovieTexture:
|
case ClassIDType.MovieTexture:
|
||||||
case ClassIDReference.Sprite:
|
case ClassIDType.Sprite:
|
||||||
{
|
{
|
||||||
var obj = new NamedObject(asset);
|
var obj = new NamedObject(asset);
|
||||||
asset.Text = obj.m_Name;
|
asset.Text = obj.m_Name;
|
||||||
exportable = true;
|
exportable = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Avatar:
|
case ClassIDType.Avatar:
|
||||||
case ClassIDReference.AnimatorController:
|
case ClassIDType.AnimatorController:
|
||||||
case ClassIDReference.AnimatorOverrideController:
|
case ClassIDType.AnimatorOverrideController:
|
||||||
case ClassIDReference.Material:
|
case ClassIDType.Material:
|
||||||
case ClassIDReference.MonoScript:
|
case ClassIDType.MonoScript:
|
||||||
case ClassIDReference.SpriteAtlas:
|
case ClassIDType.SpriteAtlas:
|
||||||
{
|
{
|
||||||
var obj = new NamedObject(asset);
|
var obj = new NamedObject(asset);
|
||||||
asset.Text = obj.m_Name;
|
asset.Text = obj.m_Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Animator:
|
case ClassIDType.Animator:
|
||||||
{
|
{
|
||||||
exportable = true;
|
exportable = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
{
|
{
|
||||||
var m_MonoBehaviour = new MonoBehaviour(asset);
|
var m_MonoBehaviour = new MonoBehaviour(asset);
|
||||||
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGetPD(out var script))
|
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGetPD(out var script))
|
||||||
@ -263,13 +263,13 @@ namespace AssetStudio
|
|||||||
exportable = true;
|
exportable = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.PlayerSettings:
|
case ClassIDType.PlayerSettings:
|
||||||
{
|
{
|
||||||
var plSet = new PlayerSettings(asset);
|
var plSet = new PlayerSettings(asset);
|
||||||
productName = plSet.productName;
|
productName = plSet.productName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.AssetBundle:
|
case ClassIDType.AssetBundle:
|
||||||
{
|
{
|
||||||
ab = new AssetBundle(asset);
|
ab = new AssetBundle(asset);
|
||||||
asset.Text = ab.m_Name;
|
asset.Text = ab.m_Name;
|
||||||
@ -341,17 +341,17 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.Transform:
|
case ClassIDType.Transform:
|
||||||
{
|
{
|
||||||
m_GameObject.m_Transform = m_Component;
|
m_GameObject.m_Transform = m_Component;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.MeshRenderer:
|
case ClassIDType.MeshRenderer:
|
||||||
{
|
{
|
||||||
m_GameObject.m_MeshRenderer = m_Component;
|
m_GameObject.m_MeshRenderer = m_Component;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.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.TryGetPD(out var assetPreloadData))
|
||||||
@ -364,7 +364,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.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.TryGetPD(out var assetPreloadData))
|
||||||
@ -377,7 +377,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ClassIDReference.Animator:
|
case ClassIDType.Animator:
|
||||||
{
|
{
|
||||||
m_GameObject.m_Animator = m_Component;
|
m_GameObject.m_Animator = m_Component;
|
||||||
asset.Text = m_GameObject.preloadData.Text;
|
asset.Text = m_GameObject.preloadData.Text;
|
||||||
@ -425,19 +425,33 @@ namespace AssetStudio
|
|||||||
#region build list of class strucutres
|
#region build list of class strucutres
|
||||||
if (buildClassStructures)
|
if (buildClassStructures)
|
||||||
{
|
{
|
||||||
//group class structures by versionv
|
|
||||||
foreach (var assetsFile in assetsfileList)
|
foreach (var assetsFile in assetsfileList)
|
||||||
{
|
{
|
||||||
if (AllTypeMap.TryGetValue(assetsFile.unityVersion, out var curVer))
|
if (AllTypeMap.TryGetValue(assetsFile.unityVersion, out var curVer))
|
||||||
{
|
{
|
||||||
foreach (var type in assetsFile.m_Type)
|
foreach (var type in assetsFile.m_Types.Where(x => x.m_Nodes != null))
|
||||||
{
|
{
|
||||||
curVer[type.Key] = new TypeItem(type.Key, type.Value);
|
var key = type.classID;
|
||||||
|
if (type.m_ScriptTypeIndex >= 0)
|
||||||
|
{
|
||||||
|
key = -1 - type.m_ScriptTypeIndex;
|
||||||
|
}
|
||||||
|
curVer[key] = new TypeTreeItem(key, type.m_Nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AllTypeMap.Add(assetsFile.unityVersion, assetsFile.m_Type.ToDictionary(x => x.Key, y => new TypeItem(y.Key, y.Value)));
|
var items = new SortedDictionary<int, TypeTreeItem>();
|
||||||
|
foreach (var type in assetsFile.m_Types.Where(x => x.m_Nodes != null))
|
||||||
|
{
|
||||||
|
var key = type.classID;
|
||||||
|
if (type.m_ScriptTypeIndex >= 0)
|
||||||
|
{
|
||||||
|
key = -1 - type.m_ScriptTypeIndex;
|
||||||
|
}
|
||||||
|
items.Add(key, new TypeTreeItem(key, type.m_Nodes));
|
||||||
|
}
|
||||||
|
AllTypeMap.Add(assetsFile.unityVersion, items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -494,73 +508,73 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
switch (asset.Type)
|
switch (asset.Type)
|
||||||
{
|
{
|
||||||
case ClassIDReference.Texture2D:
|
case ClassIDType.Texture2D:
|
||||||
if (ExportTexture2D(asset, exportpath, true))
|
if (ExportTexture2D(asset, exportpath, true))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.AudioClip:
|
case ClassIDType.AudioClip:
|
||||||
if (ExportAudioClip(asset, exportpath))
|
if (ExportAudioClip(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Shader:
|
case ClassIDType.Shader:
|
||||||
if (ExportShader(asset, exportpath))
|
if (ExportShader(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.TextAsset:
|
case ClassIDType.TextAsset:
|
||||||
if (ExportTextAsset(asset, exportpath))
|
if (ExportTextAsset(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.MonoBehaviour:
|
case ClassIDType.MonoBehaviour:
|
||||||
if (ExportMonoBehaviour(asset, exportpath))
|
if (ExportMonoBehaviour(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Font:
|
case ClassIDType.Font:
|
||||||
if (ExportFont(asset, exportpath))
|
if (ExportFont(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Mesh:
|
case ClassIDType.Mesh:
|
||||||
if (ExportMesh(asset, exportpath))
|
if (ExportMesh(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.VideoClip:
|
case ClassIDType.VideoClip:
|
||||||
if (ExportVideoClip(asset, exportpath))
|
if (ExportVideoClip(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.MovieTexture:
|
case ClassIDType.MovieTexture:
|
||||||
if (ExportMovieTexture(asset, exportpath))
|
if (ExportMovieTexture(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Sprite:
|
case ClassIDType.Sprite:
|
||||||
if (ExportSprite(asset, exportpath))
|
if (ExportSprite(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.Animator:
|
case ClassIDType.Animator:
|
||||||
if (ExportAnimator(asset, exportpath))
|
if (ExportAnimator(asset, exportpath))
|
||||||
{
|
{
|
||||||
exportedCount++;
|
exportedCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ClassIDReference.AnimationClip:
|
case ClassIDType.AnimationClip:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (ExportRawFile(asset, exportpath))
|
if (ExportRawFile(asset, exportpath))
|
||||||
|
@ -6,21 +6,21 @@ using System.Windows.Forms;
|
|||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public class TypeItem : ListViewItem
|
public class TypeTreeItem : ListViewItem
|
||||||
{
|
{
|
||||||
public List<TypeTreeNode> typeTreeList;
|
public List<TypeTreeNode> m_Nodes;
|
||||||
|
|
||||||
public TypeItem(int classID, List<TypeTreeNode> typeTreeList)
|
public TypeTreeItem(int typeID, List<TypeTreeNode> m_Nodes)
|
||||||
{
|
{
|
||||||
this.typeTreeList = typeTreeList;
|
this.m_Nodes = m_Nodes;
|
||||||
Text = typeTreeList[0].m_Type + " " + typeTreeList[0].m_Name;
|
Text = m_Nodes[0].m_Type + " " + m_Nodes[0].m_Name;
|
||||||
SubItems.Add(classID.ToString());
|
SubItems.Add(typeID.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
foreach (var i in typeTreeList)
|
foreach (var i in m_Nodes)
|
||||||
{
|
{
|
||||||
sb.AppendFormat("{0}{1} {2} {3} {4}\r\n", new string('\t', i.m_Level), i.m_Type, i.m_Name, i.m_ByteSize, (i.m_MetaFlag & 0x4000) != 0);
|
sb.AppendFormat("{0}{1} {2} {3} {4}\r\n", new string('\t', i.m_Level), i.m_Type, i.m_Name, i.m_ByteSize, (i.m_MetaFlag & 0x4000) != 0);
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user