For Bundle Mod Authors

AssetBundle 替换说明

本页面向“整包替换”类作者。功能工作在 AssetBundle.LoadFromFile 阶段, 作用是把游戏原本准备读取的 AB 文件,替换成你提供的另一个 AB 文件。

1. 适用场景

这套功能替换的是整个 AssetBundle 文件,而不是包内单个资源。 适合已经自行打好了 AB,并希望在游戏请求原始路径时,直接切换到你自己的整包。

生效点在 AssetBundle.LoadFromFile。如果目标页面已经加载过, 通常需要重新进入页面,或者重新触发对应资源加载,才能看到替换结果。

2. 推荐目录结构

手写 map

ab替换/
  mod.ini
  bundles/
    char_180_amgoat.ab

自动映射

ab替换/
  mod.ini
  bundles/
    char_180_amgoat.ab
    char_377_gdglow.ab

其中 bundles 只是推荐目录名,不是强制固定值。 你也可以使用别的目录名,只要在 bundle_root 中写对应路径即可。

3. 最常见的配置写法

手写 map

[mod]
type = assetbundle
key_root = Arknights_Data/StreamingAssets/AB/Windows/skinpack
bundle_root = bundles

[map]
char_180_amgoat.ab = char_180_amgoat.ab

自动映射

[mod]
type = assetbundle
key_root = Arknights_Data/StreamingAssets/AB/Windows/skinpack
bundle_root = bundles
auto_map_by_stem = true

4. 字段说明

字段 推荐写法 说明
type assetbundle 声明这是 AB 文件替换 Mod。
key_root Arknights_Data/StreamingAssets/AB/Windows/skinpack 目标 AB 所在的游戏路径前缀。无论是手写 [map], 还是自动映射,最终都会基于它拼出完整 key。
bundle_root bundles 你的替换 AB 根目录。手写 [map] 时,右侧文件名会优先在这里解析; 自动映射时,这里也是主要扫描目录。
auto_map_by_stem true / false 开启后,会自动扫描 bundle_root 和 mod.ini 所在目录中的 .ab、.bundle、.unity3d 文件, 并用“文件名 + key_root”自动生成映射。
[map] char_180_amgoat.ab = char_180_amgoat.ab 显式写死映射关系。左边是目标 AB key,右边是你的替换文件。 如果同时启用了自动映射,手写 [map] 的优先级更高。

5. 自动映射的实际行为

当你写了下面这组配置:

[mod]
type = assetbundle
key_root = Arknights_Data/StreamingAssets/AB/Windows/skinpack
bundle_root = bundles
auto_map_by_stem = true

并且目录中存在:

bundles/char_180_amgoat.ab

那么系统会自动生成下面这个映射:

Arknights_Data/StreamingAssets/AB/Windows/skinpack/char_180_amgoat.ab
  -> ab替换/bundles/char_180_amgoat.ab
自动映射是按“文件名”生成 key 的,而不是按子目录相对路径生成。 也就是说 char_180_amgoat.ab 会自动映射到 key_root/char_180_amgoat.ab。

6. 自动扫描范围

auto_map_by_stem = true 依赖 key_root。 如果没有填写 key_root,自动映射不会生效,并会在日志中给出提示。

7. 手写 map 与自动映射的优先级

优先级规则很简单:

例如下面这组配置:

[mod]
type = assetbundle
key_root = Arknights_Data/StreamingAssets/AB/Windows/skinpack
bundle_root = bundles
auto_map_by_stem = true

[map]
char_180_amgoat.ab = special/char_180_amgoat.ab

即使 bundles/char_180_amgoat.ab 已经被自动扫描到, 最终仍然会优先使用:

special/char_180_amgoat.ab

8. 推荐做法

这类替换属于“整包替换”,不是“包内单资源覆盖”。 如果你的自定义 AB 缺少原页面仍然依赖的资源,可能出现缺图、资源缺失或加载失败。