IT圈老男孩1 发表于 2022-12-5 07:50

自制亲爱的Unity游戏MOD管理器DUMM

特别说明:欢迎水友们参与讨论,转载请注明出处!

前言:

此文章是俺之前在3DMGAME论坛发的一个帖子,转到知乎上一是留个存档,二是分享给对Unity引擎类游戏MOD制作有兴趣的水友们!

       Unity引擎类游戏的知名修改神器Unity Mod Manager(简称UMM),同广大水友一样,俺也关注这个软件有一阵子了,原作者是一位俄罗斯老兄newman55,历时10个多月,前后共发布了17个版本,从之前的侵入式注入游戏到目前的无侵入式注入游戏,在Unity引擎类游戏MOD制作的道路上已经迈进了一大步;不过这位老兄至今已经有两个多月没有更新代码了,俺决定接坑过来继续填,其实俺年前在写Unity引擎类游戏MOD制作通用教程这个教程帖子的时候早已有了做一个类似UMM的工具的想法,因此,俺决定把自制的这个工具名字叫做Dear Unity Mod Manager,觉得甚为亲切,其实起名的灵感来源于俺一直关注的另一位法国老兄ocornut开发的知名即时GUI类库dear imgui!
正题:

如题,此工具诞生于俺对 UMM 全部代码的全面梳理和多次重构、改进;UMM 水友们已经比较熟悉了,论坛里也已经有几位水友发了诸如搬运、汉化类的帖子,因此,具体的介绍俺不再赘述,俺先说明下 Dear Unity Mod Manager(简称 DUMM ) 比 UMM 改进了那些方面:
1、对 UMM 安装界面进行了美化处理,支持73种自定义皮肤;
2、对 UMM 游戏内置界面进行了美化,界面字体改为微软雅黑,默认大小为20号字,字体缩放改为最小1倍和最大2倍,且改进了控件等比缩放的算法,从此4K分辨率上不再看瞎眼,舒心多了;
3、对 UMM 的游戏插件类库UnityModManager.dll进行了BUG修复和性能调优;
4、UMM 依赖的所有第三方类库已更新到最新,MOD模块注入类库 UnityDoorstop 使用最新的3.3.1.0版,类库文件名称为winhttp.dll;
5、建议水友们安装 DUMM 时优先选择安装方式为“DoorstopProxy”,这种方式不会修改游戏目录中的任何dll类库文件,是一种纯内存注入的方式;
6、改进了 UMM 的更新程序,并取名为 DUMMUpdater.exe ,方便水友们能及时获得俺发布在 GitHub 网站上的最新版 DUMM ;
7、改进了 UMM 安装程序的配置文件 UnityModManagerConfig.xml ,现在 GameInfo 节点的 Name 属性已指定为游戏中文名称,游戏原始名称变更到新增的节点 GameName ,并且新增了一个可选填节点 GameScriptName ,该节点专用于某些需要在 UnityModManager.dll 类库中作特殊处理的游戏,比如:雨中冒险2(Risk of Rain 2)。
       下面,俺再简明的说下 DUMM 的使用操作流程:

1、解压缩文件 UnityModManager.7z 到任意目录,例如:D:\tools;
2、运行 DUMM 管理器主程序 DearUnityModManager\DearUnityModManager.exe ,首先从下拉列表框中选择一个游戏(例如:开拓者:拥王者),然后再点下面的按钮在弹出的对话框中指定游戏的主目录,如下图:




3、点击 “安装MOD管理器模块到游戏”按钮,成功安装后管理器窗口最下方的状态栏会显示“安装管理器模块到游戏成功!”;


4、点击管理器窗口上方的“Mods”选项卡切换到Mod安装管理界面,可以将已下载好的Mod压缩文件直接拖动到窗口下方的“Drop zip files here”区域,或者点击窗口下方的“安装MOD”按钮在弹出对话框中指定一个Mod压缩文件,MOD安装完成后会自动添加到窗口上方的MOD列表表格中,如下图:


5、至此,DUMM 和游戏MOD都已经安装完毕,现在可以运行游戏看看效果了,进入游戏主菜单后会自动显示 DUMM 的游戏内置界面,如下图:


6、点击窗口上方的“设置”按钮切换选项卡,可以设置开关 DUMM 窗口的四种不同的快捷键,以及窗口大小和UI控件等比缩放调整,如下图:


7、关闭 DUMM 窗口,待读取游戏存档载入游戏后,再次打开 DUMM 窗口,点击“Mods”按钮切换选项卡,点击MOD列表表格中的任意一个MOD名称或者MOD选项小图标展开MOD设置界面,现在就可以愉快的测试自己感兴趣的MOD功能了,如下图:








