ActionRoguelike

  • Action System(行动系统)

    Action System(行动系统)

    概述

    Action System 是本项目的核心技能/能力框架,类似于 UE 官方的 Gameplay Ability System (GAS),但更加轻量且易于理解。它负责管理角色的所有行动(技能、Buff/Debuff、被动效果等)以及属性系统(生命值、攻击力等)。

    核心类

    URogueAction

    文件: Source/ActionRoguelike/ActionSystem/RogueAction.h/.cpp

    Action 是所有行动的基类,继承自 UObject。每个 Action 代表一个可执行的行动,如攻击、冲刺、Sprint 等。

  • ActionRoguelike 项目入门指南

    ActionRoguelike 项目入门指南

    项目简介

    ActionRoguelike 是一个基于 Unreal Engine 的 C++ 第三人称动作 Roguelike 游戏项目。项目展示了从自定义技能系统、AI 行为、网络复制到性能优化等多种 UE 开发技术。

    快速导航

    文档内容适合阅读时机
    01-ActionSystem技能/属性框架最先阅读 - 项目核心
    02-AIAI 角色与行为树了解 Action System 后
    03-Player玩家角色与输入了解 Action System 后
    04-Projectiles弹体系统了解 Action 和 Player 后
    05-Pickups拾取物系统随时
    06-World世界交互物随时
    07-SaveSystem存档系统随时
    08-Performance性能优化有一定基础后
    09-Core核心框架与全局工具需要查阅时
    10-Animation动画系统随时
    11-UIUI 系统随时
    12-StateTreesState Tree 任务有一定基础后
    13-Development开发与调试工具需要调试时

    推荐阅读顺序

    如果你是刚接触这个项目的新手,建议按照以下路径阅读:

  • AI 系统

    AI 系统

    概述

    AI 系统负责管理游戏中的敌方角色(怪物),包括角色定义、AI 控制器、行为树节点以及 AI 专用的 Action。系统使用 UE 的行为树(Behavior Tree)、感知系统(AI Perception)和环境查询系统(EQS)实现智能 AI 行为。

    核心类

    ARogueAICharacter

    文件: Source/ActionRoguelike/AI/RogueAICharacter.h/.cpp

  • State Trees(状态树系统)

    State Trees(状态树系统)

    概述

    State Trees 模块提供基于 UE State Tree 框架的 AI Director 任务,用于替代或补充行为树实现更高层次的游戏逻辑控制,如怪物选择和生成策略。

    核心类

    FRogueStateTreeDirectorTask

    文件: Source/ActionRoguelike/StateTrees/RogueStateTreeTasks.h/.cpp

    State Tree 任务的基类,标记为 Hidden 不直接在编辑器中显示。所有自定义 Director 任务继承此类。

    FRogueSTTask_SelectMonster

    文件: Source/ActionRoguelike/StateTrees/RogueStateTreeTasks.h/.cpp

    从 DataTable 中选择要生成的怪物的 State Tree 任务。

  • UI 系统

    UI 系统

    概述

    UI 系统提供 HUD、世界空间 Widget 和效果图标 Widget。核心设计是将世界空间 UI 统一添加到主 HUD 的 CanvasPanel 中,通过手动投影世界坐标到屏幕坐标实现位置跟踪。

    核心类

    ARogueHUD

    文件: Source/ActionRoguelike/UI/RogueHUD.h/.cpp

    HUD 类,管理暂停菜单。

    暂停菜单

    • TogglePauseMenu() - 切换暂停菜单显示
    • 显示时:创建 Widget、显示鼠标、切换到 UI 输入模式
    • 隐藏时:移除 Widget、隐藏鼠标、恢复游戏输入
    • 仅在单机模式(NM_Standalone)下实际暂停游戏
    • Widget 添加到 Viewport 的 ZOrder=100 确保在最顶层

    URogueWorldUserWidget

    文件: Source/ActionRoguelike/UI/RogueWorldUserWidget.h/.cpp

  • 存档系统

    存档系统

    概述

    存档系统负责游戏状态的保存和加载,包括玩家数据(Credits、个人记录、位置)和世界 Actor 状态(宝箱开启状态等)。使用 UE 的 SaveGame 框架,通过 GameInstance Subsystem 实现跨关卡持久化。

    核心类

    URogueSaveGameSubsystem

    文件: Source/ActionRoguelike/SaveSystem/RogueSaveGameSubsystem.h/.cpp

    保存/加载的核心子系统,继承 UGameInstanceSubsystem(随 GameInstance 生命周期存在)。

  • 弹体系统

    弹体系统

    概述

    弹体系统提供了两套实现方案:传统的 Actor 弹体和实验性的数据导向弹体。Actor 弹体方案更成熟,集成了对象池、聚合 Tick 等优化;数据导向方案通过 WorldSubsystem 管理无 Actor 的轻量级弹体数据,是一种性能探索。

    Actor 弹体方案

    ARogueProjectile(弹体基类)

    文件: Source/ActionRoguelike/Projectiles/RogueProjectile.h/.cpp

    所有 Actor 弹体的抽象基类,实现 IRogueActorPoolingInterface 支持对象池。

    组件

  • 动画系统

    动画系统

    概述

    动画模块包含自定义动画实例、近战检测的动画通知以及轻量级的曲线动画子系统。

    核心类

    URogueAnimInstance

    文件: Source/ActionRoguelike/Animation/RogueAnimInstance.h/.cpp

    自定义动画实例基类。

    特性

    • 自动获取 ActionComponent 引用
    • 每帧检查 Status.Stunned Tag 更新 bIsStunned(供动画蓝图使用)
    • 提供 OnMeleeOverlap 委托,近战 AnimNotify 通过此委托通知 Action

    脚步音效: 重写 HandleNotify() 拦截脚步动画通知(l_foot_plant / r_foot_plant),播放配置的脚步音效。

  • 核心框架

    核心框架

    概述

    核心框架包含游戏的基础架构类:GameMode、GameState、全局函数库、接口定义、共享 GameplayTag 以及各种配置/设置类。

    GameMode

    ARogueGameModeBase

    文件: Source/ActionRoguelike/Core/RogueGameModeBase.h/.cpp

    游戏模式基类,管理游戏规则、怪物生成和道具布局。

    默认类配置

    • PlayerStateClass → ARoguePlayerState
    • HUDClass → ARogueHUD
    • GameStateClass → ARogueGameState

    怪物生成系统: 使用积分制(Credit-based)控制怪物生成难度:

  • 开发工具

    开发工具

    概述

    开发工具模块提供作弊管理器和本地开发者设置,方便在开发阶段快速调试和测试。

    核心类

    URogueCheatManager

    文件: Source/ActionRoguelike/Development/RogueCheatManager.h/.cpp

    自定义作弊管理器,通过控制台命令触发。在 ARoguePlayerController 中配置为 CheatClass

    Exec 命令

    • HealSelf - 完全恢复自身生命值(ApplyAttributeChange 设置 Health 为 HealthMax)
    • KillAll - 杀死所有指定类的 AI 角色(默认 ARogueAICharacter
    • DeleteSaveGame - 删除指定槽位的存档文件

    使用方式: 在游戏运行时打开控制台(~ 键)输入命令名即可。

  • 世界交互物

    世界交互物

    概述

    世界交互物模块包含关卡中的各种可交互和可互动的 Actor,如宝箱、爆炸桶和靶子。这些物体展示了如何使用 ActionComponent 属性系统、交互接口和曲线动画。

    核心类

    ARogueTreasureChest(宝箱)

    文件: Source/ActionRoguelike/World/RogueTreasureChest.h/.cpp

    可交互的宝箱,实现 IRogueGameplayInterface

    组件

    • UStaticMeshComponent (BaseMesh) - 箱体,启用物理模拟
    • UStaticMeshComponent (LidMesh) - 箱盖,附加到箱体
    • UNiagaraComponent (OpenChestEffect) - 开启粒子效果(bAutoManageAttachment)
    • UAudioComponent (OpenChestSound) - 开启音效(bAutoManageAttachment)

    交互流程

  • 拾取物系统

    拾取物系统

    概述

    拾取物系统包含两套方案:基于 Actor 的传统拾取物和基于 WorldSubsystem 的数据导向拾取物。前者适合需要交互的物品(如药水、能力拾取),后者适合大量轻量级拾取物(如金币)。

    Actor 拾取物方案

    ARoguePickupActor(拾取物基类)

    文件: Source/ActionRoguelike/Pickups/RoguePickupActor.h/.cpp

    所有可拾取物品的抽象基类,实现 IRogueGameplayInterface 交互接口。

    组件

    • USphereComponent - 碰撞检测
    • UStaticMeshComponent - 外观显示

    核心机制

  • 玩家系统

    玩家系统

    概述

    玩家系统负责处理玩家角色的控制、输入、技能触发、交互和状态管理。采用 Enhanced Input 系统处理输入,使用 Data Asset 配置输入映射,支持键鼠和手柄操作。

    核心类

    ARoguePlayerCharacter

    文件: Source/ActionRoguelike/Player/RoguePlayerCharacter.h/.cpp

    玩家角色基类(Abstract),继承自 ACharacter,实现 IGenericTeamAgentInterfaceIRogueActionSystemInterface

    组件

    • USpringArmComponent + UCameraComponent - 第三人称摄像机
    • URogueActionComponent - 技能和属性管理(使用 URogueSurvivorAttributeSet
    • UAIPerceptionStimuliSourceComponent - 让 AI 能够感知到玩家
    • UAudioComponent (AttackSoundsComp) - 攻击音效,使用 bAutoManageAttachment 优化

    输入系统: 使用 Enhanced Input,所有输入绑定通过 URoguePlayerData Data Asset 配置:

  • 性能优化系统

    性能优化系统

    概述

    性能优化模块包含多个子系统和机制,旨在减少 CPU 开销、改善帧率稳定性:

    • Actor 对象池 - 避免频繁的 Spawn/Destroy
    • Significance Manager - 基于距离的 LOD 和功能降级
    • Tick 聚合 - 减少 Tick 调度开销
    • Deferred Task System - 帧预算管理
    • 尸体管理 - 控制同屏尸体数量

    Actor 对象池

    URogueActorPoolingSubsystem

    文件: Source/ActionRoguelike/Performance/RogueActorPoolingSubsystem.h/.cpp

    世界子系统,管理 Actor 的复用池。默认通过 CVar game.ActorPooling 控制开关。