在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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的教程了,不知道你学会了没有,如果还是不明白可以多学习几次,毕竟对于初次接触的用户还是很复杂的。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论