Diapig 对话模板·综合指南

Diapig 对话模板·综合指南
小猪之最Thepig说明
若超链接无法点击,可点击上方「文章」-「隧道」,再重新点击本文超链接,即可正常使用超链接。
提醒
下载外部对话编辑器 Diapig Editor:点击此处
Diapig 是一个适用于《原神》千星奇域(Genshin Impact Miliastra Wonderland)的剧情对话模板,支持打字机文本显示、分支选项跳转不同对话节点等功能。其对话内容依赖外部编辑器 Diapig Editor 进行编辑。
开始使用 Diapig
快速开始
说明
本节适用于准备使用 Diapig 制作全新奇域的奇匠。如果你在使用 Diapig 之前已经制作好了奇域的部分内容,请移步「以 gia 文件导入」。
如果你准备使用 Diapig 制作一个全新的奇域,推荐直接导入「Diapig模板存档.gil」。这是一个完整的存档文件,也就意味着你无需修改 Diapig 的任何内容即可开始搭建你的奇域。存档内还有部分示例对话的演示。
要导入存档,在《原神》中打开「我的奇域」,然后点击右下角「导入存档」并选择「Diapig模板存档.gil」即可。

以 gia 文件导入
提醒
本节内容的操作流程较为繁琐,若没有一定要使用 Diapig(或其他对话模板)的需求,建议奇匠先完成现有奇域的制作,在之后需要用到 Diapig(或其他对话模板)的奇域中按照「快速开始」的步骤构建奇域。
免责声明
若一定要在现有奇域中使用 Diapig,强烈建议先备份你的存档!Diapig 的作者不会承担使用 Diapig 时可能造成的存档损坏等问题的任何责任。
如果你希望在已经制作完成或正在制作中的奇域中使用 Diapig,则需要使用「资产导入导出」功能,导入 Diapig 的 gia 文件:
- 在原神千星奇域局内编辑器中,点击左上角的「九宫格」图标,然后在侧栏内找到「资产导入导出管理」。
- 在「资产导入导出管理」-「导入与转存」界面中选择右下角「加载外部资产」,在弹出的「外部资产加载」小窗口中点击「打开目录」,将「Diapig资产文件.gia」复制进弹出窗口目录中。
- 返回原神并点击「外部资产加载」小窗口中的「加载外部资产」(在「打开目录」按钮的右边),此时你的资产列表中应该有「Diapig资产文件」,如下图

- 最后选中「Diapig资产文件」,点击右下角「转存所选资产」即可导入 Diapig 的所有相关内容。

玩家模板迁移注意事项
导入的资产文件中包含一个玩家模板「对话Empty」,其中有 13 个自定义变量和一张节点图。请务必将 13 个自定义变量和这张节点图原封不动地、完整迁移到你自己的玩家自定义变量组件以及节点图列表中。自定义变量的名称、类型均需要匹配(其中 dialogBranch 的类型「对话分支列表」为结构体列表类型)。
注意
自定义变量中有一个名为「苯」的超长字符串列表,在迁移该变量时只需保证变量名为「苯」、且变量类型为「字符串列表」即可,无需添加空字符串内容。同时「苯」的下方还有几个变量不要忘记迁移了。

界面控件索引的修改
注意
由于千星奇域自身导入导出界面控件组时,界面控件组索引可能变化的特性,以及作者编写节点图时尽可能通过变量传参简化控件显示与消失的习惯,部分界面控件在通过 gia 导入后需要在引用它们的节点图的节点图变量中重新填写索引。
在「界面控件组管理」-「界面控件组库」中,以「重要」为前缀的控件组(或者控件组合中的某一个控件)是需要复制其索引到部分节点图的节点图变量中的。
以下以「对话模型」实体上的「对话模型-定时任务处理」为例讲解重新填写索引的步骤:
示例
- 在编辑器的元件库中,找到「对话模型」元件,打开节点图列表,找到对应节点图的编辑变量按钮。

