一、 准备工作
01. 开发平台
Windows10专业版
02. 软件选择
- Visual Studio 2022 IDE (需安装 .net桌面开发 + Unity游戏开发)
- Notepad++ 文本编辑软件 (程序员常备软件)
- dnSpy 用于分析游戏代码 (本文未用到)
- AssetStudio 用于解包游戏资源 (本文未用到)
Visual Studio 2022 IDE 安装 .net桌面开发 + Unity游戏开发:
03. MOD框架选择
BepInEx (Mono 或 IL2CPP)
说明:Unity游戏分为 Mono 和 il2cpp 两种类型,本文介绍的是 Mono 类游戏的mod开发方法
BepInEx的选择
- 游戏根目录下存在
UnityCrashHandler64.exe文件,对应 BepInEx x64 版本 (32对应 x86 版本) - 游戏根目录下存在
GameAssembly.dll文件,<游戏根目录>/<游戏名>_Data/il2cpp_data路径存在,则为 il2cpp 版本 (反之则为Mono版本)
BepInEx的安装
下载对应的版本以后解压到游戏根目录,运行游戏以后 <游戏根目录>/BepInEx 文件夹下生成更多文件和文件夹,说明安装成功
BepInEx的配置
安装完 BepInEx 以后,在 <游戏根目录>/BepInEx/config/BepInEx.cfg 文件中修改,来启用控制台
[Logging.Console]
Enabled = true
BepInEx的插件 (可选)
UnityExplorer (方便后续调试和开发,在本文中没有体现)
注意事项
如果安装 il2cpp 版本的 BepInEx, 在安装完第一次启动时,需要网络可以访问 github,以便拉取对应的库 (第一次启动需要等待一段时间)
二、创建项目
01. 模板选择
选择 类库(.NET Framework)
02. 框架选择 (从上往下判断) (Mono版) 详情见文档
.NET Framework 4.7.2
在路径
<游戏根目录>/<游戏名>_Data/Managed路径下存在netstandard.dll文件
.NET Framework 4.6
在路径
<游戏根目录>/<游戏名>_Data/Managed路径下mscorlib.dll文件版本大于4.0.0.0
.NET Framework 3.5
其他所有情况选择此种
如图:
如果在框架选择时,没有
.NET Framework 3.5 、 .NET Framework 4.6 或 .NET Framework 4.7.2,需在 Visual Studio Installer 中安装对应版本,例如:
三、开始开发
01. 引入程序集
注:引用以后,引用文件属性 复制本地 设置为 False
<游戏根目录>/<游戏名>_Data/Managed路径下UnityEngine.dll文件<游戏根目录>/<游戏名>_Data/Managed路径下UnityEngine.CoreModule.dll文件<游戏根目录>/BepInEx/core路径下BepInEx.Core.dll文件<游戏根目录>/BepInEx/core路径下BepInEx.Unity.dll文件
02. 代码实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BepInEx;
using UnityEngine;
namespace HelloWorld
{
// [BepInPlugin("你的modID,需要唯一", "你的modName", "版本号")]
[BepInPlugin("com.yourName.pluginName", "HelloMod", "1.0.0")]
public class HelloMod : BaseUnityPlugin
{
void Start()
{
// Unity 输出
Debuge.Log("Unity: Hello World");
// BepInEx 输出
Logger.LogInfo("BepInEx: Hello World");
// 两种都会在控制台打印,推荐使用第二种,可于控制台内看到输出的插件名字
}
}
}
03. 编译MOD
在 解决方案资源管理器 中右键命名空间,点击生成,.dll文件会生成到 <项目根目录>/bin/Debug 目录下
04. 安装和运行MOD
将编译成的.dll文件复制到 <游戏根目录>/BepInEx/plugins 目录下。启动游戏,控制台成功输出
四、结语
至此,一个可以在控制台打印
Hello World的 Unity mod 诞生了希望这篇文章对热爱游戏和编程的你有所帮助
OvO