跳转到内容

锚点与修饰符体系 (Anchor-Decorator)

本页遵循 Ktory 设计原则,实现边界与长期目标以该原则及其权威文档为准。

锚点形成可执行的拍或选项;修饰符 .tag(args) 为其携带参数。拍负责确定剧情停在哪里,演出效果与执行时长由宿主实现。

书写方式 解析结构 含义
角色: 台词 TextStep 有说话人的文本拍
: 旁白 或无保留前缀的正文 TextStep 匿名文本拍,Speaker 为空
#do,下方无子项 DirectiveStep 无文本指令拍,仍会停止
#choice,下方有缩进的 * / + 子项 ContainerStep 选项容器

# 行由子项结构区分指令与容器;choice 不是解析器保留关键字。自定义名称的扩展支持需要核查实际运行时,不能只凭名称就假定业务 Handler 已存在。

爱丽丝: 真是不可思议……
.expression(surprised)
.next(0.5)
#do .sfx("door")

修饰符吸附到所属锚点;分支正文和容器子项依缩进划定。.tag 与 .tag() 都无参,.tag(0) 则明确传递整数零。参数可以按位置或名称传入,例如 .bgm("main", volume=0.6)。这些名称不会自动提供音频或立绘实现。

配套表现时序约定以秒为单位:.next(0.5) 从文字显示完毕后停留半秒并请求推进;.skippable(false, 3) 只限制前三秒的文字快显。核心解析这些声明,宿主或配套表现控制器落实时序。

.wait(t) 只规定全文显示后的最低停留时间,不会自动推进。期间点击直接丢弃,到期后须重新点击;省略参数的 .wait 使用预估阅读时间。.next(t) 在全文显示后计时并请求自动推进,省略参数等于 0 秒。

两者同时计时,书写顺序不影响结果:.wait(2).next(2) 与 .next(2).wait(2) 都是 2 秒后自动推进;.wait(2).next(5) 在第 5 秒自动推进,但第 2 秒起可点击提前继续;.wait(5).next(2) 必须等到第 5 秒。.wait.next 表示预估阅读停留结束后自动推进。#AUTO 或宿主自动播放也可提供自动推进策略,但仍须遵守最低停留。

.skippable(false[, t]) 锁定期间的点击同样直接丢弃,不在解锁或全文显示后补执行。

支持 *斜体*、**粗体**、~~删除线~~ 和 [书桌]{desk}。当前脱糖输出为标签字符串,例如 <ruby="desk">书桌</ruby>,并非独立的 Ruby 结构化对象。原生标签也会透传,具体标签能否显示由渲染器决定。

使用反斜杠转义需要按字面显示的保留字符。不要把块级 Markdown 标题、列表或代码围栏当作对白结构。跨 Web 与 Unity 的富文本显示需要分别验证。