- 在示例下方表格中查询变量值和界面控件组的映射关系。例如表格中「对话模型 - 定时任务处理」节点图中「黑屏对话框索引」这一变量,需要填入的值为「『重要』3·显示·黑屏对话框」的索引。
- 在「界面控件组管理」-「界面控件组库」中找到对应的控件,然后将其索引复制。
除此之外表格中还存在一些界面控件组合的子控件,需要展开组合并找到对应的子控件索引,如下图。
- 回到刚才的节点图变量编辑区,将索引粘贴到对应变量值的位置(替换掉原来的变量值)。

- 修改完「对话模型」上的所有节点图变量后,不要忘记点击编辑器下方「覆盖保存元件」按钮保存更改。
你也可以直接在千星沙箱中更改对应节点图上的节点图变量。需要注意的是你必须、也只应该更改被公开的节点图变量。
以下为所有需要修改的节点图变量(空单元格代表同上):
| 节点图 位置 |
节点图 名称 |
节点图 变量名称 |
列表/字典的 第几个元素 |
对应的界面控件 (部分控件可能包含在组合中) |
|---|---|---|---|---|
| 对话模型 | 对话模型-定时任务处理 | 黑屏对话框索引 | / | 「重要」3·显示·黑屏对话框 |
| 对话模型-对话操作 | 分支选项列表控件 | 第0个 | 「重要」1·分支·单分支选项列表 | |
| 第1个 | 「重要」1·分支·双分支选项列表 | |||
| 第2个 | 「重要」1·分支·三分支选项列表 | |||
| 第3个 | 「重要」1·分支·四分支选项列表 | |||
| 玩家实体 | 玩家对话模型处理 | 对话交互按钮 | / | 「重要」1·显示·对话交互按钮 |
| 选项控件列表 | 第0个 | 「重要」1号选择按钮 包含在组合: 「重要」1·分支·单分支选项列表 |
||
| 第1个 | 「重要」1号选择按钮 包含在组合: 「重要」1·分支·双分支选项列表 |
|||
| 第2个 | 「重要」1号选择按钮 包含在组合: 「重要」1·分支·三分支选项列表 |
|||
| 第3个 | 「重要」1号选择按钮 包含在组合: 「重要」1·分支·四分支选项列表 |
|||
| 第4个 | 「重要」2号选择按钮 包含在组合: 「重要」1·分支·双分支选项列表 |
|||
| 第5个 | 「重要」2号选择按钮 包含在组合: 「重要」1·分支·三分支选项列表 |
|||
| 第6个 | 「重要」2号选择按钮 包含在组合: 「重要」1·分支·四分支选项列表 |
|||
| 第7个 | 「重要」3号选择按钮 包含在组合: 「重要」1·分支·三分支选项列表 |
|||
| 第8个 | 「重要」3号选择按钮 包含在组合: 「重要」1·分支·四分支选项列表 |
|||
| 第9个 | 「重要」4号选择按钮 包含在组合: 「重要」1·分支·四分支选项列表 |
|||
| 第10个 | 「重要」道具展示 包含在组合: 「重要」2·分支·非锁定限时选项卡1 |
|||
| 第11个 | 「重要」道具展示 包含在组合: 「重要」2·分支·非锁定限时选项卡2 |
|||
| 第12个 | 「重要」道具展示 包含在组合: 「重要」2·分支·非锁定限时选项卡3 |
|||
| 第13个 | 「重要」道具展示 包含在组合: 「重要」2·分支·非锁定限时选项卡4 |
更改完成后,如果对话时仍然出现了点击按钮没有反应的情况,可对照上方表格确认所有索引是否更改完毕。
其他更改
导入后,「2·分支·非锁定限时进度条」的进度值变量可能会重置。请确认该控件的变量设置与下图一致,否则非锁定对话的限时选项倒计时无法显示(不影响逻辑正常运行)。

「节点」消歧义
- 对话节点:Diapig 储存和操作对话的方式,包含在对话结构体中。下文「节点」默认指对话节点。
- 节点图:千星沙箱中的节点图,和对话节点是两个不同的概念。
- 沙箱节点:在千星沙箱节点图中使用的节点。下文「复合节点」默认指千星沙箱中的复合节点。
Diapig 中的对话运作方式
Diapig 支持三种不同的对话类型:锁定对话、非锁定对话与锁定黑屏文字。分别对应《原神》本篇中的站桩对话剧情、可移动的对话剧情以及黑幕过场。
创建对话
注意
对话与玩家实体绑定。如果你正在制作一个多人奇域,请注意为每个玩家分别创建对话。
Diapig 的对话通过「对话结构体」进行存储,下方演示了「通过与物件交互」创建一个空对话的过程。
示例
- 在实体摆放界面中摆放一个动态物件。

