插件加载机制与分类
插件系统概述
吉里吉里2 的插件系统是其可扩展性的核心。引擎内置的 Layer、Image、Wave 等原生类已经很强大了,但当你需要:
- Live2D 动画角色
- PSB / PSD 分层动画(Photoshop 格式直接用)
- 3D 场景(虽然原始吉里吉里2 不支持 3D,但有插件扩展)
- 自定义音频解码器
- 网络功能(HTTP 请求、WebSocket)
- 触控输入(Kirikiri Z)
- 存档加密(比 XP3 内置加密更复杂)
这些就需要插件。
两种插件格式
.dll 插件
- 原生 Windows DLL
- 开发者用 C/C++ 编译
- 需要手动注册到引擎
- Kirikiri 2 原版支持,Kirikiroid2 不支持(模拟器只有硬编码的内置插件)
.tpm 插件
- 本质上也是 DLL,但扩展名改成
.tpm - 引擎启动时自动扫描并加载(不需要手动注册)
- SDK 附带的插件都是
.tpm格式 - Kirikiroid2 和 Kirikiri Z 也支持
.tpm(但各自内置的插件列表不同)
所以制作或安装插件时,把 DLL 扩展名改成 TPM 即可自动加载。
插件加载时机
引擎启动流程中,插件加载发生在startup.tjs 之前:
1. krkr.exe 启动
2. 加载 kirikiri.dll、krdevui.dll
3. ★ 扫描并加载所有 .tpm 插件 ★
4. 确定项目目录
5. 执行 startup.tjs
6. KAG 启动
这意味着:插件注册的类和函数在 startup.tjs 里就可以直接用。
自动扫描的目录
引擎启动时按以下顺序扫描 .tpm 文件:
- 与 krkr.exe 同目录
- 与 krkr.exe 同目录下的 plugins/ 子目录
- 项目目录内(某些版本)
推荐把所有插件放在 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、Shader | Live2D Cubism Plugin |
| 音频扩展 | MP3、OGG 更高版本、位置音频 | oggdec.tpm |
| 网络 | HTTP、WebSocket、在线存档 | net.tpm |
| 输入 | 触屏、手柄 | Kirikiri Z 内置 |
| 加密 | 更复杂的存档加密 | 商业游戏常用 |
| 视频 | WebM、MP4 | Kirikiri Z 内置 |
插件的安全边界
插件没有沙盒——它和引擎在同一个进程里,能访问所有内存、文件、网络。这意味着:
- 第三方来源的插件可能有恶意行为(挖矿、偷存档等)
- 只信你自己编译的或社区长期验证的插件
- 商业游戏如果要分发插件,最好自签名
Kirikiroid2 的限制
Android 模拟器 不支持外部插件:
- 只有模拟器作者硬编码进 APK 的插件能用
- 社区主流插件(Live2D、PSB 等)很多在 Kirikiroid2 里不可用
- 如果要做跨平台项目,提前测试插件兼容性
- KrKr2 Next 支持更多插件(用了新的架构)
Kirikiri Z 的扩展
Kirikiri Z 的插件系统有改进:
- 新增硬件加速相关插件接口(OpenGL ES)
- 内置了更多功能作为"伪插件"(Live2D、视频解码)
- 模拟器兼容性更好
开发自己的插件
如果你是 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」。版本不匹配时:
- 轻微不兼容:插件加载了但调用报错
- 严重不兼容:引擎直接崩溃(Access Violation)
找插件时注意版本号。