AssetStudio 本地编译

AssetStudio 社区版本:

这里使用 zhangjiequan/AssetStudio 作为基础来进行本地编译

编译步骤

  • 下载源码:git clone git@github.com:zhangjiequan/AssetStudio.git
  • 进入 https://aps.autodesk.com/developer/overview/fbx-sdk 页面下载 FBX SDK 并安装,根据本地的 Visual Studio 选择不同版本安装
  • 打开 AssetStudio 工程,右键 AssetStudioFBXNative 工程并选择 属性 选项
  • 平台 选项修改为 x64(因为最新版本的 FBX SDK 不提供 x86 的库支持了)
  • C/C++ -> 附加包含目录 中加上 FBX SDK 安装路径中的头文件 include 目录,比如 D:\Applications\Autodesk\FBX\FBX SDK\2020.3.7\include
  • 链接器 -> 附加库目录 中加上 FBX SDK 安装路径中的库文件目录,比如 D:\Applications\Autodesk\FBX\FBX SDK\2020.3.7\lib\x64\debug
  • AssetStudioGUI 项目设成启动项目后,开始调试即可

修改编译选项后,上述配置的头文件目录和库文件目录要重新配置

记录修改

使用过程中部分资源会报异常导致拆包进程中断,原因暂时不清楚,先粗暴地规避掉这些问题让其他资源可以提取出来,修改记录如下:

AssetManager.cs:554

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                    else if (obj is SpriteAtlas m_SpriteAtlas)
{
foreach (var m_PackedSprite in m_SpriteAtlas.m_PackedSprites)
{
if (m_PackedSprite.TryGet(out var m_Sprite))
{
if (m_Sprite.m_SpriteAtlas.IsNull)
{
m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas);
}
else
{
m_Sprite.m_SpriteAtlas.TryGet(out var m_SpriteAtlaOld);
- if (m_SpriteAtlaOld != null && m_SpriteAtlaOld.m_IsVariant)
+ if (m_SpriteAtlaOld != null && m_SpriteAtlaOld.m_IsVariant)
{
m_Sprite.m_SpriteAtlas.Set(m_SpriteAtlas);
}
}
}
}
}

Texture2DConverter.cs:587:参考 C#:System.AccessViolationException异常无法捕获的处理-CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
+       [System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
private bool DecodeASTC(byte[] image_data, byte[] buff, int blocksize)
{
try
{
return TextureDecoder.DecodeASTC(image_data, m_Width, m_Height, blocksize, blocksize, buff);
}
catch (Exception e)
{
return false;
}
}