- 为这个动态物件配置选项卡组件。注:请为选项卡配置布尔过滤器「当前角色未处于对话中」,否则玩家在对话过程中仍然能够交互选项卡。

- 在该动态物件上添加一个自定义变量,类型为「结构体」-「对话结构体」,然后改一个合适的名字。

- 在结构体变量编辑界面中新增一个「对话节点」。

- 创建新节点图如下,然后将节点图挂载在该动态物件上。千万不要忘记挂载!


- 若你想创建不同的对话类型,请使用不同数字开头的复合节点(1为锁定对话,2为非锁定对话,3为锁定黑屏文字)。
现在你已经实现了一个最基本的对话框功能,其中没有任何内容。没有内容的对话显示会有异常,在对话节点中的内容(字符串列表)中添加一个元素即可解决此问题。你可以直接在结构体变量编辑界面中添加内容,但我们建议使用 Diapig Editor 编辑。具体请见使用 Diapig Editor 编辑对话。
此外,你还可以使用「拆分版」和「快捷版」的复合节点创建对话。「拆分版」允许你传入拆分后的对话结构体参数创建对话(包含节点列表和开始节点索引);「快捷版」为单人奇域提供了更加快捷的对话创建方式,调用「快捷版」节点会为单人游戏的唯一玩家创建对话,对话事件承载实体为挂载「快捷版」复合节点的实体。

对话结构体内的参数结构
一个对话结构体代表了一整段对话。拿《原神》本篇剧情类比就是从「与 NPC 交互进入站桩对话」开始到「站桩对话结束,接取新的任务并返回自由行动模式」的过程。
结构体中包含了若干「对话节点」,每个「对话节点」可视作某人说的一句话。在《原神》本篇中,点击屏幕或选择分支选项即可跳转不同的对话节点。对话节点中的参数及其含义如下表所示:
| 变量名 | 变量类型 | 含义 |
|---|---|---|
| 操作码 | 整数 | 节点的操作类型,仅有0-3四种值。代表对话节点结束时对应的操作: 0 - 结束对话 1 - 跳转下一节点 2 - 跳转指定节点 3 - 打开分支选择 对话类型为锁定黑屏文字时,不支持分支选择,即操作码为 3 的对话节点 |
| 跳转节点[2] | 整数 | 仅在操作码为2时有意义,代表跳转的对话节点索引 |
| 分支列表[3] | 对话分支列表 | 仅在操作码为3时有意义,代表这个对话节点的选项分支列表 最多支持4个分支选项,请勿让分支数量超过4个,会有bug |
| 默认分支[3] | 整数 | 仅在操作码为3且对话类型为非锁定对话时有意义,代表非锁定对话中选择超时的情况下选择的默认分支 |
| 继承标题? | 布尔值 | 是否继承在此节点之前显示的对话节点的标题与副标题信息。非锁定对话中将会根据该值决定标题是否有渐变效果 对话类型为锁定黑屏文字时无意义 |
| 标题 | 字符串 | 一般为对话的说话人,仅在「继承标题?」为否时才有效 对话类型为锁定黑屏文字时无意义 |
| 副标题? | 布尔值 | 该节点是否有副标题,仅在「继承标题?」为否时才有效 对话类型为锁定黑屏文字时无意义 |
| 副标题 | 字符串 | 一般为说话人的身份,仅在「继承标题?」为否时才有效 对话类型为锁定黑屏文字时无意义 |
| 内容 | 字符串列表 | 对话的实际内容 当列表内仅有一个元素时,该元素即为整句话,会一次性全部显示 当列表内元素数量大于等于1时,采用打字机显示法,列表内的元素会逐个显示 通常将一整句话的每个字拆分并放入列表中即可实现打字机功能(人工拆字过程繁琐,推荐使用 Diapig Editor 实现打字机显示) |
| 进入事件 | 字符串 | 进入该对话节点时,向事件承载实体发送的对话事件名称。可被「对话事件触发时」接收到 |
| 离开事件 | 字符串 | 该对话节点结束时,向事件承载实体发送的对话事件名称。可被「对话事件触发时 」接收到 |
| 时长 | 浮点数 | 见持续时间 |
| 对话分支结构体的参数如下: |
| 变量名 | 变量类型 | 含义 |
|---|---|---|
| 分支名称 | 字符串 | 该分支对外显示的标题 |
| 跳转节点 | 整数 | 玩家选择该分支后,跳转的对话节点索引 |
对话事件
对话节点提供了「进入事件」与「离开事件」参数。其中「进入事件」会在显示这个对话节点的瞬间发送给对话事件实体,「离开事件」会在这个对话节点显示结束(包括玩家手动点击下一句、非锁定对话自动下一句)的瞬间发送给对话承载实体。
可在对话事件实体上使用「E·对话事件触发时」复合节点接收事件,并用多分支控制不同事件名称执行不同逻辑。

