☰
UnityModManager的mod.json字段完整清单:5分钟写出正确的Mod元数据
2026/9/25 3:04:26 网站建设 项目流程

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 的类定义)。

字段类型必填作用说明
Idstring✅ 必填Mod 唯一标识,全局不可重复,UMM 靠它识别 Mod
AssemblyNamestring⚙️ 视情况要加载的 DLL 文件名;省略时默认为Id.dll
EntryMethodstring⚙️ 视情况入口方法,格式为命名空间.类名.方法名
Versionstring建议Mod 版本号,用于更新检测和排序
DisplayNamestring建议在 UMM 界面中显示的 Mod 名称
Authorstring可选作者署名
ManagerVersionstring可选要求的最小 UMM 版本,不满足则拒绝加载
GameVersionstring可选要求的最小游戏版本(0.15.0+),不满足则拒绝加载
Requirementsstring[]可选依赖的其它 Mod(可带版本约束)
LoadAfterstring[]可选加载顺序控制(0.22.5+),指定排在哪些 Mod 之后
HomePagestring可选主页链接,若为 Nexus 地址还可自动检测更新
Repositorystring可选自定义更新仓库地址
ContentTypestring可选内容类型标签(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 foundAssemblyName与磁盘文件名不一致核对 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询