MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

MOD制作教程。今天给大家详细介绍如何利用Unity Mod Manager制作一个Mod。相信很多玩家在使用别人制作的mod时,都有一定不满意的地方,这个时候玩家朋友就想自己修改一些不足的地方,或者制作自己喜欢的MOD。那么怎么制作MOD呢?制作MOD需要什么制作工具呢?那么一起详细的看看下面的MOD制作教程,一定会帮助到你的。

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

支持制作的游戏

支持了不起的修仙模拟器

波西亚时光

花园瓜子

滑板XL

开拓者:拥王者

女主播经纪公司

汽车修理工模拟2018

缺氧

嗜血印

双电医院

一起玩农场

学习教程前请看需要的使用工具

Microsoft Visual Studio 2017下载地址====点我下载

Unity Mod Manager 下载地址====点我下载(以下我就直接简称为“UMM了”)

dnSpy 下载地址====点我下载 一个UMM支持的游戏(我这里使用的是双点医院)

准备工作:

下载安装好全部的工具

使用UMM安装到游戏中(具体安装方法可以查看UMM的下载页面)

然后打开游戏目录:游戏名_Data\Managed

将下面的文件复制出来(随便复制到哪都可以):

必须:Assembly-CSharp.dll、Assembly-CSharp-firstpass.dll、0Harmony12.dll、UnityEngine.dll、UnityEngine.UI.dll

可选:UnityEngine.CoreModule.dll、UnityEngine.IMGUIModule.dll

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

配置文件

在正式开始之前,我们还需要准备一个配置文件,

新建一个文件夹,重命名为“TextMod”,在里面新建一个记事本文件,重命名为“Info.json”(记得开启显示后缀名),然后使用Notepad++,

在里面粘贴下面的代码:

{
  "Id": "TestMod",
  "DisplayName": "Test Mod",
  "Author": "小莫",
  "Version": "1.0.0",
  "ManagerVersion": "1.0.0",
  "Requirements": ["SomeMod-1.0.0", "AnotherMod"],
  "AssemblyName": "TestMod.dll",
  "EntryMethod": "TestMod.Main.Load",
  "HomePage":"www.aaa.com",
  "Repository ":"www.bbb.com"
}

解释:

ID:ID就是Mod的ID,Mod ID不能重复(必须);

DisplayName :Mod名称,显示在游戏里面(可选,建议填写);

Author:Mod作者,显示在游戏里面(可选,建议填写);

Version:版本,Mod的更新需要判断版本(必须);

ManagerVersion:Mod管理器最低版本,建议填写你现在使用的UMM版本(可选,建议填写);

Requirements:要求,Mod所需要的其他Mod依赖(可选);

AssemblyName:文件名称,即我们创建的dll文件名称(可选);

EntryMethod:文件函数,我们写的代码函数,下面会讲到(必须);

HomePage:主页,作者的主页,可以填写Mod的发布地址,也可以填写个人微博地址(可选);

Repository:自动更新检测地址,关于自动更新这一块,我也不知道,所以大家自己百度吧(可选);

Visual Studio部分

首先打开Visual Studio,然后新建一个项目工程(快捷键是Ctrl+Shift+N)

左边选择“Visual C#”,中间选择“类库.NET Framework”

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

将这里的“Class1”改成“Main”

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

这里就是刚刚提到的“EntryMethod”文件主函数的内容,

【TestMod.Main.Load】的意思就是

加载 “TestMod“”里面的“Main”里面的“Load”

接下来我们来添加几个引用

右键引用选择添加引用

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

这里选择“游览”

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

然后找到一开始让大家复制出来的那几个文件,添加进来

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

然后在引用这里就可以看到了

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

接下来我们在这里手动添加几个引用

using UnityEngine;
using Harmony12;
using UnityModManagerNet;
using System.Reflection;

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

那么准备工作就算完成了,我们可以开始写代码了

别问我怎么写,我也不会写

我们来看一下作者给的代码吧:

首先,UMM自带的函数有:

// modEntry.Info - 包含 'Info.json' 文件里面的所有字段.
// modEntry.Path - Mod 文件夹路径. string类型.
// modEntry.Active - 是否是激活状态.bool类型
// modEntry.Logger - 将日志写入 'UnityModManager.log' 文件.
// modEntry.OnToggle - 该功能的存在让玩家知道可以安全的关闭这个Mod.
// modEntry.OnGUI - 添加Mod界面选项.
// modEntry.OnSaveGUI - 保存时调用.

