插件
通过可安装的插件扩展 NarraLeaf Studio 及其构建的游戏
插件是一个包含 manifest.json 和一到两个预打包入口文件的文件夹。它可以向 Studio 添加编辑器面板、操作、快捷键、蓝图节点、控件和语言包,并附带在你构建的游戏中运行的游戏侧代码
插件有两个入口目标,一个插件可以声明其中之一或两者:
| 目标 | 运行于 | API | 用途 |
|---|---|---|---|
studio | 编辑器(工作区窗口) | narraleaf-studio/plugin | 面板、操作、快捷键、蓝图节点的编辑器元数据、控件、语言包 |
runtime | 游戏(开发模式、预览、生产环境) | narraleaf-studio/runtime | 蓝图节点执行、控件渲染、游戏侧逻辑 |
蓝图节点需要两个目标才能在发布的游戏中工作:studio 入口注册它的编辑器元数据,runtime 入口注册游戏运行到它时执行的代码。你只需在一个共享模块中编写一次定义,然后从每个入口分别注册——参见 创建第一个插件
创建第一个插件
从空文件夹到已安装的插件:清单、入口、蓝图节点、面板、本地化和打包
清单
每一个字段、完整的 contributes 接口,以及为什么大多数权限是派生出来的、而不是手写的
API 参考
studio 与 runtime 两个接口上的每个方法,附带示例和需要留意的细节
Studio 接口
插件在编辑器中能触碰到的一切:服务、ui 组件套件,以及提权能力
Runtime API
受能力控制的游戏接口:每项声明过的能力在 app.game 上换来什么
构建时依赖
Studio 在构建时下载、校验并缓存的外部二进制文件
安装插件
从商店或文件夹安装、批准权限,并保持插件更新
项目依赖
项目记录了它用到哪些插件,以及构建出的游戏里会带上哪些
能力是声明出来的,不是被发现的
插件的游戏侧代码除了注册节点和控件之外还能触及的任何东西——存储、故事变量、存档、覆盖层、原生子进程——都必须在 contributes 中声明。Studio 从这份声明派生出安装时的权限提示;而未声明的能力在 API 对象上根本不存在,而不是一次会失败的调用。在编写 runtime 入口之前,先读一遍能力模型;它决定了其余的一切
API 是纯类型的
narraleaf-studio 是一个纯类型包。它提供 narraleaf-studio/plugin 和 narraleaf-studio/runtime 的声明;实现由 Studio 在加载时提供。将它作为开发依赖添加,并在打包器中把这两个模块说明符标记为 external(模板已为你配置好)
yarn add -D narraleaf-studio插件不在沙箱中运行。已安装的插件拥有与 Studio 本身相同的访问权限,其游戏侧代码运行在玩家的机器上。只安装你信任的插件。对于插件声明的、超出默认接口范围的任何能力,Studio 会在安装时显示权限提示