DUMM 程序的运行环境要求:

1、操作系统必须为WIN10 X64;
2、需要安装了 .Net Framwork Runtime v4.7.2+;
DUMM 项目源代码链接:

Dear Unity Mod Manager
特别说明:

DUMM 项目俺会长期更新的,原则上 UMM 后续发布了新版本会及时更新,DUMM 的版本号命名规则是前三位与 UMM 保持一致,最后一位表示 DUMM 的更新版本号;譬如目前最新的 DUMM 版本号是 v0.17.0.5,表示对应的 UMM 版本号是 v0.17.0,而 DUMM 自身的更新版本号是5,说明已经更新了5个版本。
2019年6月27日更新:
DUMM代码更新到 v0.18.0.6版,与最新的UMM v0.18.0版保持同步。
2019年7月2日更新:
DUMM代码更新到 v0.18.0.7版,MOD安装管理器bug修正。
2019年7月6日更新:
DUMM代码更新到 v0.19.0.8版,与最新的UMM v0.19.0版保持同步。
2019年7月14日更新:
1、DUMM代码更新到 v0.20.0.9版,与最新的UMM v0.20.0版保持同步;
2、已实现DUMM游戏内插件界面的设置窗口,缩放UI大小并按确定按钮后DUMM窗口宽度自动同步缩放;
3、DUMM游戏内插件界面的设置窗口,现在已支持自定义开关插件界面的快捷键。
2019年7月17日更新:
1、DUMM代码更新到 v0.20.0.10版;
2、DUMM核心API类库新增了一个能与所有依赖于DUMM类库的Mod类库交互的委托接口ModEntry::Action<ModEntry> OnModAction,作用是彻底解决在Mod类库中大数据量更新Unity的UI时会导致卡顿和游戏假死的问题,例如:受广大水友们喜爱的BagOfTricks(百宝袋Mod),可以通过在此Mod类库代码中将诸如添加所有物品到背包此类功能摒弃同步API调用,而是将API调用委托给DUMM类库的UI实例在主线程中使用协程异步调用,这样在DUMM界面点击添加物品按钮后会立即返回,而不会导致游戏假死。
2019年7月18日更新:
1、DUMM代码更新到 v0.20.0.11版;
2、已将委托接口ModEntry::Action<ModEntry> OnModAction改为ModEntry::ConcurrentStack<Action<ModEntry>> OnModActions,现在已支持在DUMM界面上连续多次点击诸如添加物品按钮此类操作后会连续异步执行所有操作。
2019年7月22日更新:
1、DUMM代码更新到 v0.20.0.12版;
2、新增打开DUMM窗口时完全冻结游戏UI和快捷键响应功能,即如同在游戏中按ESC键打开游戏菜单后的效果,目前仅完全支持《开拓者:拥王者》。
2019年7月23日更新:
1、DUMM代码更新到 v0.20.0.13版;
2、修复v0.20.0.12版在游戏主菜单界面打开DUMM后会导致载入游戏后在游戏大地图旅行时摄影机无法移动的bug。
2019年7月26日更新:
1、DUMM代码更新到 v0.20.0.14版;
2、DUMM安装程序新增DUMM目录不能放在游戏主目录及其子目录下的提示,即原则上要求DUMM目录放到单独的目录下,例如:你本机《开拓者:拥王者》的安装目录是D:\games\Pathfinder Kingmaker,那么DUMM目录不能放到D:\games\Pathfinder Kingmaker目录及其子目录下。
2019年7月29日更新:
1、DUMM代码更新到 v0.20.0.15版;
2、DUMM新增支持在Mod配置文件Info.json中设置是否打开冻结游戏UI模式,FreezeUI字段设置0或false为关闭,否则为打开,例如:洗点Mod“Respecialization”不支持冻结游戏UI模式,使用DUMM安装好该Mod后可手动修改 Pathfinder Kingmaker\Mods\Respec 目录下修改配置文件 Info.json,新增一行配置信息:"FreezeUI": "0", 即可,这样DUMM会关闭冻结游戏UI模式。
2019年7月31日更新:
1、DUMM代码更新到 v0.20.0.16版;
2、DUMM新增UI::WindowSize接口,供Mod类库调用获得DUMM窗口当前的尺寸,支持最新版的百宝袋Mod v1.14.1.8。
2019年8月23日更新:
1、DUMM代码更新到 v0.20.0.17版,支持最新版的百宝袋Mod v1.14.4.12;
2、DUMM的UI布局优化及美化;
3、新增支持自定义替换游戏插件界面的背景图片,只要手动替换图片文件DearUnityModManager\background.jpg即可;
4、新增多种自定义GUIStyle样式,并且新增了一些UI接口供Mod类库调用:
UI::ScrollViewPosition 获得DUMM窗口的ScrollView控件位置对象;
UI::WindowPosition 获得DUMM窗口位置对象;
UI::ShowTooltip 显示控件的文本提示。
2019年9月5日更新:
1、DUMM代码更新到 v0.21.0.19,支持最新版的百宝袋Mod v1.14.5.14;
2、规范化UI类的所有字段、方法的命名;
3、DUMM游戏插件模块的日志文件UnityModManager\Log.txt改为只保留最近一次启动游戏后的日志。
2019年9月27日更新:
1、DUMM代码更新到 v0.21.1.20,整合UMM最新版 v0.21.1;
2、修复了DUMM游戏插件界面的Mod依赖列表显示问题。
2019年10月15日更新:
1、DUMM代码更新到 v0.21.2.21,整合UMM最新版 v0.21.2;
2、配置文件DearUnityModManager\UnityModManagerConfig.xml中GameInfo节点下新增一个可选子节点FixBlackUI;
3、修复了DUMM游戏插件界面的背景图片问题,优先使用自制图片文件DearUnityModManager\background.jpg,若图片文件不存在或加载失败,则根据配置文件DearUnityModManager\UnityModManagerConfig.xml中GameInfo节点下的FixBlackUI子节点值决定,若值为1或true则使用默认的浅灰色背景,否则使用默认的深灰色背景。
2019年11月8日更新:
1、DUMM代码更新到 v0.21.2.22,更新UnityDoorstop最新版v2.12.0.0;
2、鉴于UnityDoorstop的类库文件名已从“version.dll”变更为“winhttp.dll”,建议更新此版本前先运行上一版本的DUMM后点“从游戏卸载MOD管理器模块”,再运行此版本的DUMM后点“安装MOD管理器模块到游戏”。
2020年2月8日更新:
1、DUMM代码更新到 v0.21.4.23,整合UMM最新版 v0.21.4;
2、修复了DUMM游戏插件界面的依赖Mod缺失问题。
2020年2月9日更新:
1、DUMM代码更新到 v0.21.4.24,支持最新版百宝袋-DUMM版 v1.15.3.21;
2、现已较好地实现了在UI界面异步并行批量获得物品的操作。
2020年4月8日更新:
1、DUMM代码更新到 v0.21.6.25,整合UMM最新版 v0.21.6。
2020年4月16日更新:
1、DUMM代码更新到 v0.21.8.26,整合UMM最新版 v0.21.8;
2、将配置文件DearUnityModManager\UnityModManagerConfig.xml中GameInfo节点下的Additionally子节点名称改为Comment,作为安装注释说明字段。
2020年5月12日更新:
1、DUMM代码更新到 v0.22.1.27,整合UMM最新版 v0.22.1;
2、Harmony类库更新到v2.0.1。
2020年5月17日更新:
1、DUMM代码更新到 v0.22.3.28,整合UMM最新版 v0.22.3;
2、配置文件DearUnityModManager\UnityModManagerConfig.xml中新增了一些新游戏的配置,v0.22.1.27版本以后的游戏Mod都将使用最新的Harmony类库v2.x。
2020年5月25日更新:
1、DUMM代码更新到 v0.22.3.29,第三方类库更新;
2、UnityDoorStop类库更新到v3.0.0(类库文件名改为version.dll),dnlib类库更新到v3.3.2,Newtonsoft.Json类库更新到v13.0.1。
2020年5月31日更新:
1、DUMM代码更新到 v0.22.4.30,整合UMM最新版 v0.22.4;
2、Harmony类库更新,Mod重载逻辑修正;
3、UnityModManager.UI类新增UMM的GUIStyle样式,以便支持UMM相关Mod调用,现在DUMM已经可以正确加载使用了UMM的UI控件样式的Mod了(如:洗点Mod Respec等等)。
2020年6月3日更新:
1、DUMM代码更新到 v0.22.5.31,整合UMM最新版 v0.22.5;
2、ModInfo类新增LoadAfter字段,对应于Mod的配置文件info.json中的LoadAfter字段,作用是指定Mod加载后需要后续加载的其他Mod列表。
2020年6月17日更新:
1、DUMM代码更新到 v0.22.6.32,整合UMM最新版 v0.22.6;
2020年8月21日更新:
1、DUMM代码更新到 v0.22.8.34;
2、更好的支持《开拓者:拥王者》终极版V2.1.0H。
2020年8月22日更新:
1、由于改游戏使用的unity引擎从2018.1更新为2018.4版,UI界面有些变化,已修正界面布局错乱问题。
2020年8月23日更新:
1、DUMM代码更新到 v0.22.8.35;
2、游戏内UI界面代码重构,完全支持unity2018.4版引擎,文字和布局都已能正常显示;
3、修正MOD异步调用方法接口,支持unity2018.4版引擎。
2020年8月28日更新:
1、DUMM代码更新到 v0.22.9.36,整合UMM最新版 v0.22.9;
2、支持《开拓者:拥王者》v2.1.0j版。
2020年10月2日更新:
1、DUMM代码更新到 v0.22.11.37,整合UMM最新版 v0.22.11;
2、UnityDoorStop类库更新到v3.0.2.2(类库文件名改为winhttp.dll);
3、配置文件DearUnityModManager\UnityModManagerConfig.xml中新增了一些新游戏的配置。
2020年10月20日更新:
1、DUMM代码更新到 v0.22.12.38,整合UMM最新版 v0.22.12;
2、配置文件DearUnityModManager\UnityModManagerConfig.xml中新增了一些新游戏的配置。
2020年10月31日更新:
1、DUMM代码更新到 v0.22.13.39,整合UMM最新版 v0.22.13;
2、Harmony类库更新到v2.0.3。
2020年11月20日更新:
1、DUMM代码更新到 v0.22.14.40,整合UMM最新版 v0.22.4;
2、Harmony类库更新到v2.0.4,UnityDoorStop类库更新到v3.1.0.0。
2020年12月25日更新:
1、DUMM代码更新到 v0.22.15.41,整合UMM最新版 v0.22.15。
2021年2月19日更新:
1、DUMM代码更新到 v0.23.0.42,整合UMM最新版 v0.23.0;
2、UnityDoorStop类库更新到v3.2.0.0;
3、DUMM主目录下新增配置文件UnityModManagerConfigLocal.xml,水友们可用于配置添加自己喜欢的Unity游戏;
4、配置文件UnityModManagerConfig.xml中新增了一些新游戏的配置,GameInfo节点新增了ExtraFilesUrl子节点,该节点为游戏Mod正常生效提供“附加文件”的下载链接;
5、DUMM的“安装”选项卡界面新增“附加文件”下载功能,专用于某些需要下载一些附加文件并解压缩到游戏目录,才能使Mod生效的游戏。
2021年3月15日更新:
1、DUMM代码更新到 v0.23.2.43,整合UMM最新版 v0.23.2;
2、UnityDoorStop类库更新到v3.3.1.0;
3、配置文件UnityModManagerConfig.xml中新增了一些新游戏的配置。
2021年4月5日更新:
1、DUMM代码更新到 v0.23.3.44,整合UMM最新版 v0.23.3。
2021年4月15日更新:
1、DUMM代码更新到 v0.23.4.45,整合UMM最新版 v0.23.4。
2021年6月2日更新:
1、DUMM代码更新到 v0.23.4.46,支持《开拓者:拥王者》v2.1.7b版本;
2、bug修复。
2021年8月20日更新:
1、DUMM代码更新到 v0.23.5.47,整合UMM最新版 v0.23.5;
2、UnityDoorStop类库更新到v3.4,Harmony类库更新到v2.1.1,dnlib类库更新到v3.3.3;
3、配置文件UnityModManagerConfig.xml中新增了一些新游戏的配置。
2021年9月4日更新:
1、DUMM代码更新到 v0.23.5.48,修复了一些bug;
2、新增支持《开拓者:正义之怒》正式版;
3、新增支持N网的ToyBox百宝袋MOD。
俺在3DMGAME论坛发的原帖链接:

