3.6 KiB
3.6 KiB
剧情编辑器
基于 Vue Flow 的可视化交互式电影剧情编辑工具,通过拖拽节点和连线来编排游戏场景和分支。
启动
npm install
npm run dev
浏览器打开 http://localhost:5173/editor/
界面布局
┌──────────────────────────────────────────────────┐
│ 工具栏: 新建 / 导入导出 / 加载示例 / 起始场景 │
├────────────────────┬──────────────┬───────────────┤
│ │ │ │
│ 场景节点图 │ 属性编辑面板 │ 视频预览 │
│ (Vue Flow) │ │ │
│ │ │ │
└────────────────────┴──────────────┴───────────────┘
基本操作
场景节点图(左侧)
- 点击节点 → 右侧面板打开该场景的属性编辑器
- 拖拽节点端口到另一个节点 → 创建"选项"连线(自动生成选项文本)
- 缩放/平移:鼠标滚轮缩放,拖拽画布平移
新建场景
点击工具栏 + 新场景,生成一个新节点并自动选中。
编辑场景(右侧面板选中节点后)
| 字段 | 说明 |
|---|---|
| 视频路径 | 该场景对应的视频文件,如 /videos/scene_1.mp4 |
| 字幕路径 | 可选 WebVTT 字幕文件,如 /subtitles/scene_1.vtt |
| 默认下一场景 | 没有选项或选项超时后的自动跳转目标 |
| QTE | 快速反应事件:触发时间、提示文字、按键、限时、成功/失败跳转 |
| 选项列表 | 玩家可见的分支选项,包含文字、目标场景、限时 |
选项管理
- 点击
+ 添加选项增加新选项 - 填写选项文字和目标场景
- 可设置限时(秒),超时自动选第一项
- 点 × 删除选项
删除场景
编辑器面板标题栏点击 🗑 按钮,会同时清理其他场景中指向该场景的引用。
数据管理
加载示例
点击 加载示例 载入 public/scenes/demo.json,了解数据格式。
导入 / 导出 JSON
- 导出:将当前编辑的剧情导出为 JSON 文件
- 导入:从 JSON 文件加载剧情数据
JSON 格式与游戏引擎的数据结构一致:
{
"startScene": "scene_1",
"variables": {},
"scenes": {
"scene_1": {
"id": "scene_1",
"videoUrl": "/videos/scene_1.mp4",
"choices": [
{ "text": "进入房间", "targetScene": "scene_2" }
],
"nextScene": "",
"subtitleUrl": "",
"onEnter": []
}
}
}
导出的 JSON 可直接放入 public/scenes/ 目录供游戏引擎加载。
场景数据结构
interface SceneNode {
id: string // 唯一标识
videoUrl: string // 视频文件路径
subtitleUrl?: string // 字幕文件路径(可选)
choices?: Choice[] // 选项列表
qte?: QTEDefinition // QTE 快速反应事件(可选)
nextScene?: string // 默认跳转场景
onEnter?: Effect[] // 进入场景时触发的效果
}
interface Choice {
text: string // 选项文字
targetScene: string // 目标场景 ID
conditions?: Condition[] // 显示条件(可选)
effects?: Effect[] // 触发效果(可选)
timeLimit?: number // 限时秒数,0=不限
}