Skip to content

对话与旁白 ​

本页属于 GenPy Ren'Py 学习路线。教程内容面向 Ren'Py 8.x,并在页面末尾连接到 GenPy 的对应工作流。

学习目标 ​

  • 了解“对话与旁白”在 Ren'Py 项目中的用途。
  • 能在一个最小项目里验证本章相关语法或工作流。
  • 知道发布前需要检查的常见风险,并能在 GenPy 中继续维护。

核心语法 ​

  • Character
  • say statement
  • narration
  • extend
  • voice_tag

可运行示例 ​

text
define e = Character("艾琳", color="#c8ffc8")
define m = Character("我", color="#88ccff")
define narrator = Character(None)   # 旁白(默认就有)

教程正文 ​

对话是视觉小说的主体。Ren'Py 用 say 语句 表达,用 Character 定义说话者。

1. say 语句 ​

text
"这是一句旁白(没有名字框)。"
e "这是角色 e 说的台词。"
"旁白者" "也可以临时用字符串当名字。"
  • 一行一句。
  • 前置一个角色变量或字符串=说话者;只有字符串=旁白。
  • 引号内同类引号要转义:e "他说\"你好\"。"

2. 定义角色 Character ​

用 define 在加载期定义角色对象:

text
define e = Character("艾琳", color="#c8ffc8")
define m = Character("我", color="#88ccff")
define narrator = Character(None)   # 旁白(默认就有)

常用参数:

参数作用
color名字颜色
image关联立绘标签(配合 say with attributes)
what_prefix / what_suffix给台词加前后缀(如自动加引号)
who_prefix / who_suffix给名字加前后缀
kind=nvl该角色用 NVL 全屏文本模式(见 21 章)
callback对话回调(语音、特效)
ctcclick-to-continue 图标
voice_tag语音标签,便于按角色静音配音
window_background该角色专属对话框背景

给台词自动加引号 ​

text
define e = Character("艾琳", what_prefix='“', what_suffix='”')
label start:
    e "你好。"   # 显示为:“你好。”

3. 文本插值与样式 ​

台词里可嵌入变量与文本标签:

text
$ name = "玩家"
e "你好,[name]!"            # 变量插值
e "这是{b}重点{/b}。"         # 文本标签(见第 10 章)
e "价格是 [[100]] 元。"        # 显示字面量 [ 用 [[

4. say 携带图像属性(强烈推荐) ​

如果角色用 image 关联了立绘标签,台词前可直接写属性,自动切换表情:

text
define e = Character("艾琳", image="eileen")
image eileen happy = "eileen_happy.png"
image eileen sad = "eileen_sad.png"

label start:
    show eileen happy
    e happy "我很开心!"     # 等价于 show eileen happy 再说话
    e sad "现在有点难过。"    # 自动切到 sad 表情

临时属性 @ ​

@ 后的属性只在这一句生效,说完恢复:

text
e happy "我一直很开心,"
e @ surprised "但突然被吓了一跳!"   # 仅此句 surprised
e "……然后又恢复开心。"            # 回到 happy

@ 与 = 组合可同时设临时与持久属性:e happy @ wink "..."。

5. extend(接续上一句) ​

extend 在同一对话框里把文字追加到上一句之后,常做停顿/渐显效果:

text
e "我在想……"
e "{w=0.5}" extend " 也许我们该出发了。"

6. 单行临时角色 ​

不想专门 define 时,可用字符串直接当名字:

text
"神秘人" "我们又见面了。"

或用 Character 即时构造:$ temp = Character("路人")。

7. 关键字参数微调单句 ​

say 语句可临时覆盖角色设置:

text
e "正常台词。"
e "这句更靠中间。" (what_xalign=0.5)

8. NVL 模式(全屏文本)速记 ​

text
define n = Character("旁白", kind=nvl)
label start:
    n "第一段,会累积在屏幕上。"
    n "第二段,叠加显示。"
    nvl clear        # 清屏,开始新一页

详见第 21 章。

常见坑 ​

  • 旁白与对话的区别只在于有没有前置说话者。
  • define(不变)vs default(可变存档量)别混;角色对象通常用 define。
  • 想显示字面 [/{,要写 [[ / {{。
  • 用 image= + say attributes 能让“说话即换表情”,比手动 show 简洁得多。

官方参考 ​

在 GenPy 里怎么做 ​

  • 在 GenPy 的代码模式中维护相关 .rpy 文件,先保持语法清晰,再逐步加入本章功能。
  • 用故事图谱、变量、校验或演出编辑器把“能运行”提升到“可维护”。
  • 导出前结合 Ren'Py Lint 和 GenPy 校验结果,确认脚本、素材和发布路径一致。

推荐继续阅读:

Built for GenPy creators.