VNLEWIKI创作故事,连接世界。
简体中文
VNLE 使用手册

认识编辑器

入口

场景起点是场景的默认开始位置。命名入口可跳转到场景中的其他位置。点击“播放故事”旁的箭头,即可从指定入口开始测试。

  • 设为场景起点
  • 添加入口
  • 移除入口
  • 从入口开始播放

在空场景中创建或粘贴的第一个节点会成为场景起点。你可以将起点设为其他节点。“移除入口”仅移除额外入口,不会删除节点。

Characters、Variables 和 Game actions 左侧始终显示可搜索的列表,右侧显示详情。选择条目即可编辑。角色搜索也会查找分组和上级分组名称。三个图标分别按名称字母顺序、上级分组(默认)或角色分组显示,列表下方显示总数。

逐步构建你的故事。每个工具都先介绍一个简单场景,再给出示例项目中的实际用法。可以用菜单直接跳到所需工具。

操作名称与英语界面一致。Welcome、Received 等名称属于示例项目。 《港口的钥匙》:下载并跟着操作

移动章节和场景

在侧栏中将章节拖到新位置。将场景拖到另一场景之前或之后,亮线会标示插入位置。将场景放到章节上,会追加到该章节末尾,即使章节处于收起状态也可以。也可以点击章节或场景的移动手柄,选择目标和位置。Undo 可撤销移动,Save 会保存顺序。这只改变项目组织方式,不改变连接或游戏逻辑。

重命名或删除章节和场景

在侧边栏中选择场景或点击章节名称。当前行和鼠标悬停的行会显示三点菜单及拖动手柄。点击三点菜单直接进入编辑窗口,可修改名称或章节图片,也可在此删除内容。Delete scene 会删除场景及其节点和入口;Delete chapter 还会删除章节内所有场景。每次删除前都会要求确认,显示对象名称,删除章节时还会显示准确的场景数。Cancel 不会更改任何内容。

确认窗口还会列出受影响的跳转、子故事调用和导出配置。从其他场景发起的跳转会保留,但之后需要设置新的目标。不再包含任何入口的导出配置会被删除。共享文本、图片、角色和资源会保留。Undo 会同时恢复删除的内容及其引用。请保存你希望保留的版本。

章节和场景

章节用于整理故事,每个场景包含一段互相连接的对话流程。

简单的例子

以一段旅程为例:点击 Chapters 旁的加号创建 Arrival 章节,再用 Add scene 创建 At the gate 和 At the inn 场景。打开场景来编写会话。列表顺序不会自动连接会话;故事如何在场景之间推进,由你来决定。

试一试:《港口的钥匙》

打开 Harbour,米拉的会话从这里开始。Mira’s request 包含她的简短请求,Warehouse 包含仓库中的会话。在左侧搜索 Warehouse 即可打开该场景。

打开示例项目和完整教程 →

画布和搜索

分步指南

画布将故事显示为互相连接的方框,称为节点。连接线表示每一步之后会发生什么。

简单的例子

创建两句对话:“你好!”和“很高兴见到你。”点击第一句右侧的 Next,再点击第二句左侧的输入端口。连接线表示第一句之后会显示第二句。拖动画布背景可以移动视图。

试一试:《港口的钥匙》

打开 Harbour,使用节点工具栏中的放大镜搜索 Welcome。选择结果后,VNLE 会将问候节点居中显示。沿着连接查看米拉的对话流程。

打开示例项目和完整教程 →

对话

对话节点显示角色台词或旁白,可以指定角色和表情。

简单的例子

让守卫说:“城门将在日落时关闭。”选择“对话”,输入台词并选择说话角色。将下一步连接到结束节点。在对话节点上选择“设为场景起点”,然后播放故事,查看第一句台词。

试一试:《港口的钥匙》

Welcome 的说话角色为 Mira。后面的 Your remaining gold 通过绑定到 Gold 的占位符显示金币数量。购买成功后显示 5,而不是 10。如果直接在台词中写死数字,它不会自动更新。

打开示例项目和完整教程 →

选项

选项节点向玩家提供多个回答,每个回答都可以通向不同的故事分支。

简单的例子

守卫问“你想去哪里?”创建 Choice,添加“去市场”和“去旅店”两个回答,并将各回答连接到对应对话。游玩时由玩家选择路线,没有连接的回答无法继续推进。

试一试:《港口的钥匙》

打开 Choose a reply,一个选项通向购买,另一个通向告别。请测试两条路线。选项也可以带条件,并需要指定没有任何选项可用时如何处理。