自制亲爱的Unity游戏MOD管理器DUMM!!
DUMM 项目源代码GitHub链接

特此说明:

本人之前做了多年的软件系统架构设计,几年前已经成为了一名自由开发者,通过在各大网络外包平台上接单赚钱,但赚钱多少主要靠运气;基于我十多年软件系统运维、开发的经验以及对PC游戏的热爱,我利用几年自由时间开发和制作了《PC游戏Mod制作及系统运维、开发人员实用工具合集》,自认为此软件无论对PC游戏MOD制作爱好者还是软件系统运维、开发人员都有显著的实用价值;我希望广大水友中有认可我制作的软件,且觉得它对你有明显的实用价值,不妨以自愿赞助式付款购买软件的形式支持我,这也是我今后持续更新这些软件的最大动力!我的所有作品的平台展示购买页面请点击《PC游戏Mod制作及系统运维、开发人员实用工具合集》。

xiangtingsl 发表于 2022-12-5 07:54

啥东西

LiteralliJeff 发表于 2022-12-5 07:59

大佬,用了你这个装respec的时候提示OnGUI: MissingFieldException - Field 'UnityModManagerNet.UnityModManager/UI.button' not found如何解决呀

mastertravels77 发表于 2022-12-5 08:07

UP主,这个App只能用在那个列表上特定的几个游戏上吗?最近在玩 人类一败涂地,自己做了新的角色人物模型,可是不知道怎么让游戏支持我做的角色。 鼓捣了很久 T_T

