常见问题与排查
加载失败
症状:UMM 列表里看不到你的 Mod,或显示加载失败。
排查:
Info.json的AssemblyName是否等于实际 DLL 文件名EntryMethod是否为命名空间.类.Load- DLL 是否真的复制到了
Mods/MyFirstMod/目录 Load是否返回true- 查看 UMM 日志中的错误信息
补丁不生效
症状:写好了 Harmony 补丁,但游戏行为没变化。
排查(详见 补丁生命周期):
- 类必须是
public static class且带[HarmonyPatch] PatchAll是否在OnToggle(true)中被调用- 目标方法名 / 类名 / 参数类型是否完全匹配(注意重载)
- 用
GetPatchInfo检查补丁是否真的应用了 - 是否在 Mod 启用前目标方法已经被调用过
NullReferenceException
症状:日志中出现 NullReferenceException。
排查:
- 是否在
OnToggle之前就访问了Settings __instance是否可能为 null(静态方法或空引用)- 反编译确认目标方法实际的字段 / 属性名
Transpiler 崩溃或行为异常
症状:应用 Transpiler 后游戏崩溃,或行为变得诡异。
排查(详见 Transpiler 实战):
- 用 dnSpy 查看目标方法的真实 IL,确认匹配的指令序列存在
- 匹配失败时降级处理(
IsValid检查),不要直接抛异常 - 先加日志输出指令序列,逐个核对
设置没保存
症状:重启游戏后设置恢复默认。
排查:
OnSaveGUI是否绑定到Settings.OnSaveGUISettings.Save是否被调用- 属性类型是否为 UMM 支持的类型
CI 构建失败
症状:GitHub Actions 报错找不到 DLL。
排查(详见 GitHub Actions 自动构建):
- 私有 lib 仓库目录结构是否与
HintPath一致 LIBS_PATSecret 是否创建、拼写是否一致- PAT 是否有
Contents: Read权限 - 本地路径的
Condition是否会在 CI 中被覆盖
游戏闪退
症状:启用 Mod 后游戏直接崩溃。
排查:
- 查看
Player.log最后的异常堆栈 - 禁用所有 Mod 逐个启用,二分定位
- 如果指向你的补丁,用
Finalizer捕获异常避免直接崩溃 - 确认没有把游戏二进制带进构建产物(这会造成加载冲突)
你学到了什么
- 常见问题的一线排查思路
- 每个问题对应的详细章节位置
系列完结 🎉
你已经走完了 ADOFAI Mod 开发的完整流程。接下来可以: