创建插件,实现“Hello, world”的输出
创建插件
通过前面几章的熟悉,现在可以开始创建我们的BepInEx插件了。
新建项目 打开Visual Studio,新建项目,选择“C# NET Framework 类库”
接着继续创建项目,.NET框架暂时没有什么特别的要求,别太低就行了
引入游戏类库 将我们之前拿出来的几个dll库引用进来
接下来,将刚刚引用进来的库全选,然后将“复制到本地”改为“false”
顺便将默认的“Class1.cs”改名成我们自己的名称。
定义插件
我们需要从 BaseUnityPlugin 继承类,并将BepInPlugin添加到该类
using System;
using BepInEx;
using UnityEngine;
namespace MyFirstBepInExMod
{
[BepInPlugin("aoe.top.plugins.MyFirstBepInExMod", "这是我的第一个BepIn插件", "1.0.0.0")]
public class MyFirstBepInExMod : BaseUnityPlugin
{
}
}
至此,我们就已经完成一个插件的基本结构了,现在来解释一下
public BepInPlugin(string GUID, string Name, string Version);
string GUID:
插件的唯一ID标识符,绝对且是唯一的,不能存在重复,大家在命名的时候尽量避免重复的现象,请用自己专属的唯一标识符来命名;string Name:
插件名称,可以使用中文,string Version:
插件版本,必须使用系统可解析的格式,如“1.0.0”、“0.2.1”、“2.6.0”之类的
启动函数
BepInEx中有4个函数比较常用的函数,大家可以简单记一下:
Awake():
在插件启动时会直接调用Awake()方法;Start():
在所有插件全部执行完成后会调用Start()方法,执行顺序在Awake()后面;Update():
插件启动后会一直循环执行Update()方法,可用于监听事件或判断键盘按键,执行顺序在Start()后面;OnDestroy():
在插件关闭时会调用OnDestroy()方法,可处理前面提到的“ScriptEngine”插件重启时需要做的操作。
测试和编译插件
了解了上面这些后,现在,我们开始写代码
// 在插件启动时会直接调用Awake()方法
void Awake()
{
// 使用Debug.Log()方法来将文本输出到控制台
Debug.Log("Hello, world!");
}
// 在所有插件全部启动完成后会调用Start()方法,执行顺序在Awake()后面;
void Start()
{
Debug.Log("这里是Start()方法中的内容!");
}
// 插件启动后会一直循环执行Update()方法,可用于监听事件或判断键盘按键,执行顺序在Start()后面
void Update()
{
var key = new BepInEx.Configuration.KeyboardShortcut(KeyCode.F9);
if (key.IsDown())
{
Debug.Log("这里是Updatet()方法中的内容,你看到这条消息是因为你按下了F9");
}
}
// 在插件关闭时会调用OnDestroy()方法
void OnDestroy()
{
Debug.Log("当你看到这条消息时,就表示我已经被关闭一次了!");
}
确认没有报错后,在VS中按F6,编译我们的插件,然后打开“MyFirstBepInExMod\bin\Debug”就可以看到我们刚刚编译好的插件了,
将插件复制到“\BepInEx\scripts”中,运行游戏,
注意:我这里是默认你安装了“ScriptEngine”,如果没有,则是放入“BepInEx\plugins”文件夹,如需安装,可以参考上一章的“开发环境的搭建与调试以及有用的工具们”
在游戏中按F6,载入“\BepInEx\scripts”文件夹中的脚本,就可以看到我们的内容了
完整代码
using System;
using BepInEx;
using UnityEngine;
namespace MyFirstBepInExMod
{
[BepInPlugin("aoe.top.plugins.MyFirstBepInExMod", "这是我的第一个BepIn插件", "1.0.0.0")]
public class MyFirstBepInExMod : BaseUnityPlugin
{
// 在插件启动时会直接调用Awake()方法
void Awake()
{
// 使用Debug.Log()方法来将文本输出到控制台
Debug.Log("Hello, world!");
}
// 在所有插件全部启动完成后会调用Start()方法,执行顺序在Awake()后面;
void Start()
{
Debug.Log("这里是Start()方法中的内容!");
}
// 插件启动后会一直循环执行Update()方法,可用于监听事件或判断键盘按键,执行顺序在Start()后面
void Update()
{
var key = new BepInEx.Configuration.KeyboardShortcut(KeyCode.F9);
if (key.IsDown())
{
Debug.Log("这里是Updatet()方法中的内容,你看到这条消息是因为你按下了F9");
}
}
// 在插件关闭时会调用OnDestroy()方法
void OnDestroy()
{
Debug.Log("当你看到这条消息时,就表示我已经被关闭一次了!");
}
}
}