如果执行流较为复杂,推荐使用「E·对话事件触发时·优化版」复合节点,负载占用更低。
不同对话类型的区别
显示效果
三种对话类型在显示上有各自的特点,所有对话类型均支持打字机显示和渐变效果。
不建议在包含颜色标签的富文本中使用渐变效果,否则渐变效果会穿帮。如果需要制作包含富文本的对话内容,建议在创建对话/对应对话节点进入前使用以下千星沙箱节点关闭渐变效果:

锁定对话
锁定玩家位置,切换到另一个新界面布局,隐藏大部分UI,玩家通过点击下一步按钮结束该对话节点。若点击下一步按钮时打字机文本未播放完毕,则点击按钮后打字机文本会全部展现。

锁定对话的界面并未严格参考《原神》本篇设计,更多地参考了《绝区零》的布局,使选择选项不再依赖选项卡组件。

非锁定对话
非锁定对话允许玩家边操控角色移动边观看对话内容,其会根据对话节点中配置的持续时间自动播放对话节点。播放非锁定对话时,对话节点中持续时间不得少于2秒,否则会自动修正为2秒。

非锁定对话的分支选择为限时选择,限时时间同样为节点的持续时间(因此请注意将分支选择节点的持续时间设置长一点)。持续时间结束后会自动选择「默认分支」对应的选项。

锁定黑屏文字
锁定黑屏文字不会切换玩家界面布局,但会锁定玩家位置。锁定黑屏文字在创建时会过渡到黑屏,然后按照节点跳转规则依次显示节点的内容(标题相关的参数会被忽略)。

与前两种对话不同的是,因为锁定黑屏文字有黑屏过渡环节,锁定黑屏文字的开始节点的开始事件,以及结束节点的结束事件均会在黑屏过渡结束时才发送给对话承载实体。
注意
锁定黑屏文字不支持分支选择,请勿在锁定黑屏文字的对话结构体内包含操作码为 3 的对话节点。
持续时间
每个对话节点均有「持续时间」参数,其在不同对话类型下的含义是不一样的。
- 锁定对话:决定进入对话节点后,对话交互按钮的出现时间。
- 非锁定对话:决定这一句对话的显示持续时间,以及分支选择节点留给玩家的选择时间。
- 锁定黑屏文字:决定这一句文字的显示持续时间。
锁定对话注意事项
锁定对话和锁定黑屏文字中「锁定」的意思是:创建对话后,角色的位置会被锁定在当前位置,一般情况下不可移动。位置锁定是通过玩家对应的「对话模型」上的角色扰动装置实现的。若要在锁定对话/锁定黑屏文字过程中传送玩家,请使用复合节点「传送玩家及其对话模型」而非默认的「传送玩家」节点。

使用 Diapig Editor 编辑对话
提醒
当前 Diapig Editor 尚未做优化,若您在使用 Diapig Editor 的过程中出现了卡顿、内存占用过高等问题,请导出你的对话并重启 Diapig Editor 再开始编辑。
Diapig Editor 编辑的整体步骤
提醒
当前 Diapig Editor 只有对话编辑功能(富文本编辑还没写,别用)。
注意
每次打开 Diapig Editor 编辑对话前,不要使用新建按钮!先导入文件!导出对话文件后,编辑下一个对话时即可使用新建按钮新建对话。
- 进入主页后,点击「对话编辑」即可进入对话编辑界面。


