Unity游戏Mod/插件制作教程05 - 插件实例2: 简单功能实现

news2024/11/25 0:45:57

这一次的教程进行一个小小的功能实现,完整的制作一个插件。以Mirror这个游戏为例,插件的目标是当玩家按下空格时,有一定概率为玩家增加金钱,或者扣除玩家金钱。概率、增加的金钱、扣除的金钱都由配置文件决定。

使用dnSpy查找金钱
在之前的开发环境准备章节中,我们下载了dnSpy,这是一个非常好用的反编译工具,我们查看游戏的逻辑可以使用这个工具。在Unity游戏中,默认情况下,游戏的逻辑都会被编译到XXXGame_Data/Managed/Assembly-CSharp.dll这个dll里面,当然偶尔也会有特殊情况,比如装机模拟器,他的逻辑编译到了Assembly-CSharp-firstpass.dll。

Mirror的比较常规,逻辑在Assembly-CSharp.dll里,我们将这个dll拖入dnSpy。 

可以看到,dnSpy列出了这个程序集下面的所有命名空间。在Unity中创建脚本时,默认是不带命名空间的,有些比较规范的工作室,会自己按照自己的规范添加命名空间,很多小工作室一般都直接按默认来。图中的-代表的就是没有命名空间的部分,我们打开他,可以看到Mirror的类都在里。

 

我们这次的目标是金钱,大多数情况下,游戏厂商都会使用通俗易懂的命名,比如money、coin、cash、gold等。我们点击小放大镜图标进行挨个搜索。在不同的游戏中,找到目标的难度也不太一样,大多数情况下,都需要多看多分析,这一部分只有多制作插件练手才能变的熟练。

经过搜索与排查,我确定了GameTool.roleData中存储了玩家的金钱,接下来,我们就可以进行插件的编写了。

编写插件
新建类库、添加引用这些在前面已经有讲,在此我们不用多说,需要注意的是,我们的需求里有一点是按下空格之后触发功能,我们需要引用一个UnityEngine.InputModule.dll,这是Unity中控制输入部分的类库。

首先我们创建配置文件并进行绑定。

using BepInEx;
using UnityEngine;
using BepInEx.Configuration;

namespace PluginTutorial
{
    [BepInPlugin("me.xiaoye97.plugin.Tutorial", "Tutorial Plugin", "1.0")]
    public class PluginTutorial : BaseUnityPlugin
    {
        ConfigEntry KeyConfig;
        ConfigEntry AddMoneyConfig, SubMoneyConfig, WinRateConfig;

        void Start()
        {
            KeyConfig = Config.Bind("config", "HotKey", KeyCode.Space, "插件热键");
            AddMoneyConfig = Config.Bind("config", "AddMoney", 100, "每次增加的钱");
            SubMoneyConfig = Config.Bind("config", "SubMoney", 50, "每次减少的钱");
            WinRateConfig = Config.Bind("config", "WinRate", 20, "中奖概率 0-100");
        }
    }
}
对于目标需要的功能,我们使用一个随机数即可实现。

void Roll()
{
    int roll = Random.Range(0, 100); //从0到100随机
    if(roll < WinRateConfig.Value) //随机数小于中奖概率则说明中奖
    {
        GameTool.roleData.Money += AddMoneyConfig.Value; //增加金钱
        Logger.LogInfo($"成功,增加{AddMoneyConfig.Value}金钱");
    }
    else
    {
        GameTool.roleData.Money -= SubMoneyConfig.Value; //减少金钱
        Logger.LogInfo($"失败,减少{SubMoneyConfig.Value}金钱");
    }
    MainUI.instance.showMoney(); //刷新金钱显示
}
关于空格键的检测,我们写在Update生命周期中,由于Update生命周期每帧执行一次,所以不会漏掉我们按下空格的那一帧。

void Update()
{
    if (Input.GetKeyDown(KeyConfig.Value))
    {
        Roll();
    }
}
这样,我们的插件就编写完成了,编译插件并将插件放进BepInEx/plugins目录下,我们运行游戏进行测试。

总结
这次我们制作了一个非常基础的小插件,依照这个原理,可以制作一些功能性的插件,但是,大部分情况下,我们并不想要让玩家来通过按键盘上的某一个键来触发我们的功能。更多的时候,我们都希望我们的功能自动触发,比如,当玩家的金钱增加时,自动显示一个浮动的文本告诉玩家增加了多少钱,再比如,在Mirror的三消小游戏中,自动提醒4连,5连等。所以,之后的教程,我们会真正进入插件开发的重点内容,Harmony补丁。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL】数据库事务

【SQL】数据库事务事物的ACID特性事务的状态显式事务隐式事务事务的使用举例SQL中的四种隔离级别MySQL中的隔离级别如何设置事务的隔离级别innodb默认支持事务事务是一组逻辑操作单元&#xff0c;使数据从一种状态转变到另一种状态事物的ACID特性 原子性&#xff08;atomicity…

Java搭建宝塔部署实战毕设项目springboot车险理赔管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目springboot车险理赔管理系统源码。 技术架构 技术框架&#xff1a;SpringBoot mybatis bootstrap jquery mysql5.7运行环境&#xff1a;jdk8 nginx1.20 tomcat9 …

QT学习笔记(六)——QT弹出对话框并在主窗口调用对话框的信息

QT弹出对话框并在主窗口调用对话框的信息&#xff0c;显示影像 最近封控&#xff0c;大部分时间都在自己学习写代码&#xff0c;有点feel 了哈&#xff0c;自己摸出来一个简单的qt 界面&#xff0c;也实现了自己想要的功能。本篇博客主要记录一下&#xff0c;如何弹出对话框&a…