打开示例项目和完整教程 →

条件

条件节点检查一个值,自动进入 Yes 或 No 路径,例如判断玩家是否有足够的金币。

简单的例子

渡船人收费三枚金币。在 Variables 中创建数值变量 Coins,添加 Condition 检查 Coins 是否至少为 3。将 Yes 连接到“请上船!”,No 连接到“你的钱不够。”。系统会自动选择路径,但这次检查不会扣除金币。

试一试:《港口的钥匙》

Enough gold? 检查 Gold ≥ 5。Yes 通向 Pay five gold,No 通向 Not enough gold。分别用 10 枚和 2 枚金币测试两条连接。

打开示例项目和完整教程 →

修改变量

此节点修改保存的值,例如扣除金币,或记录玩家已经接受任务。

简单的例子

玩家说服了守卫。在 Variables 中创建布尔变量 GateOpen,初始值设为 false。选择 More blocks → Change variable,选中 GateOpen 并将其设为 true,再将 Next 连接到后续对话。之后的 Condition 可以使用这个值。变量变更本身不会额外显示一句对话。

试一试:《港口的钥匙》

Pay five gold 从 Gold 中扣除 5,并通过 QuestAccepted 记录已接受任务。后面的 Remember the key 将 HasKey 设为 true。如果交付失败,Refund the payment 会退款。只有钥匙成功交付后,购买才应算作成功。

打开示例项目和完整教程 →

命令

分步指南

游戏动作请求游戏执行某个操作,例如给予物品。对话会等待游戏返回结果。在编辑器预览中,你需要自行选择测试结果。

简单的例子

假设打开宝箱应将一把剑加入背包。在 Game actions 中定义 Give item,添加物品输入参数,以及 Received 和 No room 两个结果。在 Game action 节点中选择它,并连接两条路径。编辑器中由你选择测试结果;实际游戏中必须将该动作接入背包系统,VNLE 不会自行创建背包。

试一试:《港口的钥匙》

Receive the key 使用 Give item,并传入 Warehouse key。项目定义的结果是 Received 和 Declined,请测试两种响应。附带的示例游戏会实际处理物品交付;拒绝接收时会进入退款流程。

打开示例项目和完整教程 →

跳转

跳转节点让对话从另一个入口继续,该入口可以位于其他场景中。

简单的例子

城门对话结束后,故事应在市场继续。先在市场场景创建入口,再通过 More blocks 添加 Jump,并将该入口设为目标。故事会从那里继续,不会自动返回城门。

试一试:《港口的钥匙》

Go to the warehouse 跳转到 Warehouse 场景的仓库入口,并检查玩家是否持有钥匙。HasKey 等保存的值不会因切换场景而丢失。

打开示例项目和完整教程 →

调用子故事

调用节点让故事暂时进入另一段对话,结束后可以回到原处继续。

简单的例子

如果多段对话需要提供同一份路线说明,可以把说明写在单独的场景中。选择 More blocks → Call substory 并指定其入口,将 After returning 连接到原对话的后续节点。用 Return 结束路线说明,即可重复调用。

试一试:《港口的钥匙》

Ask Mira 通过 mira_request 调用 Mira’s request。米拉介绍仓库后,返回 Already have the key?。请从 Harbour 开始,体验完整的调用和返回流程。

打开示例项目和完整教程 →

返回

Return 结束这段子流程,并回到调用它的对话。调用时已经记下了返回后的继续位置。

简单的例子

路线说明结束后,添加 Return 并将最后一句对话连接到它。原对话会从调用后的继续位置恢复。如果之前没有调用,就没有可返回的位置。普通对话结束请使用 End。

试一试:《港口的钥匙》

在 Mira’s request 中,Return to the question 结束子流程。请从 Harbour 的起点游玩,而不是直接启动子故事,这样流程才能知道返回哪里。

打开示例项目和完整教程 →

结束

End 结束当前对话流程,随后游戏可以关闭对话框。

简单的例子

商人说“明天见!”。创建 End,并将告别对话的 Next 输出连接到它,对话便会结束。这不必结束整个游戏,游戏可以在之后恢复玩家移动。

试一试:《港口的钥匙》

Return to the game 会结束仓库对话。虽然自定义名称含有 Return,它实际上是 End 节点,不是 Return 节点。请查看图标和节点类型,名称本身不决定行为。

打开示例项目和完整教程 →

角色

分步指南

