概念速览

插件概述

Easy Dialogue System 是一个专业级的对话管理插件,适用于虚幻引擎 5。它通过数据驱动架构提供完整的解决方案,用于创建、管理和执行对话序列。系统完全暴露给蓝图,允许设计师无需编写代码即可创建复杂的对话树。


插件目录结构

EasyDialogueSystem/
├── DialogueSystem.uplugin              # 插件描述文件 (JSON)
├── README.md                            # 插件概览和文档
├── Config/                              # 插件配置文件
├── Content/                             # 插件内容资产(可选)
├── Docs/                                # 文档目录
│   ├── DialogueSystem_GettingStarted.md # 英文版本文档
│   └── DialogueSystem_GettingStarted_CN.md # 中文版本文档(本文件)
├── Resources/                           # 插件资源(图标、缩略图)
├── Binaries/                            # 编译后的二进制文件(自动生成)
│   └── Win64/
│       └── UnrealEditor-DialogueSystemRuntime.dll
├── Intermediate/                        # 构建中间文件(自动生成)
└── Source/                              # 源代码目录
    └── DialogueSystemRuntime/           # 运行时模块
        ├── DialogueSystemRuntime.Build.cs    # 模块构建配置
        ├── Public/                           # 公共接口头文件
        │   ├── DialogueSystemRuntime.h       # 模块入口点
        │   ├── DialogueSystemTypes.h         # 核心类型定义
        │   ├── DialogueDataAsset.h          # 数据资产类
        │   └── DialogueSystemComponent.h    # 运行时组件类
        └── Private/                          # 实现文件
            ├── DialogueSystemRuntime.cpp      # 模块实现
            ├── DialogueDataAsset.cpp         # 数据资产实现
            └── DialogueSystemComponent.cpp   # 组件实现

核心概念

数据资产 UDialogueDataAsset

中央数据容器,存储:

  • 对话序列: 包含节点和选择的完整对话树

  • 说话者信息: 说话者元数据(名称、显示名称、头像、颜色)

  • 全局变量: 带默认值的运行时变量


对话结构

  • FDialogueSequence: 完整的对话序列,包含:

    • 唯一序列 ID 和名称

    • 起始节点引用

    • 对话节点数组

    • 选择节点数组

    • 用于扩展的元数据

  • FDialogueNode: 单个对话节点,支持:

    • 文本节点:显示带说话者信息的对话文本

    • 条件节点:基于条件分支

    • 事件节点:向外部系统广播事件

    • 延时节点:等待指定时长

    • 通过 NextNodeID 链式链接

  • FDialogueChoiceNode: 选择分支节点,包含:

    • 多个选择选项

    • 单选或多选支持

    • 最小/最大选择约束

    • 超时处理与回退节点

    • 每个选择的可用性条件

  • FDialogueCondition: 变量比较系统:

    • 支持整数、浮点数、布尔值、字符串类型

    • 多种操作符:等于、不等于、大于、小于、包含等

    • 基于字符串的比较值


运行时组件 UDialogueSystemComponent

执行引擎,负责:

  • 加载和管理对话数据资产

  • 使用基于 Tick 的时序执行对话序列

  • 处理延时、超时和自动推进

  • 为 UI 和外部系统集成广播事件

  • 管理运行时变量


源代码结构

公共头文件

  • DialogueSystemRuntime.h

    • 模块接口类

    • API 宏定义 (DIALOGUE_SYSTEM_RUNTIME_API)

    • 模块生命周期管理

  • DialogueSystemTypes.h

    • 核心类型定义和枚举

    • EDialogueNodeType: 节点类型枚举(文本、选择、条件、事件、延时)

    • EDialogueConditionOperator: 条件操作符(等于、大于、小于、包含等)

    • EDialogueValueType: 值类型(整数、浮点数、布尔值、字符串)

    • FDialogueCondition: 变量比较条件结构

    • FSpeakerInfo: 说话者信息结构

    • FDialogueNode: 对话节点结构

    • FDialogueChoice: 选择选项结构

    • FDialogueChoiceNode: 选择分支节点结构

    • FDialogueSequence: 完整对话序列容器

  • DialogueDataAsset.h

    • FGlobalVariable: 全局变量定义

    • UDialogueDataAsset: 主要数据资产类

    • 数据资产查询和验证函数

  • DialogueSystemComponent.h

    • UDialogueSystemComponent: 运行时执行组件

    • 蓝图集成的事件委托

    • 对话控制函数(开始、推进、停止、提交选择)

    • 变量管理函数


私有实现

  • DialogueSystemRuntime.cpp: 模块启动和关闭

  • DialogueDataAsset.cpp: 数据资产实现和验证

  • DialogueSystemComponent.cpp: 组件逻辑、Tick 处理和节点执行


运行要求

  • 引擎: 虚幻引擎 5.6 或更高版本

  • 模块依赖:

    • Core - 核心引擎功能

    • CoreUObject - 对象系统

    • Engine - 引擎运行时

    • UMG - UI 系统(用于 UI 集成示例)

    • Slate - Slate UI 框架

    • SlateCore - Slate 核心功能

依赖项在 DialogueSystemRuntime.Build.cs 中自动配置。


Last updated