4.创建自定义事件 - 图1

介绍

什么是对话事件?

事件是数据的可视化表示。每当您在时间线中创建一个事件时,您都在修改包含大量键和值的字典。每对将包含在游戏期间执行操作所需的所有信息。

什么是自定义事件?

自定义事件由两个主要部分组成:事件块事件处理脚本

事件块是将在时间线编辑器中显示的场景它需要继承Dialogic的EventTemplate.tscn场景。

在大多数情况下,您还需要包含所有设置控件的场景。这些将是您的事件块的“内容”。这些场景将不得不扩展EventPart.gd脚本。 这是一个非常简单的示例EventBlock 4.创建自定义事件 - 图2 它包含两个EventPart,一个标题和一个正文 事件处理脚本包含逻辑以及当您的事件在游戏中发生时会发生什么。此脚本将需要handle_event()事件到达时将调用的函数。 用于创建自定义事件块和处理脚本的所有文件都应位于此目录中:res://dialogic/custom-events. 这样 Dialogic 就可以识别它并将其显示在您的时间线编辑器中。

通过 6 个步骤制作您的第一个自定义事件

现在让我们创建一个简单的事件,它将一些文本打印到 Godot 的输出面板。

创建活动

转到settings pagecustom events section点击New按钮。

4.创建自定义事件 - 图3

填写活动名称、文件夹名称和 ID。对于 ID,我建议使用您的姓名或您独有的字符串,后跟一个数字。 每个事件的 ID 必须不同!!! 这就是为什么我推荐使用唯一字符串的原因,因为它可以让您与他人分享活动而不会破坏他们的游戏。 4.创建自定义事件 - 图4 准备好后,点击Create您将看到文件夹出现在FileSystem下面res://dialogic/custom-events/ 如果您转到timeline editor现在,您应该已经能够在事件列表中看到您的事件。

发生了什么

这个小菜单已经为您创造了许多东西:
  • ( EventBlockEventBlock.tscn)
  • 一个例子EventPart(EventPart_Example.gd/.tscn)
  • ( event handling scriptevent_+EVENTID+.gd)
  • 用于stylebox您的活动 (Stylebox.tres)

接下来是什么

自动过程已经设置了很多,但它不知道我们事件的目的,所以我们将不得不添加它。

| 添加数据

首先我们要打开EventBlock.tscn场景。(不要重命名这个场景!) 选择其根节点并在检查器中查看其导出的变量。 我们将需要添加我们的事件可能拥有的所有数据event_data如您所见,它已经包含您的事件 ID。这需要在那里,所以不要删除它! 我希望能够设置在我的事件被激活时将打印的文本,因此我将为此添加一个信息槽: 4.创建自定义事件 - 图5 ### | 图标和样式框 您还可以更改检查器中的事件图标。只需将图像拖入Event Icon. 在此之下,您可以打开样式框并更改其背景颜色,以使您的活动具有独特的外观。

| 事件块内容 (EventParts)

现在您的事件块将是空的,所以如果您愿意,让我们更改它。 EventBlock 的内容被分成EventParts. 这允许一些重用。EventPart 可以在 EventBlock 中的两个位置:Header(始终可见)和 Body(可以隐藏)。

EventBlock 不必具有正文或标头 EventPart。__例如,结束分支事件没有。

已经包含了一个简单的示例EventPart(脚本和场景)。你可以随心所欲地改变它。

| 加载数据

load_data()您需要设置控制节点的值当事件添加到时间线编辑器时调用此函数。

| 保存对数据的更改

当值发生变化时(通过信号收听)在event_data字典中设置相应的值并调用data_changed(). 这几乎是您需要知道的所有内容。 如果你想找到更多的例子,你可以去res://addons/dialogic/Editor/Events/Parts/查看塑造 Dialogic 默认块的 EventParts。 ### | 使用 EventPart 完成 EventPart(s) 中需要的所有内容后,进入EventBlock场景并将 Inspector 中的header/body变量设置为新场景。

| 事件处理程序脚本 (event_yourname_000.gd)

完成后,您EventBlock需要添加事件处理逻辑。

| handle_event() 函数

如果你打开脚本你会看到,默认情况下只有一个函数,handle_event()函数。 它带有两个有用的信息:event_data和对dialog_node. 对我来说,我会在 print(event_data[‘print_text’] 那里添加,但当然你可以做更多。 脚本中已经解释了更多内容:
继续
用于dialog_node.load_next_event()继续下一个事件。
等待
如果您不希望播放器中断您的事件,请设置dialog_node.waitingtrue在处理您的事件时。不要忘记将其设置回false.

并做了!

太好了,您已经为 Dialogic 创建了第一个自定义事件。

确保检查 Emilio 的 Discord 服务器,以防万一有人已经创建了您需要的自定义事件。它们非常容易导入