krkr2 中文文档 下载 App

插件加载机制与分类

插件系统概述

吉里吉里2 的插件系统是其可扩展性的核心。引擎内置的 Layer、Image、Wave 等原生类已经很强大了,但当你需要:

这些就需要插件。

两种插件格式

.dll 插件

.tpm 插件

所以制作或安装插件时,把 DLL 扩展名改成 TPM 即可自动加载。

插件加载时机

引擎启动流程中,插件加载发生在startup.tjs 之前:

1. krkr.exe 启动
2. 加载 kirikiri.dll、krdevui.dll
3. ★ 扫描并加载所有 .tpm 插件 ★
4. 确定项目目录
5. 执行 startup.tjs
6. KAG 启动

这意味着:插件注册的类和函数在 startup.tjs 里就可以直接用。

自动扫描的目录

引擎启动时按以下顺序扫描 .tpm 文件:

  1. 与 krkr.exe 同目录
  2. 与 krkr.exe 同目录下的 plugins/ 子目录
  3. 项目目录内(某些版本)

推荐把所有插件放在 plugins/ 目录下,保持根目录整洁。

MyGame/
├── krkr.eXe
├── krdevui.dll
├── plugins/
│   ├── live2d.tpm
│   ├── psb.tpm
│   └── wmv.tpm
├── data.xp3
└── ...

TJS2 里怎么调用插件

插件加载后会向引擎注册新的类或函数,在 TJS2 里直接使用:

// 假设某个插件注册了 Live2D 类
var model = Live2D.load("live2d/hero.moc3");
model.setExpression("smile");
Layer.get(1).attach(model);

具体 API 取决于插件的文档。

插件能做什么

理论上插件能做 C/C++ 能做的任何事,因为它直接在引擎进程里运行。社区常见的插件:

类型功能例子
图形增强Live2D、PSD/PSB、3D、ShaderLive2D Cubism Plugin
音频扩展MP3、OGG 更高版本、位置音频oggdec.tpm
网络HTTP、WebSocket、在线存档net.tpm
输入触屏、手柄Kirikiri Z 内置
加密更复杂的存档加密商业游戏常用
视频WebM、MP4Kirikiri Z 内置

插件的安全边界

插件没有沙盒——它和引擎在同一个进程里,能访问所有内存、文件、网络。这意味着:

Kirikiroid2 的限制

Android 模拟器 不支持外部插件:

Kirikiri Z 的扩展

Kirikiri Z 的插件系统有改进:

开发自己的插件

如果你是 C/C++ 开发者,可以基于 Kirikiri SDK 开发自己的插件:

// 插件基本框架(伪代码)
#include "kirikiri_plugin.h"

// 插件加载时调用
void kirikiri_plugin_init() {
    // 注册 TJS2 类
    RegisterTJSClass("MyPlugin", MyPluginCreate, MyPluginMethods);
}

Kirikiri SDK 附带了插件开发头文件和示例。但老实说,社区里自己写插件的人不多——现有插件覆盖了绝大多数场景,而且 C++ 开发门槛比 TJS2 高很多。

安装第三方插件

1. 下载插件(通常是一个 .dll 或 .tpm 文件)
2. 如果是 .dll → 改名为 .tpm
3. 放到 plugins/ 目录下
4. 启动引擎测试是否加载成功(看控制器/控制台输出)
5. 如果引擎启动崩溃 → 版本不兼容,找对应引擎版本的插件

版本兼容性检查

插件一般标注了适用的引擎版本,比如「for krkr2.24」或「for krkrz 2.x」。版本不匹配时:

找插件时注意版本号。