LiteralliJeff 发表于 2022-12-5 08:07

这个问题是由于DUMM修正了UMM的UI类的字段命名,而respec这个mod跟UMM是同一个作者开发的,调用了UMM里面的控件样式名称,因而DUMM会报找不到这个字段;解决方法有两种:1、将UMM中的原始控件样式字段复制一份到DUMM中(不推荐,因为这样违背了命名规则);2、修改respec的源代码,将引用UI类中的控件样式字段名称作相应修改(button对应的新名称是ButtonStyle),鉴于作者尚未开放这个mod的源代码,因此只能通过反编译来修改,如果你有兴趣,可以按照俺发表的教程文章尝试着修改下。下面是DUMM的UI类的所有样式字符定义:
            /// <summary>
            /// 新增多种自定义GUIStyle样式
            /// </summary>
            public static GS WindowStyle;
            public static GS ButtonStyle;
            public static GS ToggleStyle;
            public static GS HSliderStyle;
            public static GS HSliderThumbStyle;
            public static GS IconStyle;
            public static GS H1FontStyle;
            public static GS H2FontStyle;
            public static GS BoldFontStyle;
            public static GS CenterFontStyle;
            public static GS NormalFontStyle;

JoshWindsor 发表于 2022-12-5 08:09

只要是使用unity引擎开发的游戏都可以使用DUMM,你如果想让DUMM支持自定义的新游戏,可以修改配置文件UnityModManagerConfig.xml,首先复制一个GameInfo节点,在修改相应的子节点值;一般只需要修改Name(游戏名称)和StartingPoint(DUMM的模块注入点)就行,若不能显示游戏插件窗口可以查看日志文件Managed\UnityModManager\Log.txt,修正StartingPoint节点的值直到窗口能正常显示为止。
另外,上面说的是你有现成的该游戏的mod的前提下怎样使DUMM支持的方法,如果你是自己重新做mod,那就还需要自己先引用游戏的Assembly-CSharp.dll类库和DUMM的UnityModManager.dll制作该mod的.dll类库文件,再使用DUMM安装到游戏才行;具体怎样基于DUMM开发自己的mod类库文件,你可以参考下我自制的《开拓者:拥王者》的百宝袋mod,项目代码也在我的github上。

