Skip reading failed assets

This commit is contained in:
Perfare 2019-10-20 08:05:55 +08:00
parent 16dddc01e3
commit cffe96b409
2 changed files with 113 additions and 89 deletions

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using static AssetStudio.ImportHelper; using static AssetStudio.ImportHelper;
@ -110,7 +111,7 @@ namespace AssetStudio
catch catch
{ {
reader.Dispose(); reader.Dispose();
//Logger.Error($"Unable to load assets file {fileName}"); //Logger.Warning($"Unable to load assets file {fileName}");
} }
} }
else else
@ -121,7 +122,8 @@ namespace AssetStudio
private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null) private void LoadAssetsFromMemory(string fullName, EndianBinaryReader reader, string originalPath, string unityVersion = null)
{ {
var upperFileName = Path.GetFileName(fullName).ToUpper(); var fileName = Path.GetFileName(fullName);
var upperFileName = fileName.ToUpper();
if (!assetsFileListHash.Contains(upperFileName)) if (!assetsFileListHash.Contains(upperFileName))
{ {
try try
@ -239,92 +241,107 @@ namespace AssetStudio
foreach (var objectInfo in assetsFile.m_Objects) foreach (var objectInfo in assetsFile.m_Objects)
{ {
var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo); var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo);
switch (objectReader.type) try
{ {
case ClassIDType.Animation: Object obj;
assetsFile.Objects.Add(objectInfo.m_PathID, new Animation(objectReader)); switch (objectReader.type)
break; {
case ClassIDType.AnimationClip: case ClassIDType.Animation:
assetsFile.Objects.Add(objectInfo.m_PathID, new AnimationClip(objectReader)); obj = new Animation(objectReader);
break; break;
case ClassIDType.Animator: case ClassIDType.AnimationClip:
assetsFile.Objects.Add(objectInfo.m_PathID, new Animator(objectReader)); obj = new AnimationClip(objectReader);
break; break;
case ClassIDType.AnimatorController: case ClassIDType.Animator:
assetsFile.Objects.Add(objectInfo.m_PathID, new AnimatorController(objectReader)); obj = new Animator(objectReader);
break; break;
case ClassIDType.AnimatorOverrideController: case ClassIDType.AnimatorController:
assetsFile.Objects.Add(objectInfo.m_PathID, new AnimatorOverrideController(objectReader)); obj = new AnimatorController(objectReader);
break; break;
case ClassIDType.AssetBundle: case ClassIDType.AnimatorOverrideController:
assetsFile.Objects.Add(objectInfo.m_PathID, new AssetBundle(objectReader)); obj = new AnimatorOverrideController(objectReader);
break; break;
case ClassIDType.AudioClip: case ClassIDType.AssetBundle:
assetsFile.Objects.Add(objectInfo.m_PathID, new AudioClip(objectReader)); obj = new AssetBundle(objectReader);
break; break;
case ClassIDType.Avatar: case ClassIDType.AudioClip:
assetsFile.Objects.Add(objectInfo.m_PathID, new Avatar(objectReader)); obj = new AudioClip(objectReader);
break; break;
case ClassIDType.Font: case ClassIDType.Avatar:
assetsFile.Objects.Add(objectInfo.m_PathID, new Font(objectReader)); obj = new Avatar(objectReader);
break; break;
case ClassIDType.GameObject: case ClassIDType.Font:
assetsFile.Objects.Add(objectInfo.m_PathID, new GameObject(objectReader)); obj = new Font(objectReader);
break; break;
case ClassIDType.Material: case ClassIDType.GameObject:
assetsFile.Objects.Add(objectInfo.m_PathID, new Material(objectReader)); obj = new GameObject(objectReader);
break; break;
case ClassIDType.Mesh: case ClassIDType.Material:
assetsFile.Objects.Add(objectInfo.m_PathID, new Mesh(objectReader)); obj = new Material(objectReader);
break; break;
case ClassIDType.MeshFilter: case ClassIDType.Mesh:
assetsFile.Objects.Add(objectInfo.m_PathID, new MeshFilter(objectReader)); obj = new Mesh(objectReader);
break; break;
case ClassIDType.MeshRenderer: case ClassIDType.MeshFilter:
assetsFile.Objects.Add(objectInfo.m_PathID, new MeshRenderer(objectReader)); obj = new MeshFilter(objectReader);
break; break;
case ClassIDType.MonoBehaviour: case ClassIDType.MeshRenderer:
assetsFile.Objects.Add(objectInfo.m_PathID, new MonoBehaviour(objectReader)); obj = new MeshRenderer(objectReader);
break; break;
case ClassIDType.MonoScript: case ClassIDType.MonoBehaviour:
assetsFile.Objects.Add(objectInfo.m_PathID, new MonoScript(objectReader)); obj = new MonoBehaviour(objectReader);
break; break;
case ClassIDType.MovieTexture: case ClassIDType.MonoScript:
assetsFile.Objects.Add(objectInfo.m_PathID, new MovieTexture(objectReader)); obj = new MonoScript(objectReader);
break; break;
case ClassIDType.PlayerSettings: case ClassIDType.MovieTexture:
assetsFile.Objects.Add(objectInfo.m_PathID, new PlayerSettings(objectReader)); obj = new MovieTexture(objectReader);
break; break;
case ClassIDType.RectTransform: case ClassIDType.PlayerSettings:
assetsFile.Objects.Add(objectInfo.m_PathID, new RectTransform(objectReader)); obj = new PlayerSettings(objectReader);
break; break;
case ClassIDType.Shader: case ClassIDType.RectTransform:
assetsFile.Objects.Add(objectInfo.m_PathID, new Shader(objectReader)); obj = new RectTransform(objectReader);
break; break;
case ClassIDType.SkinnedMeshRenderer: case ClassIDType.Shader:
assetsFile.Objects.Add(objectInfo.m_PathID, new SkinnedMeshRenderer(objectReader)); obj = new Shader(objectReader);
break; break;
case ClassIDType.Sprite: case ClassIDType.SkinnedMeshRenderer:
assetsFile.Objects.Add(objectInfo.m_PathID, new Sprite(objectReader)); obj = new SkinnedMeshRenderer(objectReader);
break; break;
case ClassIDType.SpriteAtlas: case ClassIDType.Sprite:
assetsFile.Objects.Add(objectInfo.m_PathID, new SpriteAtlas(objectReader)); obj = new Sprite(objectReader);
break; break;
case ClassIDType.TextAsset: case ClassIDType.SpriteAtlas:
assetsFile.Objects.Add(objectInfo.m_PathID, new TextAsset(objectReader)); obj = new SpriteAtlas(objectReader);
break; break;
case ClassIDType.Texture2D: case ClassIDType.TextAsset:
assetsFile.Objects.Add(objectInfo.m_PathID, new Texture2D(objectReader)); obj = new TextAsset(objectReader);
break; break;
case ClassIDType.Transform: case ClassIDType.Texture2D:
assetsFile.Objects.Add(objectInfo.m_PathID, new Transform(objectReader)); obj = new Texture2D(objectReader);
break; break;
case ClassIDType.VideoClip: case ClassIDType.Transform:
assetsFile.Objects.Add(objectInfo.m_PathID, new VideoClip(objectReader)); obj = new Transform(objectReader);
break; break;
default: case ClassIDType.VideoClip:
assetsFile.Objects.Add(objectInfo.m_PathID, new Object(objectReader)); obj = new VideoClip(objectReader);
break; break;
default:
obj = new Object(objectReader);
break;
}
assetsFile.Objects.Add(objectInfo.m_PathID, obj);
}
catch (Exception e)
{
/*var sb = new StringBuilder();
sb.AppendLine("Unable to load object")
.AppendLine($"Assets {assetsFile.fileName}")
.AppendLine($"Type {objectReader.type}")
.AppendLine($"PathID {objectInfo.m_PathID}")
.Append(e);
Logger.Error(sb.ToString());*/
} }
Progress.Report(++i, progressCount); Progress.Report(++i, progressCount);

View File

@ -214,7 +214,14 @@ namespace AssetStudioGUI
filterTypeToolStripMenuItem.DropDownItems.Add(typeItem); filterTypeToolStripMenuItem.DropDownItems.Add(typeItem);
} }
allToolStripMenuItem.Checked = true; allToolStripMenuItem.Checked = true;
StatusStripUpdate($"Finished loading {assetsManager.assetsFileList.Count} files with {assetListView.Items.Count} exportable assets."); var log = $"Finished loading {assetsManager.assetsFileList.Count} files with {assetListView.Items.Count} exportable assets";
var m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.Count);
var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
if (m_ObjectsCount != objectsCount)
{
log += $" and {m_ObjectsCount - objectsCount} assets failed to read";
}
StatusStripUpdate(log);
treeSearch.Select(); treeSearch.Select();
})); }));
} }