本文档面向替换静态立绘、编队头像/半身像、动态立绘、战斗小人、基建小人的 Mod 作者。 内容基于当前项目实际实现整理,尽量区分“推荐写法”和“兼容写法”。
DISABLE_ 前缀目录会被跳过,不加载其中的 Mod 文件。F10 刷新,无需重启游戏。logs 和 dump 目录属于保留目录,会被忽略。DISABLE_ 时,该目录及其子目录都会被跳过。logs 和 dump 不参与 Mod 扫描。F10 触发刷新,修改资源后一般不需要重启游戏。| 模块 | 作者需要准备什么 | 典型命名 |
|---|---|---|
AssetBundleReplace + IllustReplace |
静态立绘 PNG,可选 alpha 配套图 | illust_char_002_amiya_1.png |
PortraitReplace |
头像 / 半身像 PNG | charportraits_char_002_amiya_1.png |
SpineReplace |
动态立绘 / 战斗小人 / 基建小人的 .skel/.json + .atlas + .png,可选 alpha |
dyn_illust_char_1037_amiya3_sale#13.skel |
UIResource + HomeBackgroundPlayer |
Home 主题按钮 / Home 背景左右图 / Home 背景前景 player 层 PNG |
tm_rhodes_day_btn_battle.png |
NameCardStyle |
名片样式背景 PNG,当前支持 largeBg / shortBg / longBg / shareBg |
namecardstyle_nc_as2025_bloomsoftime_largebg.png |
StoryAVG |
剧情 AVG 背景 / 人物 PNG,文件名统一使用 avg_ 前缀 |
avg_bg_wild_a.png |
静态立绘的实际替换由 IllustReplace 完成,AssetBundleReplace 负责在 prefab / UI image 层面把对应图像交给它刷新。
对作者来说,通常只需要准备 PNG,不需要自己打 AB。
illust_* 前缀是最推荐、最稳妥的写法。illust_char_002_amiya_1.pngillust_char_002_amiya_winter#1.png如果目标静态立绘使用了分离 alpha,可以额外提供同名 alpha 图:
illust_char_002_amiya_winter#1.png
illust_char_002_amiya_winter#1[alpha].png
当前兼容的 alpha 后缀包括:
[alpha],推荐使用_alpha[alphe],旧兼容写法静态立绘匹配时会尝试一些兼容候选:
illust_...,也会尝试去掉前缀后的名字。char_...,也会尝试补成 illust_char_...。# 或 @ 时,系统也会尝试把它们替换成下划线后的变体。illust_...。
PortraitReplace 处理的是扁平 key,而不是目录层级 key。
它会把原始资源路径去掉开头的 dyn/ 或 arts/,再把路径分隔符 / 变成下划线 _。
charportraits_:原皮半身像charportraits_skins_:皮肤半身像charavatars_:原皮头像charavatars_skins_:皮肤头像charportraits_skins_ 复数形式,不是 charportraits_skin_ 单数形式。
charportraits_char_002_amiya_1.png
charportraits_skins_char_391_rosmon_sale#16.png
charavatars_char_4056_titi.png
charavatars_skins_char_002_amiya_epoque#4.png
charavatars_elite_char_4056_titi_2.png
charavatars_elite_... 需要特别注意:这里的 elite 不是随便加的修饰词,而是角色精英化头像资源路径里原本就带有的层级,扁平化后就会体现在文件名中。charavatars_elite_char_4056_titi_2.png 可以理解为“角色精英化头像”的 key,因此命名时不要把 elite 省略掉。.png。charportraits_、charavatars_ 等前缀。
SpineReplace 负责替换这类 Spine 资源。最稳妥的做法是提供完整三件套:
骨骼 + atlas + 主贴图,必要时再补 alpha 图。
.skel 或 .json:骨骼数据.atlas:图集.png:主贴图[alpha].png / _alpha.png:alpha 贴图.json 或 .skel。
最常见前缀是 dyn_illust_。
dyn_illust_char_1037_amiya3_sale#13.skel
dyn_illust_char_1037_amiya3_sale#13.atlas
dyn_illust_char_1037_amiya3_sale#13.png
如果该资源需要分离 alpha,还可以提供:
dyn_illust_char_1037_amiya3_sale#13[alpha].png
对于被识别为“进场”的 SkeletonDataAsset,当前实现会优先尝试以下前缀:
start_entry_entrance_推荐写法示例:
entry_dyn_illust_char_003_kalts_boc#6.skel
entry_dyn_illust_char_003_kalts_boc#6.atlas
entry_dyn_illust_char_003_kalts_boc#6.png
这样可以和普通动态立绘文件区分开,避免出现“同一个 AB / 同一个 skeleton 基名,普通立绘和入场动画撞名”的问题。
当前实现明确支持以下战斗方向前缀:
front_back_face_front_,兼容前缀face_back_,兼容前缀front_char_002_amiya.skel
front_char_002_amiya.atlas
front_char_002_amiya.png
back_char_002_amiya.skel
back_char_002_amiya.atlas
back_char_002_amiya.png
基建小人通常直接按原始 skeleton 名匹配,常见命名是 build_*。
build_char_002_amiya.skel
build_char_002_amiya.atlas
build_char_002_amiya.png
如果一个 Spine 资源有多页贴图,当前实现会按材质主贴图名在同目录中继续查找更精确的 PNG。 所以除了主 key 对应的 PNG 外,也可以放更细分的贴图页文件。
dyn_illust_char_1013_chen2_boc#6.skel
dyn_illust_char_1013_chen2_boc#6.atlas
dyn_illust_char_1013_chen2_boc#6.png
dyn_illust_char_1013_chen2_boc#6[alpha].png
dyn_illust_char_1013_chen2_boc#62.png
dyn_illust_char_1013_chen2_boc#62[alpha].png
这部分主要由 UIResource 和 HomeBackgroundPlayer 处理。
UIResource 负责主页主题按钮、主题图片、Home 背景左右图等 Sprite 资源;
HomeBackgroundPlayer 负责 Home 背景里的前景 player 层。
对作者来说,通常都只需要准备 .png,不需要自己打 AB。
日志中可以看到这部分挂在 HomeThemeBigButton._ApplyImage 和
HomeThemeImage.OnUIApply 上。运行时 sprite path 会被整理成
dyn/arts/ui/hometheme/...,然后再用扁平文件名去匹配。
主题ID_资源名.png。[uc],文件名里可以省略这个前缀。btn_battle.png 也可能命中,但非常容易和别的主题撞名,不推荐。tm_rhodes_day_btn_battle.png
tm_rhodes_day_btn_friend.png
tm_rhodes_day 时,按钮资源 btn_battle 推荐写成
tm_rhodes_day_btn_battle.png,这样比只写 btn_battle.png 更稳。
主页背景左右图挂在 HomeBackgroundMultiFormImageHandler._SetSprites 上。
代码会按 dyn/arts/ui/<backgroundId>/<formId>/left.png /
.../right.png 这种路径生成 key,再把路径扁平化后去匹配文件名。
<backgroundId>_left.png / <backgroundId>_right.png。<backgroundId>_<formId>_left.png / ..._right.png。[to_left]、[from_right] 只是刷新阶段标签,不是文件名的一部分。dyn/arts/ui/ 根下的单张背景相关图片,也可以直接用扁平 key,例如 bg_rhodes_night.png。bg_rhodes_night_left.png
bg_rhodes_night_right.png
bg_rhodes_night.png
bg_rhodes_night_left.png 就是这一类写法。
如果后续日志里出现了具体 formId,再把 formId 插到中间即可。
Home 背景里的前景不是走上面的 left/right 图,而是单独挂在
HomeBackgroundPlayer.HomeDisplayController._CreateEffectView 上。
当前实现会把这层资源整理成
dyn/arts/ui/homebackground/player/<spriteName>.png 来匹配。
<backgroundId>_player.png。<backgroundId>_player.png 这一套命名。bg_rhodes_night_player.png
player 前景图层,
不是 effectBg、effectFront、effectCamera 这类背景 AB 特效对象本体。
名片替换由 NameCardStyle 模块处理。
当前正式链路挂在 CharacterUtil.LoadNameCardV2SkinStyleAndApplyTmpl 和
UIStyleProvider.Reset 上,所以不仅首次加载会替换,热刷新后当前仍然存活的名片样式也会重新绑定。
largeBg:大图背景shortBg:短版背景longBg:长版背景shareBg:分享背景mainEffect,但正式替换逻辑还没有接入这个槽位。
也就是说,现在名片 Mod 只替换上面这四类背景,不替换 mainEffect。
名片文件名必须以 namecardstyle_ 开头,并且只扫描 .png。
最推荐的基础写法是:
namecardstyle_<skinId>_largebg.png
namecardstyle_<skinId>_shortbg.png
namecardstyle_<skinId>_longbg.png
namecardstyle_<skinId>_sharebg.png
例如当前示例目录里的可用写法就是:
namecardstyle_nc_as2025_bloomsoftime_largebg.png
tmpl 变体
名片样式还支持按模板号区分。若日志里出现了具体的 tmpl,可以写成:
namecardstyle_<skinId>_tmpl_0_largebg.png
namecardstyle_<skinId>_tmpl_1_largebg.png
_tmpl_<n> 的文件。tmpl 的通用文件。tmpl 的文件就可以。当前实现同时兼容紧凑写法和带下划线写法:
largebg 或 large_bgshortbg 或 short_bglongbg 或 long_bgsharebg 或 share_bglargebg、shortbg。
这样和当前日志、示例文件、代码里的主命名分支最一致。
skinId 对应游戏里的名片样式 ID,例如 nc_as2025_bloomsoftime。[uc] 前缀,匹配时会自动去掉,所以文件名里通常不用手动写 [uc]。namecardstyle_nc_as2025_bloomsoftime_largebg.png,其它槽位会继续使用游戏原图。
剧情背景和剧情人物由 StoryAVG 模块处理。
这一类资源现在不再直接使用原始 key 作为 Mod 文件名,而是统一要求在原始 key 前面加上
avg_ 前缀,避免和其它模块或普通素材发生重名冲突。
avg_。bg_wild_a,现在文件名应写成 avg_bg_wild_a.png。char_106_franka_1,现在文件名应写成 avg_char_106_franka_1.png。bg_wild_a.png 不再参与 StoryAVG 索引。avg_<原始key>.png。avg_bg_wild_a.png
avg_char_106_franka_1.png
如果对应的剧情背景或人物资源使用了分离 alpha,alpha 文件也需要跟着主文件一起保留
avg_ 前缀。
avg_bg_wild_a.png
avg_bg_wild_a[alpha].png
avg_char_106_franka_1.png
avg_char_106_franka_1[alpha].png
当前兼容的 alpha 后缀包括:
[alpha]_alpha[alphe]avg_ 只是 Mod 文件命名前缀,不会改动游戏运行时真正加载的剧情 key。
内部仍然是按原始 key 匹配,只是索引时要求文件名带这个前缀。
avg_<key>.png。avg_。不是绝对必须,但建议如下:
.png,必要时加 alpha 图。.png。.skel/.json + .atlas + .png。.png,而且可以只替换某一个背景槽位。.png,必要时加同 stem 的 alpha 图。当前 Spine 模块允许只替换其中一部分资源,比如只换贴图、只换 atlas、只换 skeleton, 但这类做法更依赖原资源兼容性,建议仅在你明确知道资源结构时使用。
entry_ 前缀区分。F10 刷新;如果当前处于战斗锁,刷新可能会延后。| 用途 | 推荐命名 |
|---|---|
| 静态立绘 | illust_char_xxx_xxx_1.png |
| 静态立绘 alpha | illust_char_xxx_xxx_1[alpha].png |
| 原皮半身像 | charportraits_char_xxx_xxx_1.png |
| 皮肤半身像 | charportraits_skins_char_xxx_xxx_skin#n.png |
| 原皮头像 | charavatars_char_xxx_xxx.png |
| 皮肤头像 | charavatars_skins_char_xxx_xxx_skin#n.png |
| 动态立绘 | dyn_illust_char_xxx_xxx_skin#n.skel/.atlas/.png |
| 入场动画 | entry_dyn_illust_char_xxx_xxx_skin#n.skel/.atlas/.png |
| 战斗正面 | front_char_xxx_xxx.skel/.atlas/.png |
| 战斗背面 | back_char_xxx_xxx.skel/.atlas/.png |
| 基建小人 | build_char_xxx_xxx.skel/.atlas/.png |
| 主题按钮 | tm_xxx_btn_xxx.png |
| Home 背景左 / 右图 | bg_xxx_left.png / bg_xxx_right.png |
| Home 背景前景(player 层) | bg_xxx_player.png |
| 名片大图背景 | namecardstyle_nc_xxx_largebg.png |
| 名片模板背景 | namecardstyle_nc_xxx_tmpl_0_largebg.png |
| 剧情 AVG 背景 / 人物 | avg_原始key.png |
| 剧情 AVG 人物 alpha | avg_char_xxx_xxx[alpha].png |