- [Core] Exportable Material.
- [Core] Added name to `PPtr` and `Object` when available.
This commit is contained in:
@@ -11,6 +11,8 @@ namespace AssetStudio
|
||||
public PPtr<RuntimeAnimatorController> m_Controller;
|
||||
public bool m_HasTransformHierarchy = true;
|
||||
|
||||
public override string Name => m_GameObject.Name;
|
||||
|
||||
public Animator(ObjectReader reader) : base(reader)
|
||||
{
|
||||
m_Avatar = new PPtr<Avatar>(reader);
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace AssetStudio
|
||||
public Animator m_Animator;
|
||||
public Animation m_Animation;
|
||||
|
||||
public override string Name => m_Name;
|
||||
public GameObject(ObjectReader reader) : base(reader)
|
||||
{
|
||||
int m_Component_size = reader.ReadInt32();
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace AssetStudio
|
||||
public int Count;
|
||||
public KeyValuePair<string, Index>[] AssetMap;
|
||||
|
||||
public override string Name => "IndexObject";
|
||||
|
||||
public IndexObject(ObjectReader reader) : base(reader)
|
||||
{
|
||||
Count = reader.ReadInt32();
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace AssetStudio
|
||||
public PPtr<MonoScript> m_Script;
|
||||
public string m_Name;
|
||||
|
||||
public override string Name => string.IsNullOrEmpty(m_Name) ? m_Script.Name : m_Name;
|
||||
public MonoBehaviour(ObjectReader reader) : base(reader)
|
||||
{
|
||||
m_Script = new PPtr<MonoScript>(reader);
|
||||
|
||||
@@ -11,6 +11,8 @@ namespace AssetStudio
|
||||
public string m_Namespace;
|
||||
public string m_AssemblyName;
|
||||
|
||||
public override string Name => string.IsNullOrEmpty(m_Name) ? m_ClassName : m_Name;
|
||||
|
||||
public MonoScript(ObjectReader reader) : base(reader)
|
||||
{
|
||||
if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up
|
||||
|
||||
@@ -9,6 +9,8 @@ namespace AssetStudio
|
||||
{
|
||||
public string m_Name;
|
||||
|
||||
public override string Name => m_Name;
|
||||
|
||||
protected NamedObject(ObjectReader reader) : base(reader)
|
||||
{
|
||||
m_Name = reader.ReadAlignedString();
|
||||
|
||||
@@ -24,6 +24,8 @@ namespace AssetStudio
|
||||
[JsonIgnore]
|
||||
public uint byteSize;
|
||||
|
||||
public virtual string Name => string.Empty;
|
||||
|
||||
public Object(ObjectReader reader)
|
||||
{
|
||||
this.reader = reader;
|
||||
|
||||
@@ -12,6 +12,8 @@ namespace AssetStudio
|
||||
private SerializedFile assetsFile;
|
||||
private int index = -2; //-2 - Prepare, -1 - Missing
|
||||
|
||||
public string Name => TryGet(out var obj) ? obj.Name : string.Empty;
|
||||
|
||||
public PPtr(int m_FileID, long m_PathID, SerializedFile assetsFile)
|
||||
{
|
||||
this.m_FileID = m_FileID;
|
||||
|
||||
@@ -1002,6 +1002,8 @@ namespace AssetStudio
|
||||
public uint[][] decompressedLengths;
|
||||
public byte[] compressedBlob;
|
||||
|
||||
public override string Name => m_ParsedForm?.m_Name ?? m_Name;
|
||||
|
||||
public Shader(ObjectReader reader) : base(reader)
|
||||
{
|
||||
if (version[0] == 5 && version[1] >= 5 || version[0] > 5) //5.5 and up
|
||||
|
||||
@@ -17,8 +17,8 @@ namespace AssetStudioCLI
|
||||
|
||||
public AssetItem(Object asset)
|
||||
{
|
||||
Text = "";
|
||||
Asset = asset;
|
||||
Text = asset.Name;
|
||||
SourceFile = asset.assetsFile;
|
||||
Type = asset.type;
|
||||
TypeString = Type.ToString();
|
||||
|
||||
@@ -430,6 +430,8 @@ namespace AssetStudioCLI
|
||||
return ExportAnimationClip(item, exportPath);
|
||||
case ClassIDType.MiHoYoBinData:
|
||||
return ExportMiHoYoBinData(item, exportPath);
|
||||
case ClassIDType.Material:
|
||||
return ExportJSONFile(item, exportPath);
|
||||
default:
|
||||
return ExportRawFile(item, exportPath);
|
||||
}
|
||||
|
||||
@@ -297,56 +297,24 @@ namespace AssetStudioCLI
|
||||
switch (asset)
|
||||
{
|
||||
case GameObject m_GameObject:
|
||||
assetItem.Text = m_GameObject.m_Name;
|
||||
exportable = ModelOnly && m_GameObject.HasModel();
|
||||
break;
|
||||
case Texture2D m_Texture2D:
|
||||
if (!string.IsNullOrEmpty(m_Texture2D.m_StreamData?.path))
|
||||
assetItem.FullSize = asset.byteSize + m_Texture2D.m_StreamData.size;
|
||||
assetItem.Text = m_Texture2D.m_Name;
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case AudioClip m_AudioClip:
|
||||
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
||||
assetItem.FullSize = asset.byteSize + m_AudioClip.m_Size;
|
||||
assetItem.Text = m_AudioClip.m_Name;
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case VideoClip m_VideoClip:
|
||||
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
||||
assetItem.FullSize = asset.byteSize + (long)m_VideoClip.m_ExternalResources.m_Size;
|
||||
assetItem.Text = m_VideoClip.m_Name;
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case Shader m_Shader when Shader.Parsable:
|
||||
assetItem.Text = m_Shader.m_ParsedForm?.m_Name ?? m_Shader.m_Name;
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case Mesh _:
|
||||
case TextAsset _:
|
||||
case AnimationClip _ when AnimationClip.Parsable:
|
||||
case Font _:
|
||||
case Sprite _:
|
||||
case Material _:
|
||||
assetItem.Text = ((NamedObject)asset).m_Name;
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case Animator m_Animator:
|
||||
if (m_Animator.m_GameObject.TryGet(out var gameObject))
|
||||
{
|
||||
assetItem.Text = gameObject.m_Name;
|
||||
}
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case MonoBehaviour m_MonoBehaviour:
|
||||
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGet(out var m_Script))
|
||||
{
|
||||
assetItem.Text = m_Script.m_ClassName;
|
||||
}
|
||||
else
|
||||
{
|
||||
assetItem.Text = m_MonoBehaviour.m_Name;
|
||||
}
|
||||
exportable = !ModelOnly && assemblyLoader.Loaded;
|
||||
break;
|
||||
case AssetBundle m_AssetBundle:
|
||||
@@ -360,17 +328,12 @@ namespace AssetStudioCLI
|
||||
containers.Add((m_AssetBundle.m_PreloadTable[k], m_Container.Key));
|
||||
}
|
||||
}
|
||||
assetItem.Text = m_AssetBundle.m_Name;
|
||||
break;
|
||||
case IndexObject m_IndexObject:
|
||||
foreach (var index in m_IndexObject.AssetMap)
|
||||
{
|
||||
mihoyoBinDataNames.Add((index.Value.Object, index.Key));
|
||||
}
|
||||
assetItem.Text = "IndexObject";
|
||||
break;
|
||||
case MiHoYoBinData m_MiHoYoBinData:
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
case ResourceManager m_ResourceManager:
|
||||
foreach (var m_Container in m_ResourceManager.m_Container)
|
||||
@@ -378,8 +341,17 @@ namespace AssetStudioCLI
|
||||
containers.Add((m_Container.Value, m_Container.Key));
|
||||
}
|
||||
break;
|
||||
case NamedObject m_NamedObject:
|
||||
assetItem.Text = m_NamedObject.m_Name;
|
||||
case Mesh _:
|
||||
case TextAsset _:
|
||||
case AnimationClip _ when AnimationClip.Parsable:
|
||||
case Font _:
|
||||
case MovieTexture _:
|
||||
case Sprite _:
|
||||
case Material _:
|
||||
case MiHoYoBinData _:
|
||||
case Shader _ when Shader.Parsable:
|
||||
case Animator _:
|
||||
exportable = !ModelOnly;
|
||||
break;
|
||||
}
|
||||
if (assetItem.Text == "")
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace AssetStudioGUI
|
||||
public AssetItem(Object asset)
|
||||
{
|
||||
Asset = asset;
|
||||
Text = asset.Name;
|
||||
SourceFile = asset.assetsFile;
|
||||
Type = asset.type;
|
||||
TypeString = Type.ToString();
|
||||
|
||||
@@ -441,6 +441,8 @@ namespace AssetStudioGUI
|
||||
return ExportAnimationClip(item, exportPath);
|
||||
case ClassIDType.MiHoYoBinData:
|
||||
return ExportMiHoYoBinData(item, exportPath);
|
||||
case ClassIDType.Material:
|
||||
return ExportJSONFile(item, exportPath);
|
||||
default:
|
||||
return ExportRawFile(item, exportPath);
|
||||
}
|
||||
|
||||
@@ -265,56 +265,19 @@ namespace AssetStudioGUI
|
||||
var exportable = false;
|
||||
switch (asset)
|
||||
{
|
||||
case GameObject m_GameObject:
|
||||
assetItem.Text = m_GameObject.m_Name;
|
||||
break;
|
||||
case Texture2D m_Texture2D:
|
||||
if (!string.IsNullOrEmpty(m_Texture2D.m_StreamData?.path))
|
||||
assetItem.FullSize = asset.byteSize + m_Texture2D.m_StreamData.size;
|
||||
assetItem.Text = m_Texture2D.m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case AudioClip m_AudioClip:
|
||||
if (!string.IsNullOrEmpty(m_AudioClip.m_Source))
|
||||
assetItem.FullSize = asset.byteSize + m_AudioClip.m_Size;
|
||||
assetItem.Text = m_AudioClip.m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case VideoClip m_VideoClip:
|
||||
if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath))
|
||||
assetItem.FullSize = asset.byteSize + (long)m_VideoClip.m_ExternalResources.m_Size;
|
||||
assetItem.Text = m_VideoClip.m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case Shader m_Shader:
|
||||
assetItem.Text = m_Shader.m_ParsedForm?.m_Name ?? m_Shader.m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case Mesh _:
|
||||
case TextAsset _:
|
||||
case AnimationClip _:
|
||||
case Font _:
|
||||
case MovieTexture _:
|
||||
case Sprite _:
|
||||
assetItem.Text = ((NamedObject)asset).m_Name;
|
||||
exportable = true;
|
||||
break;
|
||||
case Animator m_Animator:
|
||||
if (m_Animator.m_GameObject.TryGet(out var gameObject))
|
||||
{
|
||||
assetItem.Text = gameObject.m_Name;
|
||||
}
|
||||
exportable = true;
|
||||
break;
|
||||
case MonoBehaviour m_MonoBehaviour:
|
||||
if (m_MonoBehaviour.m_Name == "" && m_MonoBehaviour.m_Script.TryGet(out var m_Script))
|
||||
{
|
||||
assetItem.Text = m_Script.m_ClassName;
|
||||
}
|
||||
else
|
||||
{
|
||||
assetItem.Text = m_MonoBehaviour.m_Name;
|
||||
}
|
||||
exportable = true;
|
||||
break;
|
||||
case PlayerSettings m_PlayerSettings:
|
||||
@@ -334,17 +297,12 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
}
|
||||
assetItem.Text = m_AssetBundle.m_Name;
|
||||
break;
|
||||
case IndexObject m_IndexObject:
|
||||
foreach(var index in m_IndexObject.AssetMap)
|
||||
{
|
||||
mihoyoBinDataNames.Add((index.Value.Object, index.Key));
|
||||
}
|
||||
assetItem.Text = "IndexObject";
|
||||
break;
|
||||
case MiHoYoBinData m_MiHoYoBinData:
|
||||
exportable = true;
|
||||
break;
|
||||
case ResourceManager m_ResourceManager:
|
||||
foreach (var m_Container in m_ResourceManager.m_Container)
|
||||
@@ -352,8 +310,18 @@ namespace AssetStudioGUI
|
||||
containers.Add((m_Container.Value, m_Container.Key));
|
||||
}
|
||||
break;
|
||||
case NamedObject m_NamedObject:
|
||||
assetItem.Text = m_NamedObject.m_Name;
|
||||
case Mesh _:
|
||||
case TextAsset _:
|
||||
case AnimationClip _ when AnimationClip.Parsable:
|
||||
case Font _:
|
||||
case MovieTexture _:
|
||||
case Sprite _:
|
||||
case Material _:
|
||||
case MiHoYoBinData _:
|
||||
case Shader _ when Shader.Parsable:
|
||||
case Animator _:
|
||||
case MonoBehaviour _:
|
||||
exportable = true;
|
||||
break;
|
||||
}
|
||||
if (assetItem.Text == "")
|
||||
|
||||
Reference in New Issue
Block a user