新建扩展
进入 个性化 → 项目设置。在左侧扩展树顶部点击「新建扩展」,填写名称、作者和描述。
新建窗口底部的「安装位置」由父目录 + 扩展目录名组成,并实时显示最终路径。默认父目录是「文稿/AVG-Extensions」,也可以改到自己的代码仓库。
创建完成后,扩展默认只有:
my-extension/
├── extension.json
├── .gitignore
└── ui/
这是一个可以直接工作的纯界面扩展。它没有 src/、package.json 和 dist/,也不需要安装依赖。
先制作一份界面
展开扩展下的「界面」分组,点击新增按钮并输入显示名称。Studio 会创建界面文档并打开可视化编辑器。
你可以放置文字、图片、按钮、设置控件和存档格子,配置变量、点击动作与动画。完成后:
- 由另一份可视化界面的点击动作打开;
- 在「游戏系统」中绑定为标题、存档、设置等系统界面;
- 或继续初始化程序,为界面补充自定义逻辑。
编辑器完整说明见可视化界面编辑器。
按需初始化程序
选择扩展下的「程序」。尚未初始化时,Studio 会展示两条路径:继续用可视化界面,或初始化程序。
点击初始化后会补充:
my-extension/
├── extension.json
├── package.json
├── tsconfig.json
├── vite.config.ts
├── README.md
├── sdk/
├── src/
│ ├── index.tsx
│ └── welcome-ui.tsx
└── dist/
└── index.js
extension.json 也会加入 entry,表示这个扩展包含需要加载的程序。
安装与构建
在扩展目录运行:
npm install
npm run build
持续开发时使用:
Vite 会在源码变化后重新生成 dist/index.js,Studio 检测到变化后刷新程序预览。
当前脚手架没有 npm run dev 命令。监听构建请使用 npm run watch。
在 Studio 中构建
本地程序扩展可以在扩展树中右键选择「构建扩展(自动装依赖)」。Studio 会:
- 按扩展的锁文件选择包管理器;
- 同步依赖;已经安装时会快速完成;
- 执行构建脚本;
- 刷新项目发行物和程序预览。
首次同步依赖可能需要几分钟。构建进度和失败信息会显示在任务提示中;需要持续监听源码变化时,仍使用终端运行 npm run watch。
扩展日志
选择扩展树中的程序模块后,程序预览下方会显示这份扩展自己的日志。扩展代码中的 console.log、console.info、console.warn、console.error 和 console.debug 会实时出现在这里,不会和其他扩展的输出混在一起。
日志面板支持按级别筛选、复制单条日志和清空内容。开发界面、剧本方法或其他运行逻辑时,可以直接在 Studio 里查看执行结果和错误信息,不必先打开浏览器开发者工具。
编写程序模块
程序入口是 src/index.tsx。扩展类继承 Extension,按需声明界面、方法、设置和存档:
import { Extension, extension, method } from "@avg-studio/sdk";
@extension({ id: "my-tools", label: "我的工具" })
export class MyTools extends Extension {
static greet = method({
title: "打招呼",
schema: {
name: { type: "string", label: "名字", required: true },
},
run(ctx, params) {
ctx.variables.set("lastGreeting", `你好,${params.name}`);
},
});
}
接下来可以阅读:
导入已有扩展
扩展树顶部的「导入扩展」支持:
- 选择扩展文件夹;
- 选择
.zip 压缩包;
- 把文件夹或
.zip 拖到扩展树区域。
导入内容会复制成一份可编辑的本地扩展,原文件夹或压缩包不受影响。压缩包多套一层目录时会自动寻找真正的扩展根,__MACOSX、.DS_Store 等系统文件会被忽略。
同 id 的本地扩展会先询问是否覆盖;内置 avg.internal.* 扩展不能被覆盖。解压后的总体积上限为 300MB。
当前导入流程会校验 extension.json 和程序入口:如果清单没有显式 entry,会按 dist/index.js 检查。只有可视化 UI、没有程序产物的压缩包目前会被拒绝;在 Studio 内新建的纯界面扩展不受影响。
三种来源
| 来源 | 是否可编辑 | 管理方式 |
|---|
| 系统 | 否;系统界面可创建项目副本 | 不能停用或卸载 |
| 本地 | 是 | 可重新定位、停用或删除 |
| 市场 | 否 | 可按项目启用、停用或卸载 |
扩展启用状态跟随项目。同一台电脑上,A 项目启用并不会让 B 项目自动启用。
本地扩展可以在扩展树中右键选择「重命名」。重命名只修改面向创作者显示的名称,不改变稳定扩展 id、目录名、项目依赖或剧本引用;系统和工坊扩展不能重命名。
界面和程序较多时,可以分别折叠扩展树中的「界面」与「程序」分组。折叠只影响 Studio 当前显示,不会停用模块或改变构建结果。
移除与彻底删除
本地扩展提供两种不同的管理操作:
| 操作 | 本机源码 | 当前项目发行物 | 适用情况 |
|---|
| 从 Studio 移除 | 保留 | 保留可运行快照 | 暂时解除工作区关联,稍后可能重新定位或导入 |
| 彻底删除 | 移到系统废纸篓 | 删除 | 确认不再需要源码和项目依赖 |
彻底删除还会清理当前项目对该扩展的依赖关系。操作前先提交源码或制作备份;只想解决路径变更时,使用「重新定位」而不是删除。
市场扩展使用卸载流程;系统扩展不能移除或彻底删除。
项目发行物
扩展被项目启用后,Studio 会把运行所需的清单、界面和程序构建产物保存到项目内,形成一份项目发行物。预览和构建游戏时会使用这份发行物。
项目发行物会随项目目录一起复制和分享,但不会包含 src/ 等扩展源码。这样,其他创作者即使没有安装原扩展,也可以正常打开、预览和构建项目;只有继续修改扩展代码时才需要本机源码。
工程被移动后
Studio 记录本地扩展路径。文件夹被移动、改名或删除后,扩展会显示「路径不存在」。
源码仍在时,右键扩展选择「重新定位」,指向新目录即可。新目录中的 extension.json id 必须和原扩展一致。
可视化界面文档会随启用的扩展一起打包。带程序的扩展还需要存在有效的 dist/index.js;打包只包含运行所需的界面、清单和构建产物,不包含 src/ 源码。