这一篇解释为什么「装了模组没反应」在安卓上这么常见,以及怎么避开。
Unity 有两种打包方式,区别在于「C# 代码怎么变成手机能执行的东西」:
| IL2CPP(官方用的) | Mono(能装模组的) | |
|---|---|---|
| C# 代码去向 | 提前编译成机器码,塞进一个 60 多 MB 的库 | 保留成 Assembly-CSharp.dll,运行时才编译 |
| 运行时有没有 C# 虚拟机 | 没有 | 有 |
| 能不能加载外部 .dll | 不能 | 能 |
| 模组加载器(C# 写的) | 无处落脚 | 正常运行 |
NeoModLoader 本身就是一段 C# 程序。IL2CPP 版游戏在运行时根本没有能执行 C# 的环境,所以加载器连启动的机会都没有 —— 它不是一个「没打开开关」的问题,是缺了整个运行时。
这也是为什么这件事没法靠打补丁解决:要把 IL2CPP 换回 Mono,等于把游戏重新编译一遍。
不用装任何工具,看安装包大小就有大致判断:
| 版本 | 大小量级 | 能装模组 |
|---|---|---|
| 模组专用版 0.51.4 | 约 169 MB | 能 |
| 官方纯净版 0.51.2 | 约 307 MB | 不能 |
| 官方内置菜单版 0.51.2 | 约 161 MB | 不能 |
| 官方 0.50.5 及更早 | 51 ~ 165 MB | 不能 |
注意「内置菜单版」虽然体积小,但它只是加了个修改器界面,引擎还是 IL2CPP,和纯净版一样装不了模组。体积小是因为去掉了部分资源,不代表换了后端。
更准确的判断:进游戏「设置」看版本号。显示 0.51.4 且是我们提供的安装包,就是模组专用版。
要说清楚,因为涉及你要不要把存档交给它:
Android/data/com.mkarpenko.worldbox/ 下)。先用启动器导出,或者手动把整个 files/ 目录复制到别处。
files/ 目录,再换版本。