具体C#什么意思我也不是非常精通,我就直接把完整代码贴出来吧:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using Harmony12;
using UnityModManagerNet;
using System.Reflection;



namespace TestMod
{
    public class Main
    {
        public static UnityModManager.ModEntry.ModLogger Logger;    //写入日志
        public static bool enabled;     // 让游戏知道玩家关闭了这个Mod

        // 有关Mod的数据变量
        static bool Load(UnityModManager.ModEntry modEntry)
        {
            HarmonyInstance harmony = HarmonyInstance.Create(modEntry.Info.Id);   //获取符段
            string a = modEntry.Path;       //获取路径
            bool b = modEntry.Active;       //获取激活状态
            Logger = modEntry.Logger;       //写入日志
            modEntry.OnToggle = OnToggle;   //让游戏知道玩家关闭了这个Mod
            modEntry.OnGUI = OnGUI;         //添加Mod界面选项.界面内容 是“OnGUI”里面的内容
            modEntry.OnSaveGUI = OnSaveGUI; //保存时调用“OnSaveGUI”里面的内容

            // modEntry.Info - 包含 'Info.json' 文件里面的所有字段.
            // modEntry.Path - Mod 文件夹路径.目前是: 'F:\steam\steamapps\common\TPH\Mods\TextMod'.
            // modEntry.Active - 是否是激活状态.
            // modEntry.Logger - 将日志写入 'UnityModManager.log' 文件.
            // modEntry.OnToggle - 该功能的存在让玩家知道可以安全的关闭这个Mod.
            // modEntry.OnGUI - 添加Mod界面选项.
            // modEntry.OnSaveGUI - 保存时调用.
            return true;
        }
        public static bool OnToggle(UnityModManager.ModEntry modEntry, bool value)   //让游戏知道玩家关闭了这个Mod
        {
           enabled = value;
            return true;
        }
        static void OnGUI(UnityModManager.ModEntry modEntry)    //添加Mod界面选项.
        {           
        }
        static void OnSaveGUI(UnityModManager.ModEntry modEntry)     // 设置保存(modEntry);
        {           
        }

    }
}

(上面这段代码没有任何意义)

给Mod添加一个开关事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using Harmony12;
using UnityModManagerNet;
using System.Reflection;

namespace TestMod
{
    class Main
    {
        public static bool enabled;
        static bool Load(UnityModManager.ModEntry modEntry)
        {
            modEntry.OnToggle = OnToggle;
            return true;
        }

        // 当Mod打开或关闭时执行
        static bool OnToggle(UnityModManager.ModEntry modEntry, bool value /*有效或无效*/)
        {
            enabled = value;
            return true; // 是或不是.
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using Harmony12;
using UnityModManagerNet;
using System.Reflection;

namespace TestMod
{
    class Main
    {
        public static bool enabled;

        static bool Load(UnityModManager.ModEntry modEntry)
        {
            modEntry.OnToggle = OnToggle;

            var harmony = HarmonyInstance.Create(modEntry.Info.Id);
            harmony.PatchAll(Assembly.GetExecutingAssembly());

            return true;
        }

        static bool OnToggle(UnityModManager.ModEntry modEntry, bool value)
        {
            enabled = value;
            modEntry.Logger.Log(Application.loadedLevelName);

            return true;
        }
    }

    [HarmonyPatch(typeof(Application), "loadedLevelName", MethodType.Getter)]
    static class Application_loadedLevelName_Patch
    {
        static void Postfix(ref string __result)
        {
            if (!Main.enabled)
                return;

            __result = "New Level Name";
        }
    }
}

这段的意思就是

函数“Application.loadedLevelName”将始终返回字符串类型“New Level Name”

写完之后,我们就可以生成了(快捷键是F6):

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

完事之后我们找到项目文件的\TestMod\TestMod\bin\Debug目录,将里面的“TestMod.dll”文件复制出来,放到我们之前建立的“TextMod”文件夹里面

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

MOD制作教程 教你如何利用Unity Mod Manager制作一个Mod

最后将“TextMod”文件夹放到游戏目录中的“mods”文件夹里面就可以了,然后进游戏就可以看到我们的Mod了

以上就是今天大家带来的Unity Mod Manager制作一个Mod的教程了,不知道你学会了没有,如果还是不明白可以多学习几次,毕竟对于初次接触的用户还是很复杂的。