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

所属分类: 软件教程 / 其他工具 阅读数: 1660
收藏 0 赞 0 分享

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

配置文件

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

新建一个文件夹,重命名为“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”

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

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

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

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

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

右键引用选择添加引用

这里选择“游览”

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

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

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

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

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

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

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

首先,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):

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

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

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

更多精彩内容其他人还在看

百度女神卡怎么申请 百度女神卡申请教程

很多朋友不清楚百度女神卡怎么申请?下面小编给大家带来百度女神卡申请教程,需要的朋友可以参考下
收藏 0 赞 0 分享

CST Studio Suite2015安装及破解详细图文教程

近日,有网友咨询小编CST2015如何安装?今天脚本之家小编就给大家带来CST Studio Suite2015安装及破解图文教程,非常详细,需要的赶紧去看看吧
收藏 0 赞 0 分享

乐视视频小乐卡资费划算吗?中国电信携手乐视推视频免流卡套餐详情介绍

中国电信联合乐视视频推出了全新的免流卡套餐——乐视视频小乐卡。那究竟小乐卡套餐可以为我们带来怎样的优惠呢?电信小乐卡怎么收费的?乐视视频小乐卡套餐划算吗?下面我们就一起来了解
收藏 0 赞 0 分享

BarTender条码设计怎么移动对象?

BarTender条码设计怎么移动对象?BarTender设计条码的时候,发现条码的位置不对,想要移动一下,该怎么移动呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

BarTender条码制作软件怎么使用对象分组功能?

BarTender条码制作软件怎么使用对象分组功能?BarTender设计条码的时候需要使用很多命令,今天我们就来看看分组命令的使用方法,需要的朋友可以参考下
收藏 0 赞 0 分享

聚力卡划算吗?电信推出聚力视频免流卡套餐资费详情介绍

中国联通推出了不少套餐优惠的手机卡,腾讯王卡,蚂蚁宝卡、微博微卡等,让用户获得了实惠。而昨日电信一下子联合不少视频网站也推出了五款专属优惠卡,其中电信就和PPTV视频联合合作推出了一款聚力卡,聚力卡划算吗?本文带来电信推出聚力视频免流卡套餐资费详情介绍
收藏 0 赞 0 分享

爱奇艺爱享卡多少钱?电信牵手爱奇艺视频推出爱享卡套餐资费详情介绍

中国联通推出了不少套餐优惠的手机卡,比如,腾讯王卡,蚂蚁宝卡、微博微卡等,让用户获得了实惠。而就在昨日电信一下子联合不少视频网站也推出了五款专属优惠卡,其中电信就和爱奇艺视频联合合作推出了一款爱享卡,爱奇艺爱享卡多少钱?本文带来爱享卡套餐资费详情介绍
收藏 0 赞 0 分享

天翼视讯看看卡怎么样?中国电信天翼视讯免流手机卡套餐资费详情

日前,中国电信推出了一款号称“资深剧迷必备”的天翼视讯看看卡,那么天翼视讯看看卡多少钱?天翼视讯看看卡怎么样?天翼视讯看看卡划算吗?下面带来中国电信天翼视讯免流手机卡套餐资费详情,一起来了解下
收藏 0 赞 0 分享

今日头条关心卡划算吗?电信头条关心卡套餐资费介绍

中国电信今天更是联合乐视视频、PPTV聚力视频、爱奇艺、天翼视讯、今日头条,一口气推出了五张不同的免流卡,那么今日头条关心卡多少钱?今日头条关心卡划算吗?本文带来电信头条关心卡套餐资费介绍
收藏 0 赞 0 分享

steam怎么使用银联支付 steam银联支付教程

很多朋友不清楚steam怎么使用银联支付?下面小编给大家带来steam银联支付教程,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多