[附源码]SSM计算机毕业设计疫情期间物资分派管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

@Accessors 注解作用

文章目录前言一、Accessors 源码二、Accessors 属性说明1、fluent 属性2、chain 属性3、prefix 属性前言 在最近的工作中&#xff0c;看到 Accessors(chain true) 这样的注解&#xff0c;上网查询了下&#xff0c;他是 lombok 插件包中的一个注解&#xff0c;那么它是什么意思…

如何快速实现一个颜色选择器

在做前端界面开发的时候&#xff0c;遇到需要改变颜色的需求&#xff0c;就需要使用颜色选择器。 针对这个问题&#xff0c;第一想法&#xff0c;自然是H5提供了input color&#xff0c;可以实现。但不出意外的&#xff0c;IE并不支持。而且&#xff0c;chrome的实现方式和fire…

[附源码]Python计算机毕业设计Django个人博客系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【java】输入输出流

文章目录标准输入流标准输出流字节打印流字符打印流案例--复制java文件&#xff08;文件打印流版本&#xff09;对象序列化流序列化流反序列化流serialVersionID&transientProperties作为Map集合的使用Properties作为集合的特有方法Properties与IO流相结合的方法案例--游戏…

必备模块知识——超声波传感器

一、超声波传感器 1、什么是超声波 人们能听到声音是由于物体振动产生的&#xff0c;它的频率在20HZ-20KHZ范围内&#xff0c;超过20KHZ称为超声波&#xff0c;低于20HZ的称为次声波。常用的超声波频率为几十KHZ-几十MHZ。 2、什么是超声波传感器&#xff08;常用的HC-SR04超…

基于PHP+MySQL教室预约管理系统的设计与实现

随着我国国民教育的提高,大学生的数量一直在不断的增加,根据网络资料的查询,发现2012年的大学生人数为600万,这是一个不小的数量,说明了我国教育的进步是巨大的。但是问题也随之产生,每年如此多的大学生就需要大学不断的扩建,可是还是不能满足如此多的学生对教室的使用,所以如何…

【学习笔记】深度学习入门:基于Python的理论与实现-与学习相关的技巧

CONTENTS六、与学习相关的技巧6.1 参数的更新6.2 权重的初始值6.3 Batch Normalization6.4 正则化6.5 超参数的验证六、与学习相关的技巧 6.1 参数的更新 神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题&#xff0c;解决这个问题的过程称为…

YOLOv7(目标检测)数据集、训练、推理过程

一、环境安装&#xff1a; pip install -r requirements.txt pip install torch1.8.2cu111 torchvision0.9.2cu111 torchaudio0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html -i https://pypi.tuna.tsinghua.edu.cn/simple二、修改配置环境 直接看下面…

[附源码]SSM计算机毕业设计血库管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

JavaScript -- 03. 运算符介绍

文章目录运算符1 算数运算符1.1 基础符号1.2 自动类型转换2 赋值运算符3 一元4 自增和自减4.1 自增运算符4.2 -- 自减运算符5 逻辑运算符5.1 逻辑非5.2 逻辑与5.3 逻辑或6 关系运算符7 相等运算符7.1 7.2 7.3 !7.4 !8 条件运算符&#xff08;三元表达式&#xff09;9 运算符的…

专栏 | 解析“全闪对象存储”(三)

在上一节“对象存储的使用场景”中&#xff0c;我们介绍了对象存储在大规模非结构化数据存储、云存储、大数据和数据湖等场景的使用。 那么&#xff0c;优秀对象存储产品是怎样的&#xff1f;如何设计、实现&#xff1f;本节&#xff0c;我们来分析、探讨这些问题。 通过前两…

推荐系统-召回-概述(四):热门推荐

无论个性化多么重要&#xff0c;热门推荐都是推荐系统里不可或缺的一部分。其一、根据“二八定律”&#xff0c;电商系统中的20%的头部内容被80%的流量消费&#xff0c;因此&#xff0c;在产品早期&#xff0c;仅仅推荐热门内容&#xff0c;实施成本不高&#xff0c;且效果也会…

【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)

需要源码请点赞关注收藏后评论区留言~~~ 一、获取地点信息 至于如何集成腾讯地图和调用腾讯地图接口此处不再赘述&#xff0c;有需要请参见我之前的博客 腾讯地图用来搜索POI地点的工具是TencentSearch&#xff0c;通过它查询POI主要分为下列四个步骤&#xff1a; &#xff0…

MySQL---基于CentOS7

在Linux上安装MySQL 本章简单阐述一下&#xff0c;mysq基于centos7的安装步骤 在VM上模拟安装 MySQL版本为&#xff1a;8.0.30 文章目录在Linux上安装MySQL1. MySQL下载卸载MariaDB查看版本卸载2.安装解压mysql压缩包重命名创建用户和组修改权限编写配置文件配置PATH变量初始化…

基于PHP+MySQL集训队员管理系统的设计与实现

ACM是国际大学生程序设计竞赛,这是一个展示大学生风采的平台,但是在ACM报名的时候可能会有很多的队员,管理员对队员的管理是一个繁琐且复杂的过程,通常的管理模式是手工进行管理,这在很大程度上有一些弊端,为了改成这一现状需要一个对应的管理系统出现。 本设计尝试用PHP开发一…

机组运行约束对机组节点边际电价的影响研究(Matlab代码实现)

目录 1 概述 2 日前市场单时段节点电价出清优化模型 2.1 目标函数 2.2 约束条件 3 算例及运行结果 4 结论 5 参考文献 6 Matlab代码及详细文章讲解 1 概述 基于节点边际电价(locational marginal priLMP)的现货巾划lm易能量价值&#xff0c;节点电本确定节点电价&a…