docs: 添加 Yarn 节点类型规范文档
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
# Yarn 节点类型规范
|
||||
|
||||
## 1. 节点类型与跳转权限
|
||||
|
||||
|
||||
| 标签 | 职责 | 跳转权限 | 内容限制 |
|
||||
| ---------- | ---- | ----------------------- | ---------------------- |
|
||||
| `hub` | 导航中枢 | **可 `<<jump>>` 多个节点** | 仅选项骨架,无叙事文本 |
|
||||
| `linear` | 线性演出 | **仅可 `<<jump>>` 到一个节点** | 可有叙事文本和演出指令 |
|
||||
| `detour` | 内容片段 | **禁止 `<<jump>>`** | 可有叙事文本、画面指令、局部选项 |
|
||||
| `function` | 功能函数 | **禁止 `<<jump>>`** | **禁止任何文字内容,仅 Command** |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. 命名规则
|
||||
|
||||
|
||||
| 节点标签 | 命名示例 | 规则 |
|
||||
| ----------------- | ----------------------- | ----------------- |
|
||||
| `hub` | `教室`、`天台`、`走廊` | 场景名或状态名 |
|
||||
| `linear` | `海边`、`开场动画` | 事件名或过场名 |
|
||||
| `detour` | `观察`、`趴回去再睡会`、`女孩` | 中文动宾/名词短语 |
|
||||
| `function`(只读) | `展示山_Func` | **`_Func` 后缀**;不修改 `$` 变量 |
|
||||
| `function`(写入) | `捡起矢车菊_Set` | **`_Set` 后缀**;会修改 `$` 变量 |
|
||||
| `function`(初始化特例) | `InitParams` | **无后缀**;仅 declare |
|
||||
| `Start`(引擎入口特例) | `Start` | **固定命名,不属于四类标签** |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. 各类型详细规范
|
||||
|
||||
### 3.0 Start 节点(引擎入口)
|
||||
|
||||
Yarn Spinner 默认从名为 `Start` 的节点开始运行。它**不属于** hub / linear / detour / function 四类,**不加**上述 `tags`,职责仅是启动流程,不写叙事。
|
||||
|
||||
```yarn
|
||||
title: Start
|
||||
---
|
||||
<<detour InitParams>>
|
||||
<<jump 开场>>
|
||||
===
|
||||
```
|
||||
|
||||
**约束清单:**
|
||||
|
||||
- **固定命名**:节点 title 必须为 `Start`
|
||||
- **极简**:仅初始化 + 跳转到首个 linear(或首个 hub);不写 `<i>`、对话、选项
|
||||
- **InitParams**:通过 `<<detour InitParams>>` 调用;变量声明集中在 `InitParams` function 节点,不散落在 Start
|
||||
- **唯一出口**:末尾仅一个 `<<jump>>`,指向正式剧情入口(通常为 linear)
|
||||
|
||||
叙事、演出、分支选项一律放在 `Start` 之后的首个 linear(如 `开场`)及后续节点中。
|
||||
|
||||
---
|
||||
|
||||
### 3.1 hub 节点
|
||||
|
||||
唯一拥有多出口跳转权的节点类型,负责场景导航。
|
||||
|
||||
```yarn
|
||||
title: 天台
|
||||
tags: hub
|
||||
---
|
||||
<<set_global_param dream1scene 3>>
|
||||
|
||||
->检查
|
||||
<<detour 天台检查>>
|
||||
<<jump 天台>> # 允许:返回自身 hub
|
||||
->上去 <<if $gameStage<3>>
|
||||
<<detour 上去_没有门>>
|
||||
<<jump 天台>> # 允许:返回自身 hub
|
||||
->上楼
|
||||
<<hide_sprite>>
|
||||
<<jump 走廊>> # 允许:跳转到其他 hub
|
||||
->进入天文台 <<if $gameStage==3>>
|
||||
<<hide_sprite>>
|
||||
<<jump 天文台>> # 允许:跳转到其他 hub
|
||||
===
|
||||
```
|
||||
|
||||
**约束清单:**
|
||||
|
||||
- 仅存放选项骨架和流程骨架,不写叙事文本
|
||||
- 选项目标为 detour(内容)或 `<<jump>>` 到其他 hub/linear
|
||||
- 循环回自身时必须显式 `<<jump 自身名>>`
|
||||
|
||||
---
|
||||
|
||||
### 3.2 linear 节点
|
||||
|
||||
仅允许一个出口,用于强制剧情推进。
|
||||
|
||||
```yarn
|
||||
title: 海边
|
||||
tags: linear
|
||||
---
|
||||
<<stop_music event:/Music/mus_dream1 fade>>
|
||||
<<hide_sprite>>
|
||||
<i>你的身体仿佛正在黑暗中褪去。</i>
|
||||
|
||||
# ... 大量线性叙事 ...
|
||||
|
||||
<<hide_dialog>>
|
||||
<<wait 2>>
|
||||
<<play_timeline 醒来>>
|
||||
|
||||
<<NextYarn>> # 仅一个出口
|
||||
===
|
||||
```
|
||||
|
||||
**约束清单:**
|
||||
|
||||
- 无分支选项(或仅有伪选项无实际分流)
|
||||
- 末尾只能有一个 `<<jump>>` 目标(或 `<<NextYarn>>`)
|
||||
- 可包含演出指令和叙事文本
|
||||
|
||||
---
|
||||
|
||||
### 3.3 detour 节点
|
||||
|
||||
禁止任何 `<<jump>>`,执行完毕后控制权交还调用方。
|
||||
|
||||
```yarn
|
||||
title: 天台检查
|
||||
tags: detour
|
||||
---
|
||||
->窗户
|
||||
<i>天文台下面有一排窗户...</i>
|
||||
->地上 <<if $gameStage < 3>>
|
||||
<i>地上排布着黑乎乎脏兮兮的隔热砖...</i>
|
||||
<<if $scj==0>>
|
||||
<<detour 捡起矢车菊_Set>>
|
||||
<<endif>>
|
||||
->远眺
|
||||
<<detour 展示山_Func>>
|
||||
===
|
||||
```
|
||||
|
||||
**约束清单:**
|
||||
|
||||
- **禁止任何 `<<jump>>`**
|
||||
- 允许内部嵌套选项(仅限局部选择,不影响全局导航)
|
||||
- 允许调用其他 detour(`<<detour 子内容>>`)和 function(`<<detour 展示山_Func>>`)
|
||||
- 负责叙事文本、画面指令、局部状态变更
|
||||
|
||||
---
|
||||
|
||||
### 3.4 function 节点
|
||||
|
||||
纯指令容器,零文本。统一 `tags: function`,按是否修改 `$` 变量区分后缀:
|
||||
|
||||
| 后缀 | 职责 | 修改 `$` 变量? |
|
||||
| ---- | ---- | ------------- |
|
||||
| `_Func` | 只读:根据当前变量输出演出 | 禁止 |
|
||||
| `_Set` | 写入:变更进度/状态(可含演出指令) | 允许 |
|
||||
| 无后缀 | `InitParams`:全局变量声明 | 仅 `<<declare>>` |
|
||||
|
||||
`set_global_param`(场景、音量等展示上下文)不计入「修改 `$` 变量」。
|
||||
|
||||
**只读示例(`_Func`)**
|
||||
|
||||
```yarn
|
||||
title: 展示走廊_Func
|
||||
tags: function
|
||||
---
|
||||
<<if $gameStage==0>>
|
||||
<<show_sprite "D1S走廊1">>
|
||||
<<elseif $gameStage==1>>
|
||||
<<show_sprite "D1S走廊2">>
|
||||
<<else>>
|
||||
<<show_sprite "D1S走廊3">>
|
||||
<<endif>>
|
||||
===
|
||||
```
|
||||
|
||||
**写入示例(`_Set`)**
|
||||
|
||||
```yarn
|
||||
title: 捡起矢车菊_Set
|
||||
tags: function
|
||||
---
|
||||
<<set $scj=1>>
|
||||
<<if $gameStage==0>>
|
||||
<<show_sprite "D1S天台-地板1">>
|
||||
<<else>>
|
||||
<<show_sprite "D1S天台-地板2">>
|
||||
<<endif>>
|
||||
<<set $gameStage=1>>
|
||||
===
|
||||
```
|
||||
|
||||
**特例:InitParams**
|
||||
|
||||
`InitParams` 的职责是全局变量声明与初始值设定,属于项目启动时的根级配置,不加 `_Func` / `_Set` 后缀。
|
||||
|
||||
```yarn
|
||||
title: InitParams
|
||||
tags: function
|
||||
---
|
||||
<<declare $started=false>>
|
||||
<<declare $gameStage=0>>
|
||||
<<declare $ppStage=0>>
|
||||
===
|
||||
```
|
||||
|
||||
**约束清单:**
|
||||
|
||||
- **零文字**:禁止任何对话、旁白、选项文字
|
||||
- **零跳转**:禁止任何 `<<jump>>`
|
||||
- **纯 Command**:仅 `<<declare>>`、`<<set>>`、`<<set_global_param>>`、`<<show_sprite>>`、`<<play_sfx>>` 等指令
|
||||
- **后缀语义**:`_Func` 禁止 `<<set>>` / `<<declare>>`;`_Set` 必须含至少一处 `$` 变量写入
|
||||
- **标签大写**:`tags: function`(首字母大写)
|
||||
|
||||
---
|
||||
|
||||
## 4. 调用关系图
|
||||
|
||||
```
|
||||
Start ──<<detour>>──> InitParams
|
||||
│
|
||||
│ <<jump>>
|
||||
▼
|
||||
linear(如:开场)──>> hub / linear / NextYarn
|
||||
|
||||
┌─────────┐ <<jump>> ┌─────────┐
|
||||
│ hub │ ─────────────────> │ hub │
|
||||
│ (多出口) │ │ (多出口) │
|
||||
└────┬────┘ └─────────┘
|
||||
│
|
||||
│ <<detour>> ┌─────────┐
|
||||
└──────────────>│ detour │ ──>> 可嵌套调用其他 detour
|
||||
│(无jump) │
|
||||
└────┬────┘
|
||||
│
|
||||
▼
|
||||
自然返回调用方 hub
|
||||
|
||||
┌─────────┐ <<jump>> ┌─────────┐
|
||||
│ hub │ ─────────────────>│ linear │
|
||||
│ (多出口) │ │(单出口) │
|
||||
└─────────┘ └────┬────┘
|
||||
│
|
||||
│ <<jump>> 到下一 hub/linear/NextYarn
|
||||
▼
|
||||
|
||||
┌─────────┐
|
||||
│function │ 被 hub/detour/linear 通过 <<detour>> 调用
|
||||
│(零文本) │
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 快速检查表
|
||||
|
||||
|
||||
| 检查项 | Start | hub | linear | detour | function |
|
||||
| --------------- | ----- | ----- | -------- | -------- | ---------------------- |
|
||||
| 是否包含选项骨架? | 禁止 | 必须 | 禁止 | 仅局部 | 禁止 |
|
||||
| 是否包含叙事文本? | 禁止 | 禁止 | 允许 | 允许 | **禁止** |
|
||||
| 是否有 `<<jump>>`? | 仅一个出口 | 允许多出口 | 仅一个出口 | **禁止** | **禁止** |
|
||||
| 后缀是否正确? | - | - | - | - | **`_Func` / `_Set`,InitParams 无后缀** |
|
||||
| 标签是否正确? | 无 tags | `hub` | `linear` | `detour` | `function` |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. 设计原则
|
||||
|
||||
- **Start 负责启动**:InitParams + 跳转入口,与叙事彻底分离
|
||||
- **hub 负责路由**:打开任意 hub 即可一览场景结构,无需滚屏
|
||||
- **linear 负责推进**:无分支过场,单向流动
|
||||
- **detour 负责填充**:内容抽离后可被多处复用,修改不影响整体结构
|
||||
- **function 负责纯逻辑**:零文本保证指令安全;`_Func` 只读、`_Set` 写入,后缀一眼识别副作用
|
||||
|
||||
Reference in New Issue
Block a user