Unity游戏mod开发-01【完成一个打印HelloWorld的mod】

944 阅读3分钟

一、 准备工作

01. 开发平台

Windows10专业版

02. 软件选择

  1. Visual Studio 2022 IDE (需安装 .net桌面开发 + Unity游戏开发)
  2. Notepad++ 文本编辑软件 (程序员常备软件)
  3. dnSpy 用于分析游戏代码 (本文未用到)
  4. AssetStudio 用于解包游戏资源 (本文未用到)

Visual Studio 2022 IDE 安装 .net桌面开发 + Unity游戏开发image.png

03. MOD框架选择

BepInEx (Mono 或 IL2CPP)

说明:Unity游戏分为 Monoil2cpp 两种类型,本文介绍的是 Mono 类游戏的mod开发方法

BepInEx的选择

  1. 游戏根目录下存在 UnityCrashHandler64.exe 文件,对应 BepInEx x64 版本 (32对应 x86 版本)
  2. 游戏根目录下存在 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)

image.png

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

其他所有情况选择此种

如图:

image.png 如果在框架选择时,没有 .NET Framework 3.5.NET Framework 4.6.NET Framework 4.7.2,需在 Visual Studio Installer 中安装对应版本,例如: image.png


三、开始开发

01. 引入程序集

注:引用以后,引用文件属性 复制本地 设置为 False

  1. <游戏根目录>/<游戏名>_Data/Managed 路径下 UnityEngine.dll 文件
  2. <游戏根目录>/<游戏名>_Data/Managed 路径下 UnityEngine.CoreModule.dll 文件
  3. <游戏根目录>/BepInEx/core 路径下 BepInEx.Core.dll 文件
  4. <游戏根目录>/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 目录下 image.png

04. 安装和运行MOD

将编译成的.dll文件复制到 <游戏根目录>/BepInEx/plugins 目录下。启动游戏,控制台成功输出 image.png


四、结语

至此,一个可以在控制台打印 Hello World 的 Unity mod 诞生了

希望这篇文章对热爱游戏和编程的你有所帮助 OvO