Skip to content

创建插件

安装所有必需的工具后,就可以创建一个新项目了。 BepInEx 插件需要至少一个用 BepInPlugin 注释的 C# 文件。 此外,为了使插件代码编译,我们需要引用 BepInEx 库和游戏特定的库。

为了使该过程更容易,我们将使用我们在上一部分中安装的 BepInEx.Templates 包中的现成插件模板。 这些模板已包含预制的 C# 文件和引用的 BepInEx 特定库。

在本节中,我们将

  • 创建一个新项目,
  • 查看插件的结构和元数据,以及
  • 参考游戏特定的库,
  • 构建并验证插件是否已被游戏加载

从模板创建项目

首先, 为项目创建一个文件夹, 作为示例,我将使用项目名称 ScriptTrainer

  • 新建一个文件夹, 重命名为 ScriptTrainer
  • 用 VS Code 打开, 然后按 Ctrl + ~ 打开VS Code 的终端
  • 在终端中输入
    cmd
    dotnet new bepinex5plugin -n ScriptTrainer -T net46 -U 2021.3.10
  • 然后你能看到3个文件
    • Plugin.cs: 程序主入口
    • ScriptTrainer.csproj: 插件项目配置
    • NuGet.Config: NuGet 包管理器的配置文件

启动函数

BepInEx中有4个函数比较常用的函数,大家可以简单记一下:

  • Awake():在插件启动时会直接调用Awake()方法;
  • Start():在所有插件全部执行完成后会调用Start()方法,执行顺序在Awake()后面;
  • Update():插件启动后会一直循环执行Update()方法,可用于监听事件或判断键盘按键,执行顺序在Start()后面;
  • OnDestroy():在插件关闭时会调用OnDestroy()方法,可处理前面提到的“ScriptEngine”插件重启时需要做的操作。

测试和编译插件

了解了上面这些后,现在,我们开始写代码

csharp
// 在插件启动时会直接调用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("当你看到这条消息时,就表示我已经被关闭一次了!");
}