mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
Fixed Sprite read
improved script dump
This commit is contained in:
parent
eb170d4f34
commit
356d5fa8a4
@ -174,7 +174,8 @@ namespace AssetStudio
|
|||||||
m_PixelsToUnits = reader.ReadSingle();
|
m_PixelsToUnits = reader.ReadSingle();
|
||||||
if (version[0] > 5
|
if (version[0] > 5
|
||||||
|| (version[0] == 5 && version[1] > 4)
|
|| (version[0] == 5 && version[1] > 4)
|
||||||
|| (version[0] == 5 && version[1] == 4 && version[2] >= 2)) //5.4.2 and up
|
|| (version[0] == 5 && version[1] == 4 && version[2] >= 2)
|
||||||
|
|| (version[0] == 5 && version[1] == 4 && version[2] == 1 && buildType.IsPatch && version[3] >= 3)) //5.4.1p3 and up
|
||||||
{
|
{
|
||||||
m_Pivot = reader.ReadVector2();
|
m_Pivot = reader.ReadVector2();
|
||||||
}
|
}
|
||||||
|
@ -36,12 +36,20 @@ namespace AssetStudio
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ReadStringToNull(this BinaryReader reader)
|
public static string ReadStringToNull(this BinaryReader reader, int maxLength = 32767)
|
||||||
{
|
{
|
||||||
var bytes = new List<byte>();
|
var bytes = new List<byte>();
|
||||||
byte b;
|
int count = 0;
|
||||||
while (reader.BaseStream.Position != reader.BaseStream.Length && (b = reader.ReadByte()) != 0)
|
while (reader.BaseStream.Position != reader.BaseStream.Length && count < maxLength)
|
||||||
|
{
|
||||||
|
var b = reader.ReadByte();
|
||||||
|
if (b == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
bytes.Add(b);
|
bytes.Add(b);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
return Encoding.UTF8.GetString(bytes.ToArray());
|
return Encoding.UTF8.GetString(bytes.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
private static FileType CheckFileType(EndianBinaryReader reader)
|
private static FileType CheckFileType(EndianBinaryReader reader)
|
||||||
{
|
{
|
||||||
var signature = reader.ReadStringToNull();
|
var signature = reader.ReadStringToNull(20);
|
||||||
reader.Position = 0;
|
reader.Position = 0;
|
||||||
switch (signature)
|
switch (signature)
|
||||||
{
|
{
|
||||||
|
Binary file not shown.
@ -73,11 +73,6 @@
|
|||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="dnlib, Version=3.0.0.0, Culture=neutral, PublicKeyToken=50e96378b6e77999, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>..\AssetStudio\Libraries\dnlib.dll</HintPath>
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="OpenTK, Version=3.0.1.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
<Reference Include="OpenTK, Version=3.0.1.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\AssetStudio\Libraries\OpenTK.dll</HintPath>
|
<HintPath>..\AssetStudio\Libraries\OpenTK.dll</HintPath>
|
||||||
|
@ -1707,12 +1707,8 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
FMODreset();
|
FMODreset();
|
||||||
|
|
||||||
ModuleLoaded = false;
|
scriptDumper.Dispose();
|
||||||
foreach (var pair in LoadedModuleDic)
|
scriptDumper = null;
|
||||||
{
|
|
||||||
pair.Value.Dispose();
|
|
||||||
}
|
|
||||||
LoadedModuleDic.Clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assetListView_MouseClick(object sender, MouseEventArgs e)
|
private void assetListView_MouseClick(object sender, MouseEventArgs e)
|
||||||
|
@ -7,7 +7,6 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using AssetStudio;
|
using AssetStudio;
|
||||||
using dnlib.DotNet;
|
|
||||||
using static AssetStudioGUI.Exporter;
|
using static AssetStudioGUI.Exporter;
|
||||||
using Object = AssetStudio.Object;
|
using Object = AssetStudio.Object;
|
||||||
|
|
||||||
@ -16,10 +15,9 @@ namespace AssetStudioGUI
|
|||||||
internal static class Studio
|
internal static class Studio
|
||||||
{
|
{
|
||||||
public static AssetsManager assetsManager = new AssetsManager();
|
public static AssetsManager assetsManager = new AssetsManager();
|
||||||
|
public static ScriptDumper scriptDumper = new ScriptDumper();
|
||||||
public static List<AssetItem> exportableAssets = new List<AssetItem>();
|
public static List<AssetItem> exportableAssets = new List<AssetItem>();
|
||||||
public static List<AssetItem> visibleAssets = new List<AssetItem>();
|
public static List<AssetItem> visibleAssets = new List<AssetItem>();
|
||||||
public static bool ModuleLoaded;
|
|
||||||
public static Dictionary<string, ModuleDef> LoadedModuleDic = new Dictionary<string, ModuleDef>();
|
|
||||||
|
|
||||||
public static void ExtractFile(string[] fileNames)
|
public static void ExtractFile(string[] fileNames)
|
||||||
{
|
{
|
||||||
@ -614,36 +612,21 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
public static string GetScriptString(ObjectReader reader)
|
public static string GetScriptString(ObjectReader reader)
|
||||||
{
|
{
|
||||||
if (!ModuleLoaded)
|
if (scriptDumper == null)
|
||||||
{
|
{
|
||||||
var openFolderDialog = new OpenFolderDialog();
|
var openFolderDialog = new OpenFolderDialog();
|
||||||
openFolderDialog.Title = "Select Assembly Folder";
|
openFolderDialog.Title = "Select Assembly Folder";
|
||||||
if (openFolderDialog.ShowDialog() == DialogResult.OK)
|
if (openFolderDialog.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
var files = Directory.GetFiles(openFolderDialog.Folder, "*.dll");
|
scriptDumper = new ScriptDumper(openFolderDialog.Folder);
|
||||||
var moduleContext = new ModuleContext();
|
|
||||||
var asmResolver = new AssemblyResolver(moduleContext, true);
|
|
||||||
var resolver = new Resolver(asmResolver);
|
|
||||||
moduleContext.AssemblyResolver = asmResolver;
|
|
||||||
moduleContext.Resolver = resolver;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (var file in files)
|
|
||||||
{
|
|
||||||
var module = ModuleDefMD.Load(file, moduleContext);
|
|
||||||
LoadedModuleDic.Add(Path.GetFileName(file), module);
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
catch
|
|
||||||
{
|
{
|
||||||
// ignored
|
scriptDumper = new ScriptDumper();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ModuleLoaded = true;
|
return scriptDumper.DumpScript(reader);
|
||||||
}
|
|
||||||
|
|
||||||
return ScriptHelper.GetScriptString(reader, LoadedModuleDic);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
<Compile Include="ModelConverter.cs" />
|
<Compile Include="ModelConverter.cs" />
|
||||||
<Compile Include="ModelExporter.cs" />
|
<Compile Include="ModelExporter.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="ScriptHelper.cs" />
|
<Compile Include="ScriptDumper.cs" />
|
||||||
<Compile Include="ShaderConverter.cs" />
|
<Compile Include="ShaderConverter.cs" />
|
||||||
<Compile Include="SpriteHelper.cs" />
|
<Compile Include="SpriteHelper.cs" />
|
||||||
<Compile Include="Texture2DConverter.cs" />
|
<Compile Include="Texture2DConverter.cs" />
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using dnlib.DotNet;
|
using dnlib.DotNet;
|
||||||
@ -7,9 +8,37 @@ using dnlib.DotNet;
|
|||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
//TODO unfinished
|
//TODO unfinished
|
||||||
public static class ScriptHelper
|
//Separate, EngineType read
|
||||||
|
public class ScriptDumper : IDisposable
|
||||||
{
|
{
|
||||||
public static string GetScriptString(ObjectReader reader, Dictionary<string, ModuleDef> moduleDic)
|
private Dictionary<string, ModuleDef> moduleDic = new Dictionary<string, ModuleDef>();
|
||||||
|
|
||||||
|
public ScriptDumper() { }
|
||||||
|
|
||||||
|
public ScriptDumper(string path)
|
||||||
|
{
|
||||||
|
var files = Directory.GetFiles(path, "*.dll");
|
||||||
|
var moduleContext = new ModuleContext();
|
||||||
|
var asmResolver = new AssemblyResolver(moduleContext);
|
||||||
|
var resolver = new Resolver(asmResolver);
|
||||||
|
moduleContext.AssemblyResolver = asmResolver;
|
||||||
|
moduleContext.Resolver = resolver;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
var module = ModuleDefMD.Load(file, moduleContext);
|
||||||
|
asmResolver.AddToCache(module);
|
||||||
|
moduleDic.Add(Path.GetFileName(file), module);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DumpScript(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var m_MonoBehaviour = new MonoBehaviour(reader);
|
var m_MonoBehaviour = new MonoBehaviour(reader);
|
||||||
var sb = CreateMonoBehaviourHeader(m_MonoBehaviour);
|
var sb = CreateMonoBehaviourHeader(m_MonoBehaviour);
|
||||||
@ -25,16 +54,32 @@ namespace AssetStudio
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
DumpType(typeDef.ToTypeSig(), sb, reader, null, -1, true);
|
DumpType(typeDef.ToTypeSig(), sb, reader, null, -1, true);
|
||||||
|
var readed = reader.Position - reader.byteStart;
|
||||||
|
if (readed != reader.byteSize)
|
||||||
|
{
|
||||||
|
Logger.Error($"Error while dump type, read {readed} bytes but expected {reader.byteSize} bytes");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
sb = CreateMonoBehaviourHeader(m_MonoBehaviour);
|
sb = CreateMonoBehaviourHeader(m_MonoBehaviour);
|
||||||
|
Logger.Error("Error while dump type");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
foreach (var pair in moduleDic)
|
||||||
|
{
|
||||||
|
pair.Value.Dispose();
|
||||||
|
}
|
||||||
|
moduleDic.Clear();
|
||||||
|
moduleDic = null;
|
||||||
|
}
|
||||||
|
|
||||||
private static StringBuilder CreateMonoBehaviourHeader(MonoBehaviour m_MonoBehaviour)
|
private static StringBuilder CreateMonoBehaviourHeader(MonoBehaviour m_MonoBehaviour)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
@ -49,7 +94,7 @@ namespace AssetStudio
|
|||||||
return sb;
|
return sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void DumpType(TypeSig typeSig, StringBuilder sb, ObjectReader reader, string name, int indent, bool isRoot = false)
|
private static void DumpType(TypeSig typeSig, StringBuilder sb, ObjectReader reader, string name, int indent, bool isRoot = false, bool align = true)
|
||||||
{
|
{
|
||||||
var typeDef = typeSig.ToTypeDefOrRef().ResolveTypeDefThrow();
|
var typeDef = typeSig.ToTypeDefOrRef().ResolveTypeDefThrow();
|
||||||
if (typeSig.IsPrimitive)
|
if (typeSig.IsPrimitive)
|
||||||
@ -94,6 +139,7 @@ namespace AssetStudio
|
|||||||
value = reader.ReadChar();
|
value = reader.ReadChar();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (align)
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name} = {value}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name} = {value}");
|
||||||
return;
|
return;
|
||||||
@ -131,18 +177,27 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (genericInstSig.GenericArguments.Count == 1)
|
if (genericInstSig.GenericArguments.Count == 1)
|
||||||
{
|
{
|
||||||
|
var genericType = genericInstSig.GenericType.ToTypeDefOrRef().ResolveTypeDefThrow();
|
||||||
var type = genericInstSig.GenericArguments[0].ToTypeDefOrRef().ResolveTypeDefThrow();
|
var type = genericInstSig.GenericArguments[0].ToTypeDefOrRef().ResolveTypeDefThrow();
|
||||||
if (!type.IsEnum && !IsBaseType(type) && !IsAssignFromUnityObject(type) && !IsEngineType(type) && !type.IsSerializable)
|
if (!type.IsEnum && !IsBaseType(type) && !IsAssignFromUnityObject(type) && !IsEngineType(type) && !type.IsSerializable)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var size = reader.ReadInt32();
|
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeSig.TypeName} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeSig.TypeName} {name}");
|
||||||
|
if (genericType.Interfaces.Any(x => x.Interface.FullName == "System.Collections.Generic.ICollection`1<T>")) //System.Collections.Generic.IEnumerable`1<T>
|
||||||
|
{
|
||||||
|
var size = reader.ReadInt32();
|
||||||
sb.AppendLine($"{new string('\t', indent + 1)}int size = {size}");
|
sb.AppendLine($"{new string('\t', indent + 1)}int size = {size}");
|
||||||
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, reader, "data", indent + 2);
|
DumpType(genericInstSig.GenericArguments[0], sb, reader, "data", indent + 2, false, false);
|
||||||
|
}
|
||||||
|
reader.AlignStream();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DumpType(genericType.ToTypeSig(), sb, reader, "data", indent + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -158,31 +213,37 @@ namespace AssetStudio
|
|||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name} = {reader.ReadUInt32()}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name} = {reader.ReadUInt32()}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (indent != -1 && !IsEngineType(typeDef) && !typeDef.IsSerializable)
|
if (!isRoot && !IsEngineType(typeDef) && !typeDef.IsSerializable)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (typeDef.FullName == "UnityEngine.Rect")
|
if (typeDef.FullName == "UnityEngine.Rect")
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
var rect = reader.ReadSingleArray(4);
|
var prefix = new string('\t', indent + 1);
|
||||||
|
sb.AppendLine($"{prefix}float x = {reader.ReadSingle()}");
|
||||||
|
sb.AppendLine($"{prefix}float y = {reader.ReadSingle()}");
|
||||||
|
sb.AppendLine($"{prefix}float width = {reader.ReadSingle()}");
|
||||||
|
sb.AppendLine($"{prefix}float height = {reader.ReadSingle()}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (typeDef.FullName == "UnityEngine.LayerMask")
|
if (typeDef.FullName == "UnityEngine.LayerMask")
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
var value = reader.ReadInt32();
|
sb.AppendLine($"{new string('\t', indent + 1)}uint m_Bits = {reader.ReadUInt32()}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
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}");
|
||||||
|
sb.AppendLine($"{new string('\t', indent + 1)}<truncated>");
|
||||||
var animationCurve = new AnimationCurve<float>(reader, reader.ReadSingle);
|
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}");
|
||||||
|
sb.AppendLine($"{new string('\t', indent + 1)}<truncated>");
|
||||||
if (reader.version[0] == 5 && reader.version[1] < 5)
|
if (reader.version[0] == 5 && reader.version[1] < 5)
|
||||||
reader.Position += 68;
|
reader.Position += 68;
|
||||||
else if (reader.version[0] == 5 && reader.version[1] < 6)
|
else if (reader.version[0] == 5 && reader.version[1] < 6)
|
||||||
@ -194,10 +255,52 @@ namespace AssetStudio
|
|||||||
if (typeDef.FullName == "UnityEngine.RectOffset")
|
if (typeDef.FullName == "UnityEngine.RectOffset")
|
||||||
{
|
{
|
||||||
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
var left = reader.ReadSingle();
|
var prefix = new string('\t', indent + 1);
|
||||||
var right = reader.ReadSingle();
|
sb.AppendLine($"{prefix}float left = {reader.ReadSingle()}");
|
||||||
var top = reader.ReadSingle();
|
sb.AppendLine($"{prefix}float right = {reader.ReadSingle()}");
|
||||||
var bottom = reader.ReadSingle();
|
sb.AppendLine($"{prefix}float top = {reader.ReadSingle()}");
|
||||||
|
sb.AppendLine($"{prefix}float bottom = {reader.ReadSingle()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (typeDef.FullName == "UnityEngine.PropertyName")
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
|
sb.AppendLine($"{new string('\t', indent + 1)}int id = {reader.ReadInt32()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (typeDef.FullName == "UnityEngine.Color32")
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
|
var prefix = new string('\t', indent + 1);
|
||||||
|
sb.AppendLine($"{prefix}byte r = {reader.ReadByte()}");
|
||||||
|
sb.AppendLine($"{prefix}byte g = {reader.ReadByte()}");
|
||||||
|
sb.AppendLine($"{prefix}byte b = {reader.ReadByte()}");
|
||||||
|
sb.AppendLine($"{prefix}byte a = {reader.ReadByte()}");
|
||||||
|
reader.AlignStream();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (typeDef.FullName == "UnityEngine.Vector2Int")
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
|
var prefix = new string('\t', indent + 1);
|
||||||
|
sb.AppendLine($"{prefix}int x = {reader.ReadInt32()}");
|
||||||
|
sb.AppendLine($"{prefix}int y = {reader.ReadInt32()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (typeDef.FullName == "UnityEngine.Vector3Int")
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
|
var prefix = new string('\t', indent + 1);
|
||||||
|
sb.AppendLine($"{prefix}int x = {reader.ReadInt32()}");
|
||||||
|
sb.AppendLine($"{prefix}int y = {reader.ReadInt32()}");
|
||||||
|
sb.AppendLine($"{prefix}int z = {reader.ReadInt32()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (typeDef.FullName == "UnityEngine.Bounds")
|
||||||
|
{
|
||||||
|
sb.AppendLine($"{new string('\t', indent)}{typeDef.Name} {name}");
|
||||||
|
sb.AppendLine($"{new string('\t', indent + 1)}<truncated>");
|
||||||
|
new AABB(reader);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (typeDef.FullName == "UnityEngine.GUIStyle") //TODO
|
if (typeDef.FullName == "UnityEngine.GUIStyle") //TODO
|
||||||
@ -229,12 +332,27 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
{
|
||||||
|
if (fieldDef.FieldType.IsGenericParameter)
|
||||||
|
{
|
||||||
|
foreach (var g in typeDef.GenericParameters)
|
||||||
|
{
|
||||||
|
if (g.FullName == fieldDef.FieldType.FullName)
|
||||||
|
{
|
||||||
|
var type = ((GenericInstSig)typeSig).GenericArguments[0];
|
||||||
|
DumpType(type, sb, reader, fieldDef.Name, indent + 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
DumpType(fieldDef.FieldType, sb, reader, fieldDef.Name, indent + 1);
|
DumpType(fieldDef.FieldType, sb, reader, fieldDef.Name, indent + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static bool IsAssignFromUnityObject(TypeDef typeDef)
|
private static bool IsAssignFromUnityObject(TypeDef typeDef)
|
||||||
{
|
{
|
||||||
@ -308,6 +426,7 @@ namespace AssetStudio
|
|||||||
case "UnityEngine.Vector3":
|
case "UnityEngine.Vector3":
|
||||||
case "UnityEngine.Vector3Int":
|
case "UnityEngine.Vector3Int":
|
||||||
case "UnityEngine.Vector4":
|
case "UnityEngine.Vector4":
|
||||||
|
case "UnityEngine.PropertyName":
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
Loading…
Reference in New Issue
Block a user