- 在原神千星奇域编辑器内任意一个实体(推荐在你的对话事件承载实体)的自定义变量组件中,创建一个类型为「对话结构体」的自定义变量,然后点击按钮打开编辑界面。

- 对话结构体内默认是没有对话节点的。在局内编辑器中新增一个对话节点,然后点击编辑界面右上角「…」,将变量 JSON 导出到一个合适的位置。

- 在 Diapig Editor 中点击导入,选择刚才从原神中导出的 JSON 文件,Diapig 读取文件内容后即会显示该结构体内的所有对话节点。


- 编辑完对话后,再点击上方的导出按钮,将文件导出到一个合适的位置。提醒:尽量不要覆盖保存,特别是在编辑较长的对话内容时。

- 在原神千星奇域编辑器内,刚才的变量「快捷编辑」界面中,再次点击右上角「…」-「导入变量」,选择刚才从 Diapig Editor 中导出的 JSON 文件,即可将对话导入游戏中。

- 因为对话内容均已在 Diapig Editor 中编辑完毕,接下来在千星沙箱中编辑对话的相关触发逻辑即可。见创建对话。
界面介绍
Diapig Editor 中展示了该对话结构体内所有的对话节点(每两条分割线之间为一个节点),因此操作基本也围绕对话节点进行。
以下为 Diapig Editor 中节点显示的各个内容对应的含义:

- 对话节点索引按钮,可移动、复制与粘贴节点内容,在选择模式下用于选取目标节点。
- 对话操作与事件按钮,显示该节点的操作类型和是否有进入/离开事件(有进入事件时按钮左侧为紫色,有离开事件时按钮右侧为紫色)。点击可编辑节点操作类型及详情、持续时间及进入、离开事件。
- 对话节点文本显示。粗体字为标题(如有),括号内细体字为副标题(如有),双引号内文本为内容。标题和副标题在「继承标题」为是的情况下不会显示。
- 编辑对话节点文本按钮。
- 添加按钮,在该节点后添加一个新节点。
- 复制按钮,复制该节点并添加在该节点后。
- 删除按钮,删除该节点。删除前会检查该节点是否被其他「跳转」类型的节点(操作码为2和3的节点)的跳转逻辑以及开始节点所引用,若有则会弹出二次确认。
- 分支选项的索引编号,若为黄色则为非锁定对话下选择的默认分支。
- 分支选项的跳转节点显示,即选择该分支后跳转的节点索引。
- 分支选项的标题。
创建与移除对话节点
创建节点
要创建新的对话节点,有两种方式:
- 点击已有节点右侧的添加按钮,在已有节点下方创建一个默认的新节点。

- 点击已有节点右侧的复制按钮,在已有节点下方创建一个该节点的复制。

移除节点
若要移除节点,点击右侧的垃圾桶按钮即可将该节点移除。当节点列表内只有一个节点时,无法将其移除。
提醒
添加(插入)与移除节点不会使其他节点的跳转目标发生变化,Diapig Editor 在添加和移除节点时会自动处理已有节点的跳转索引使得跳转目标与添加/移除前一致。但如果尝试移除一个其他节点的跳转目标,会弹出如下弹窗请求二次确认。
编辑对话文本
点击对话节点右侧的铅笔按钮,即可在弹出窗口中编辑对话文本相关的参数,包括标题/副标题、内容、内容呈现方式等。编辑完后记得点保存!
注意
与原神千星奇域编辑器-「界面控件组管理」中的界面控件组不同,Diapig 暂不支持在对话中插入变量。

当标题完全等于**<PLAYER_NAME>**时,标题会显示为观看此对话的玩家名。可通过「使用玩家名」按钮快速将标题设置为玩家名。
根据「内容呈现方式」的不同对对话内容有如下限制:
- 直接呈现:没有限制,游戏内对话内容会一次性显示出来。
- 打字机呈现:内容字数不得超过 87 字,否则无法保存。
- 自定义打字机:使用竖线’|’分隔打字机每个动画帧显示的文本。文本块数量不得超过 87,否则无法保存。
自定义打字机的特殊的使用场景
- 显示需要换行的文本时,建议不要使用打字机呈现,容易穿帮。请使用自定义打字机并使换行符「\n」与其前一个或后一个字在同一个文本块内,如下图:

