课程《UE 5.6中有限状态机的使用》官方配套工程
本项目是B站课程 《UE 5.6中有限状态机的使用》 的配套教学工程。项目基于强大的 Logic Driver Pro 插件,在纯蓝图环境中,演示了如何运用层次化状态机 (HFSM) 来构建清晰、可扩展且易于维护的专业级游戏逻辑。
你是否也曾被这样盘根错节的蓝图所困扰?
当角色的状态(如待机、跑动、攻击、受击、潜行)增多时,传统的布尔值和分支判断(Branch)会迅速失控,导致逻辑难以阅读、维护和扩展。
本项目旨在解决这一痛点,展示如何通过状态机这一优雅的设计模式,将混乱的逻辑重塑为清晰、模块化的结构。
本项目重点演示了状态机的两大核心思想:
一切逻辑都围绕四个基本要素构建,形成一个清晰的闭环:
- 现态 (Current State): 物体当前所处的状况 (e.g.,
Idle)。 - 条件 (Condition / Transition): 触发状态变化的规则 (e.g.,
When W key is pressed)。 - 动作 (Action): 在进入新状态或转换过程中执行的操作 (e.g.,
Play Run Animation)。 - 次态 (Next State): 条件满足后进入的新状况 (e.g.,
Run)。
当逻辑变得复杂时,HFSM通过“状态嵌套”来管理复杂性,拒绝重复。
例如: 如果角色在Idle, Run, Fight等任何状态下都可能死亡,扁平状态机需要从每个状态都连一条线到Dead状态。而使用HFSM,我们可以:
- 将
Idle,Run,Fight打包进一个名为InGame的父状态(或称“超级状态”)。 - 只需从
InGame父状态的边界创建一条到GameEnd状态的转换。 - 这样,无论角色处于哪个子状态,死亡事件都能被这条共享的转换逻辑捕获,极大简化了设计。
为了聚焦核心,本项目采用了一个分层的状态机结构,由一个全局Actor进行驱动:
-
BP_Global(Actor): 放置在关卡中的全局管理器。它负责持有并运行主状态机,并作为事件中心向状态机广播游戏事件(如“玩家死亡”)。 -
FSM_Global(Logic Driver State Machine): 主状态机,负责管理游戏的顶层流程。MainMenu->InGame->GameEnd
-
FSM_InGame(Logic Driver State Machine): 子状态机。它被FSM_Global中的InGame状态所引用,专门负责管理玩家在游戏内的具体行为逻辑。Idle->Run->Fight
这种引用子状态机的设计模式,让我们可以将复杂的行为逻辑分解到不同的、可复用的状态机蓝图中,保持主流程的整洁。
graph TD
A[BP_Global Actor] --> B{FSM_Global};
subgraph B [FSM_Global]
C(MainMenu) --> D(InGame);
D --> E(GameEnd);
end
subgraph D [InGame State]
direction LR
F{FSM_InGame}
end
subgraph F [FSM_InGame]
direction LR
G(Idle) <--> H(Run);
H <--> I(Fight);
G <--> I;
end
D -- "References" --> F;
B -- "Death Event" --> E;
通过探索和修改此项目,你将亲手实践:
- 熟悉项目结构: 理解HFSM中父子状态机的协作方式。
- 添加新状态: 在已有的
FSM_InGame子状态机中,创建新的Fight状态。 - 设置转换条件: 为
Idle,Run,Fight之间添加双向转换逻辑。 - 实现状态动作: 在每个状态的
On State Begin事件中编写蓝图逻辑,通过改变角色颜色来直观地反馈当前状态。 - 验证HFSM优势: 测试在
Idle,Run,Fight任一状态下,触发“死亡”事件时,状态机都能正确地从InGame父状态跳转到GameEnd状态。
- Unreal Engine: 5.6 (或兼容版本)
- 必需插件: Logic Driver Pro
- 注意: Logic Driver Pro是一个付费插件,是运行本项目的必要条件。请确保你已从UE市场购买并安装了它。
- 克隆或下载本仓库。
- 确保已在引擎中启用
Logic Driver Pro插件。 - 使用Unreal Engine打开
StateMachineTutorial.uproject文件。 - 打开主关卡
Content/Maps/StateMachineTutorial。 - 点击 运行 (Play) 即可开始探索。
- Print String: 在状态机的
OnStateMachineStateChanged事件中打印日志,是简单有效的调试方法。
Content/Blueprints/BP_Global: 全局管理器Actor,以及按键响应逻辑。Content/Blueprints/FSM_Global: 主状态机。Content/Blueprints/FSM_InGame: 核心玩法的子状态机,也是本次课程练习的主要操作对象。Content/Blueprints/EnumEvents: 驱动状态机的外部事件定义。Content/Blueprints/UI/UI_Info: UI。
本项目采用 MIT License。

