Unity游戏Mod/插件制作教程01 - 前言
宵夜97
2020年12月26日 11:37
收录于文集
共10篇

前言

Unity引擎是世界著名的游戏引擎,使用此引擎开发游戏的厂家非常多,如太吾绘卷、波西亚时光、雨中冒险、人类一败涂地、缺氧等等。由于Unity引擎使用.Net平台的原因,使其对Mod支持非常方便。我这次开坑,打算将我开发Mod的一些经验写下来,希望能有更多的人学会方法(这样我就可以玩到更多Mod了)。

阅读这篇教程需要的基础

如果你想继续看这篇教程,那我希望你具备一定的C#基础和Unity游戏开发基础。因为这部分内容还是挺多的,我没有精力单独出教程来讲这些,而且C#和Unity的教程别人也做了很多,B站上也有不少不错的教程。

C#方面,最少要入门以上,对反射也要有一点了解。

Unity方面也是需要入门,对Unity的基础操作,Mono的生命周期等有了解。

如果你是完全0基础,那现在就可以点击关闭或者是先去学习一下基础再来阅读,我以前尝试过对0基础和有基础的玩家进行Mod制作讲解,理解方面差别太大了。

UnityModManager和BepInEx

如果你玩过早期的太吾绘卷的Mod,那你一定知道UnityModManager这个东西,这是一个Mod管理器,可以通过拖拽压缩包的方式进行Mod的安装和管理。很多其他的游戏也能见到这个Mod管理器的身影,不少国内的Mod作者也是使用这个。

如果你玩过雨中冒险2或者是太吾绘卷之后发展出来的一些mod,那你应该会了解到BepInEx这个框架,与UMM不同,BepInEx将功能性的Mod称呼为插件(Plugin),并且,BepInEx的插件安装和解压文件一样简单。

两者的相同点:UMM和BepInEx都使用Harmony库作为核心来对游戏进行功能修改。两者的不允许游戏路径出现中文或其他特殊符号,所以请保证游戏安装在纯英文路径。

两者的不同点:

UMM使用一个单独的exe程序来安装Mod环境,此程序基于.Net,需要玩家电脑安装.Net4.5之后的版本才能启动。Mod环境的安装有两种方式,一种是直接修改程序集来加入环境,一种是通过UnityDoorStop在游戏启动时加载Mod环境,第一种方式因为破坏了游戏原有的程序,所以每次游戏更新的时候,都会导致Mod环境丢失需要重新安装,第二种方式不会破坏游戏的原有程序集,所以不会因为游戏更新而丢失环境。在Mod安装方面,UMM也有两种方式,一种是直观的,将Mod压缩包拖动到安装器内来安装,另一种是手动解压Mod包,放到正确的路径。UMM还内置了一个Mod管理界面,在游戏中按Ctrl+F10可以呼出管理界面,修改Mod配置、开启关闭Mod等。

BepInEx没有单独的exe程序,环境的安装只是需要将BepInEx解压到游戏根目录即可。插件的加载方式上,等于UMM的第二种,也是通过UnityDoorStop来运行时加载。插件的安装方式上只有一种,将插件解压到指定的目录下(BepInEx/plugins)即可,没有UMM要求目录那么严格。BepInEx本身并不含有可视化的插件管理等功能。

我为什么选择BepInEx

我自己其实一开始是使用的UMM来进行Mod制作的,直到2019年接触AI少女,发现了BepInEx这个框架。根据我的使用体验,BepInEx比UMM要好出很多。

在环境的安装方面,由于UMM的独立exe的问题,群内经常有人因为没有Net环境打不开、Mod文件放不对地方、安装模式的选择、Mod为什么失效等问题而提问。

UMM的可视化Mod管理,表面上看起来方便,其实暗藏弊病,UMM管理界面上的Mod开关,其实并不是真正的开关,只是一个bool变量,Mod作者需要自己去检测这个变量,对自己的Mod进行开关控制,很多新人Mod作者并不会注意这一点,这就导致开关变成了摆设,而玩家不知道这一点。可视化管理可以让Mod作者自定义配置界面,但是代价比没有定制更大,UMM会把这个界面限制在UMM的管理界面里,无法自由的绘制,如果Mod选项众多或者Mod非常多,UMM狭窄的界面会导致看起来难受。

BepInEx由于没有独立exe安装器,所以环境的安装和插件的安装都是简单的把文件放到指定位置就好,过程中不需要覆盖游戏文件,也不会因为没有Net而无法操作。虽然BepInEx没有可视化的管理,但是其插件继承自Unity的MonoBehaviour,可以直接通过OnGUI的方式定义自己的界面,而且,其实大部分的基础插件,玩家并不需要进行什么管理,既然安装了这个插件,我为什么要在运行的时候关闭它呢。在配置文件的修改方面BepInEx也有一个插件来进行可视化的修改,以后的教程我再提及。

对于选择BepInEx,还有一个重要的因素,那就是一个名叫RuntimeUnityEditor的插件,这个插件可以在游戏运行时观察游戏内的对象结构,修改数据,使用REPL功能等,是非常方便开发的利器,以后有机会我再说这个插件。

Mod/插件制作的限制

我的教程仅以未加密的Unity游戏为例,有些游戏比较特殊,如太吾绘卷,太吾对游戏逻辑进行了简单的加密,我不会教如何解密,但是制作方法是通用的,如果你要做太吾的Mod,可以自己解密或者下载别人解密好的。有的游戏使用il2cpp方式打包,如枪火重生、不思议的皇冠,这类游戏的代码编译成了c++代码,对开发来说非常不友好,虽然有其他框架可以针对il2cpp进行mod,但是体验也是非常难受。

最后

希望我的教程能促进更多的Mod诞生,一个人的精力终究是有限的,只有更多的人参与进来,游戏世界才能丰富多彩。


有什么问题或者建议可以在评论区评论或者与我私信交流。