- 当需要以较慢的速度显示文本时,可以通过插入多个不可见标签占位的方式实现(但不建议在正常打字机对话中使用标签)。可在 Dialog Editor 中直观看到标签的应用情况。

编辑节点逻辑
点击节点左侧的对话操作与事件按钮,可以在弹出窗口中编辑该节点的操作与事件相关参数。编辑完后记得点保存!所有更改只有点了保存才会生效!

对话事件
在「节点进入事件」与「节点离开事件」文本框中直接填写事件名称即可为对话节点添加对应的事件。监听对话事件的方法详见对话事件。

持续时间
调整该节点的时长参数,具体见持续时间。
操作类型
包含结束对话、跳转下一节点、跳转指定节点和打开分支选择四种操作(分别对应操作码0/1/2/3)。当操作类型为跳转指定节点或打开分支选择时还需要填写额外参数。
分支管理
操作类型为打开分支选择时,可对该节点的分支进行管理:

初始没有分支,需要点按添加分支按钮添加新的分支,并在分支文本框内配置该分支的标题。
点击分支左侧的索引按钮,可设置非锁定对话下选择超时的默认选择分支。默认选择分支会以黄色前景与红色背景高亮显示。
点击分支右侧的垃圾桶按钮可删除此分支。
选择跳转节点
操作类型为跳转指定节点或打开分支选择时,弹窗内会出现位置按钮:

点击位置按钮,即可进入选择模式,选择跳转的目标节点。

此时点击跳转目标节点左侧的绿色对勾按钮即可设定跳转目标,并重新打开编辑弹窗。点击正在编辑的节点左侧的红色重置按钮即可取消选择,不改变跳转目标。
退出选择模式后,仍需点击保存才能使新的跳转逻辑生效。
移动对话节点
当需要改变对话节点的排列顺序时,点击节点左侧的索引按钮,然后选择「移动」,便会进入选择模式。
例如要将上述示例对话的节点编号 5 移动到最开始的位置(编号 0),可按如下顺序操作:
示例
- 点击编号 5 的索引按钮,选择「移动」。

- 进入选择模式后,点击最开始节点的索引按钮,即可移动到编号 0 的位置。


提醒
移动节点并不会使其他节点的跳转目标发生变化,Diapig Editor 在移动时会自动处理已有节点的跳转索引使得跳转目标与移动前一致。若要更改跳转目标,请点击对应节点的「操作与事件」按钮进行编辑。
剪贴板功能
左侧索引按钮的功能中包含了复制和粘贴节点的功能。

复制节点会将该节点的所有信息暂存于一个独立剪贴板,粘贴节点会使用独立剪贴板的节点信息覆写选择的节点(原有的信息将丢失)。
提醒
若独立剪贴板内的节点操作类型为 2(跳转指定节点)或 3(打开分支选择),其也会参与跳转节点逻辑的自动处理,以及移除节点的二次验证。
清理功能
对话节点结构体的构造较为特殊,有时会包含一些「用不到」的值(例如没有副标题的对话节点的副标题可能不为空)。此时使用界面顶部的清理功能即可将这些值置空或置零,可以略微降低结构体读取相关的负载占用。

提醒
清理功能理论上不会改变当前结构体实际显示的对话内容,但若需要再次更改副标题是否生效等参数,则需要重新填写对应值。推荐仅在对话编辑完毕、即将导出时使用清理功能。
元数据编辑窗口
结构体元数据包含了开始节点以及结构体配置 ID 等信息。选择开始节点的流程与选择跳转节点大体相同。

若你是按照「Diapig Editor 编辑的整体步骤」的流程进行编辑的,则对话结构体 ID 会在导入 JSON 文件时自动填充,无需二次填写。若你在打开 Diapig Editor 后没有导入操作,则需要先在元数据编辑中填写结构体配置 ID 等信息,才能够导出 JSON 文件。不填配置 ID 导出来的也用不了。
结构体配置 ID 可在原神千星奇域编辑器的「高级数据管理」中查看。