在这里定义说话角色的姓名、立绘和表情,之后在对话中选择该角色。

简单的例子

守卫的对话需要显示姓名和立绘。打开 Characters,创建 Ada 并添加立绘,再在对话的 Speaker 中选择 Ada。可以为惊讶表情添加另一张图片,并在对应台词中选择该表情。

试一试:《港口的钥匙》

在 Characters 中打开 Mira,再打开 Welcome,即可看到角色与对话的关联。不需要为每句台词重复输入姓名和图片。

打开示例项目和完整教程 →

资源

分步指南

资源描述故事中反复出现的物品、任务和地点。创建一次后,就能在游戏动作中选择使用。资源说明“它是什么”,动作则请求游戏“对它做什么”。

简单的例子

假设游戏中有一把 Old key。在 Resources 中将其创建为物品,填写名称和描述,之后便可将其选为游戏动作的输入参数。该条目只是描述钥匙,仍需由游戏中的动作将它放入背包。

试一试:《港口的钥匙》

你会找到 Warehouse key 物品、Open the warehouse 任务和 Old warehouse 地点。Receive the key 引用的是同一把钥匙,因此即使名称被翻译,游戏仍能识别该物品。

打开示例项目和完整教程 →

变量

分步指南

变量是带名称的值,用来记录数字、文本或是非状态。例如 Gold 记录金币,HasKey 记录玩家是否有钥匙。

简单的例子

故事需要记住玩家是否帮助过守卫吗?在 Variables 中创建布尔变量 HelpedGuard,初始值为 false。帮助之后,用 Change variable 将其设为 true,后续的 Condition 就可以选择更友好的问候。金币数量使用数值,昵称使用文本。

试一试:《港口的钥匙》

Gold 初始为 10,HasKey、QuestAccepted 和 QuestComplete 初始均为 false。从购买条件到 Your remaining gold 跟踪 Gold:检查、修改和显示使用的是同一个保存的值。

打开示例项目和完整教程 →

运行并检查故事

分步指南

Preview 让你在编辑器内试玩故事。Project check 帮助查找缺失连接等问题。

简单的例子

要测试两个回答,请选择 Play story。用测试工具在选项前设置书签,再返回尝试另一个回答。测试值不会修改项目。如果编辑了对话,请重新开始预览以载入更改。Project check 可帮助查找缺失连接等问题。

试一试:《港口的钥匙》

从 harbour_start 启动 Harbour,分别测试金币充足和不足时购买。在游戏动作中测试 Received 和 Declined:金币是否正确扣除或退还?玩家是否只有在交付成功后才得到钥匙?

打开示例项目和完整教程 →

保存与共享

分步指南

Save 将工作保存在本机。Export 创建可分享的数据包。项目菜单中的团队对话框用于与 GitHub 交换更改。

简单的例子

Save 将工作保存在本地项目中。如需分享副本,打开左上角项目菜单并选择 Export entire project as ZIP。这两种操作都不会向团队发送更改。使用 GitHub 时,请在团队对话框中先比较,再发送。

试一试:《港口的钥匙》

下载并解压示例,打开其中的项目文件夹。编辑 Welcome,保存并重新打开项目,文本仍会保留。ZIP 导出包含可编辑副本;故事有效时,也会包含游戏所需文件。

打开示例项目和完整教程 →

本地化

将同一个故事翻译成多种语言,连接、选项和保存的值仍然共用。

简单的例子

假设一句对话在英语中为“Good morning!”,德语中为“Guten Morgen!”。打开 Localization,添加目标语言,选中该行并输入译文。用两种语言试玩:只需翻译文本,无需重新构建对话。

试一试:《港口的钥匙》

示例包含英语和德语。请对比米拉的问候,保留剩余金币的占位符,让两种语言都能显示当前数量。Translation package 可将文本导出为 Excel 文件,交给译者处理。

打开示例项目和完整教程 →

管理角色与资源

角色、资源、变量和游戏动作均采用左侧列表、右侧详情的布局,搜索位于列表上方。未选择条目时,详情区域仍然可见,并说明下一步操作。

在 Resources 顶部选择 Quests、Items 或 Locations。三段式筛选可显示全部、已使用或未使用条目。选择左侧名称,在右侧编辑文本并查看用途。在 Characters 中,三段式切换用于按字母、上级分组或角色分组显示,搜索也包含分组名称。

点击左侧菜单的 Story,或顶部的 Story editor,返回故事编辑器。左侧菜单底部的 Project check 可打开故事中的具体问题。