安装插件
从商店或文件夹安装插件、批准其权限,并启用、禁用、更新或移除它
插件在启动器的 Plugins 里管理,那里有两个列表:Installed 和 Store。你可以从商店安装,也可以从磁盘上的任意文件夹安装

从商店安装
商店列出的是某个注册表索引里的插件。默认是官方的 NarraLeaf/Plugins 索引——一个经过策展的仓库,收录前会审查插件的行为和权限,而不只是看它能不能构建。想指向别处,改设置里的 Registry URL;留空即使用官方索引

点 Install 会下载发布包、完成安装,并直接进入权限提示。如果插件声明的 Studio 版本范围不包含你这个构建,按钮会被隐去、行上写明它需要哪个版本,而不是让安装到后面才失败
如果 Studio 连不上注册表,Store 列表会如实说明并提供重试。其他一切不受影响——Installed 列表和已经装好的插件在离线时照常工作
从文件夹安装
插件就是一个包含 manifest.json 和构建出的入口文件的文件夹。任何这样的文件夹都能安装,无论它来自发布 zip,还是直接来自你自己的 dist/
获取插件
下载插件的发布包(一个 .zip)并解压。你应当得到一个在顶层包含 manifest.json 的文件夹:
hello-1.0.0/
manifest.json
main.js
runtime.js从文件夹安装
在 Plugins 里选择 Install from folder,选中那个文件夹。Studio 会校验清单,并把插件复制到它自己的存储中
批准权限
Studio 会弹出提示,逐项列出插件请求的内容。审查后批准或拒绝。什么都不请求的插件会直接安装,不弹出提示
提示里都列了什么
这份提示不是插件作者写的一段自述——它的大部分内容是根据插件的声明计算出来的,因此不可能少报插件的能力
| 条目 | 来自 |
|---|---|
| 对某个路径的文件系统访问 | 作者写下的 filesystem 权限。仅影响编辑器 |
bash.execute 之类的 API 能力 | 作者写下的 api 权限。仅编辑器 |
| 游戏侧能力——存储、故事变量、存档、屏幕上的覆盖层、打包资源、游戏语言 | 插件在 contributes.runtimeCapabilities 中声明的每一项 |
| 会被打包进你所构建游戏的原生程序 | 每个已声明的 sidecar,附带它提供二进制的平台,以及它的指纹 |
| 构建时会下载的二进制 | 每个已声明的构建时依赖,附带它下载的主机名 |
后三类是派生出来的:Studio 从 contributes 计算它们,并拒绝任何试图手写它们的清单。这正是让「提示所说」无法偏离「插件实际能触及的东西」的机制——一项能力只在一处声明,而插件的 API 面就是照着同一份声明构造的。未声明的能力不只是没被提示,它根本不在插件的 API 对象上
批准前有两条值得再看一眼:
- 覆盖存档。 带
saves.write的插件能覆盖存档槽并读取存档,而读取会替换当前进度。快速存档类插件确实需要它,大多数插件不需要 - 随游戏附带的原生程序。 这是会随你发行的游戏抵达玩家机器的代码。Studio 在安装时以及打包时都会校验它的指纹,篡改过的包会安装失败而不是悄悄发行——但要不要带上它,由你决定
拒绝之后,插件仍然装着,但没有获得授权。它会保持禁用,列表把它标为 Needs authorization;点 Authorize 可以再次调出提示
插件不在沙箱中运行。一旦安装并启用,插件就拥有与 Studio 相同的访问权限,其游戏侧代码会运行在你玩家的机器上。只从你信任的来源安装插件,并在批准前阅读权限提示
更新
只要商店索引里有更新的版本,Installed 列表就会把该插件标为 Update available——不管你当初是不是从商店装的。更新会下载该版本并就地安装。你这个 Studio 构建吃不下的更新仍然会被告知,但只作为一条事实,而不是一个按钮
授权按插件版本记录,并连同你实际批准的那份权限集一起保存。请求不超过你已批准范围的新版本会继承该授权。增加了能力的版本会让派生权限集变宽,Studio 因此会重新提示,并展示变化了什么
插件的主版本号是它与使用它的项目之间的兼容性契约。跨主版本更新,会让按旧主版本创作的项目把它判为不兼容并跳过它——参见项目依赖
启用、禁用与卸载
- 启用 / 禁用——被禁用的插件仍保持已安装状态,但不会加载。它的编辑器贡献项和游戏侧代码都会停止。切换会在下一次工作区或游戏加载时生效
- 卸载——删除插件的文件
提供语言包的插件在启用时会把它的语言加入设置 → 语言;禁用或卸载它会移除这些语言。如果它提供的正是你当前使用的语言,Studio 会回退到英文;重新启用该插件后,你的选择会恢复
出问题时
如果插件的清单无效、入口文件缺失,或在加载时抛出错误,Studio 会在插件列表中把它标记为错误状态,并在那里显示相应信息。加载失败的插件绝不会阻止 Studio 启动,一个损坏的插件也不会影响其他插件
如果项目用到的某个蓝图节点或控件没有可用的提供方——插件缺失、被禁用,或某个版本不再声明它——预览和导出会失败,并给出一条指明该插件和类型的诊断信息,而不是发布一个带有无效节点的游戏
还有一种情况:某个插件只在一个项目里被跳过,在别处一切正常。那是版本不兼容,依赖面板会指名道姓。参见项目依赖