kirin77 发表于 2022-12-5 08:18

( ⊙o⊙ )哇~~谢谢您的回复 ~ 编程不是我的本专业 ,我要去好好学下才行~ Thx
[思考]

super1 发表于 2022-12-5 08:18

我自己试了改了GameInfo节点,不知道是什么原因,显示“安装管理器模块到游戏成功!”,但是游戏没办法启动了,验证了游戏完整性没问题,就是没办法启动了……发现只有重新卸载MOD管理模块,才能启动游戏……您觉得可能是什么原因呢?

以下是加入的:
</GameInfo>
<GameInfo Name="Human Fall Flat">
    <GameName>Human Fall Flat</GameName>
    <Folder>Human Fall Flat</Folder>
    <ModsDirectory>Mods</ModsDirectory>
    <ModInfo>Info.json</ModInfo>
    <GameExe>Human.exe</GameExe>
    <EntryPoint>Multiplayer.App.Awake:After</EntryPoint>
    <StartingPoint>Multiplayer.App.Awake:After</StartingPoint>


是注入点出错了吗?还是?……
? 一般是选择哪里作为注入点呢? 我用您给的例子的单词去搜索Assembly-CSharp.dll还有Assembly-CSharp-firstpass.dll文件,只有App.Awake这个可以找到类似对应的^试了其它的几个,也不行 T_T   
[摊手]

mastertravels77 发表于 2022-12-5 08:21

1、使用DoorstopProxy安装方式;
2、在你新加的GameInfo节点中删除EntryPoint节点;
3、检查日志文件Managed\UnityModManager\Log.txt。

jquave 发表于 2022-12-5 08:25

请问我打开exe后一直显示无法访问网站是为什么呀,进游戏后也没有mod
页: [1] 2
查看完整版本: 自制亲爱的Unity游戏MOD管理器DUMM