UnityModManager的mod.json字段完整清单:5分钟写出正确的Mod元数据
【免费下载链接】unity-mod-managerUnityModManager项目地址: https://gitcode.com/gh_mirrors/un/unity-mod-manager
UnityModManager(简称 UMM)是让 Unity 引擎游戏支持 Mod 加载的核心框架,而每个 Mod 能否被正确识别和加载,取决于 Mod 文件夹里那份不起眼的mod.json。本文面向新手和普通用户,用一份完整字段清单+真实加载逻辑,帮你在 5 分钟内写出正确的 Mod 元数据,一次通过,不再踩坑。
为什么 mod.json 决定 Mod 生死?
UMM 启动时会扫描Mods目录下的每一个子文件夹,并读取其中的mod.json来解析 Mod 信息。只要这个文件写得不对,Mod 就会被直接跳过或加载失败,而且日志里往往只有一行模糊的报错。
读懂它的解析逻辑,你写出来的元数据才"知其然更知其所以然":
- 文件夹里没有
mod.json→ 直接忽略,不报错也不加载; Id为空 → 记录Id is null并跳过;Id与其他 Mod 重复 → 记录Id 'xxx' already uses another mod并跳过。
💡 小贴士:
mod.json的查找路径由游戏配置中的ModInfo项决定,通常就是mod.json,找不到时会再尝试小写文件名。
解析入口在 ModManager.cs,字段定义在 ModInfo.cs。
mod.json 字段完整清单
下表是 UMM 从mod.json中会读取的全部字段(依据 ModInfo.cs 的类定义)。
| 字段 | 类型 | 必填 | 作用说明 |
|---|---|---|---|
Id | string | ✅ 必填 | Mod 唯一标识,全局不可重复,UMM 靠它识别 Mod |
AssemblyName | string | ⚙️ 视情况 | 要加载的 DLL 文件名;省略时默认为Id.dll |
EntryMethod | string | ⚙️ 视情况 | 入口方法,格式为命名空间.类名.方法名 |
Version | string | 建议 | Mod 版本号,用于更新检测和排序 |
DisplayName | string | 建议 | 在 UMM 界面中显示的 Mod 名称 |
Author | string | 可选 | 作者署名 |
ManagerVersion | string | 可选 | 要求的最小 UMM 版本,不满足则拒绝加载 |
GameVersion | string | 可选 | 要求的最小游戏版本(0.15.0+),不满足则拒绝加载 |
Requirements | string[] | 可选 | 依赖的其它 Mod(可带版本约束) |
LoadAfter | string[] | 可选 | 加载顺序控制(0.22.5+),指定排在哪些 Mod 之后 |
HomePage | string | 可选 | 主页链接,若为 Nexus 地址还可自动检测更新 |
Repository | string | 可选 | 自定义更新仓库地址 |
ContentType | string | 可选 | 内容类型标签(0.26.0+),用于 UI 分类筛选 |
说明:
IsCheat虽然在定义中出现,但标注了[NonSerialized],不会从mod.json读取,属于特定游戏(如 RoR2)的内部运行时字段,作者无需填写。
关键字段逐个拆解
必填与半必填:Id、AssemblyName、EntryMethod
这三个字段是 Mod 能否跑起来的基石。
Id:唯一身份标识,建议用简短、无空格、无特殊字符的名字(例如MyFirstMod)。它同时决定:日志里的名字、依赖引用时的名字,以及默认的 DLL 文件名。AssemblyName:要加载的程序集文件名。如果你的 DLL 就叫MyFirstMod.dll,可以省略此字段——UMM 会自动按Id + ".dll"推断(见 ModManager.cs)。但一旦填写,文件名必须与磁盘完全一致,否则报File not found。EntryMethod:入口方法的全名,格式是命名空间.类名.方法名,方法必须是静态方法。
⚠️ 关键校验(见 ModEntry.cs):AssemblyName和EntryMethod要么都不填,要么都填。只填一个会直接导致加载失败。如果你的 Mod 只有配置文件、没有 DLL,两个都留空即可。
版本闸门:ManagerVersion 与 GameVersion
这两个字段像"安检门",不满足条件就拒绝加载(见 ModEntry.cs):
ManagerVersion:要求 UMM 版本 ≥ 你写的值。比如你用了某个新特性,就写明最低 UMM 版本,避免老版本 UMM 带崩。GameVersion:要求游戏版本 ≥ 你写的值(0.15.0+ 生效)。注意:如果游戏自身无法解析出版本号,这个检查会被跳过。
💡 建议:
Version写你自己的 Mod 版本,ManagerVersion/GameVersion只在你确实依赖新版时才写,别画蛇添足。
依赖与加载顺序:Requirements 与 LoadAfter
Requirements:声明依赖的其它 Mod。数组里每个元素可以:- 只写
Id:不校验版本; - 写成
Id-版本号(例如CommonLib-1.2.3):UMM 会用正则提取出最低版本要求(见 ModEntry.cs)。 - 依赖缺失或版本过低 → 你的 Mod拒绝加载;如果依赖被禁用,UMM 会尝试自动启用它。
- 只写
LoadAfter:控制加载顺序,告诉 UMM"我要在这些 Mod 之后加载"(0.22.5+)。被引用的 Mod 不存在时不会报错,只记一条提示日志;它参与 UMM 的拓扑排序(见 ModManager.cs)。
选择建议:
Requirements表示"没有它我就不能工作"(硬性依赖),LoadAfter表示"我希望晚一点加载"(顺序偏好),二者用途不同,不要混用。
更新检测:Repository 与 HomePage
UMM 会在联网时自动检查更新,数据来源有两处(见 Updates.cs):
Repository:指向一个"发布清单"。它的结构是一个 JSON,内含Releases数组,每项含Id、Version、DownloadUrl(定义见 Repository.cs)。UMM 会比对你当前Version,发现更高版本就标记更新。HomePage:在 UMM 界面里是一个可点击跳转的链接;如果它是符合特定格式的 Nexus 地址,UMM 会进一步调用其 API 来检测更新(需要配置 API Key)。
💡 一般个人小 Mod 填
HomePage即可;想做规范化发布,再配Repository。
界面友好型:DisplayName、Author、ContentType
DisplayName:界面显示名。省略时 UMM 会回退用Id当名字,但显示会很丑,建议必填。Author:纯署名信息,用于展示。ContentType(0.26.0+):给 Mod 打标签(如 "UI"、"Graphics")。UMM 会做整词、忽略大小写的匹配来做界面筛选(见 ModEntry.cs)。
5 分钟快速上手:最小可用模板
下面是一份"能跑起来"的最小mod.json,只包含必填/建议项,复制后改名即可使用:
{ "Id": "MyFirstMod", "DisplayName": "我的第一个 Mod", "Author": "你的名字", "Version": "1.0.0", "AssemblyName": "MyFirstMod.dll", "EntryMethod": "MyFirstMod.MyMod.Init" }如果你还要加依赖和版本闸门,可以这样扩展:
{ "Id": "MyFirstMod", "DisplayName": "我的第一个 Mod", "Version": "1.0.0", "AssemblyName": "MyFirstMod.dll", "EntryMethod": "MyFirstMod.MyMod.Init", "ManagerVersion": "0.22.5", "Requirements": [ "CommonLib-1.2.3" ], "LoadAfter": [ "SomeOtherMod" ], "HomePage": "https://example.com/my-mod" }把这份文件放进Mods/MyFirstMod/文件夹,与你的 DLL 放在一起,重新启动游戏即可。
常见错误速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| Mod 根本不出现 | 文件夹缺少mod.json;Id为空或重复 | 检查文件名与Id唯一性 |
提示AssemblyName is null/EntryMethod is null | 只填了其中一个 | 两个字段同时填,或同时留空 |
File 'xxx.dll' not found | AssemblyName与磁盘文件名不一致 | 核对 DLL 文件名(区分大小写) |
| 依赖不加载 | Requirements写错Id,或版本过低 | 用Id-版本规范写法 |
| 界面更新检测不工作 | HomePage不是标准 Nexus 地址,或Repository结构不对 | 检查 JSON 的Releases结构 |
小结
掌握这份mod.json字段清单,你就握住了让 Mod 被 UMM 正确识别的全部钥匙:
- 必填三件套:
Id+AssemblyName+EntryMethod(后两者要么都填、要么都不填); - 版本闸门:
ManagerVersion/GameVersion谨慎使用; - 依赖与顺序:硬依赖用
Requirements,顺序偏好用LoadAfter; - 展示与更新:
DisplayName提升可读性,Repository/HomePage负责更新。
字段定义与解析逻辑都可在源码中查证:定义见 ModInfo.cs,解析与校验见 ModManager.cs 和 ModEntry.cs。照着清单对照一遍,你的 Mod 元数据就能一次写对 🎯。
【免费下载链接】unity-mod-managerUnityModManager项目地址: https://gitcode.com/gh_mirrors/un/unity-mod-manager
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考