Skip to content

State Machine tutorial using Logic Driver Pro

License

michael-chen2010/StateMachineTutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StateMachineTutorial-UE5

课程《UE 5.6中有限状态机的使用》官方配套工程

本项目是B站课程 《UE 5.6中有限状态机的使用》 的配套教学工程。项目基于强大的 Logic Driver Pro 插件,在纯蓝图环境中,演示了如何运用层次化状态机 (HFSM) 来构建清晰、可扩展且易于维护的专业级游戏逻辑。


项目目标:告别“意大利面条”代码 (Project Goal)

你是否也曾被这样盘根错节的蓝图所困扰?

复杂蓝图示例

当角色的状态(如待机、跑动、攻击、受击、潜行)增多时,传统的布尔值和分支判断(Branch)会迅速失控,导致逻辑难以阅读、维护和扩展。

本项目旨在解决这一痛点,展示如何通过状态机这一优雅的设计模式,将混乱的逻辑重塑为清晰、模块化的结构。

(Demo截图)


核心概念 (Core Concepts)

本项目重点演示了状态机的两大核心思想:

1. 有限状态机 (Finite State Machine - FSM)

一切逻辑都围绕四个基本要素构建,形成一个清晰的闭环:

  • 现态 (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)。

2. 层次化状态机 (Hierarchical FSM - HFSM)

当逻辑变得复杂时,HFSM通过“状态嵌套”来管理复杂性,拒绝重复

例如: 如果角色在Idle, Run, Fight等任何状态下都可能死亡,扁平状态机需要从每个状态都连一条线到Dead状态。而使用HFSM,我们可以:

  1. Idle, Run, Fight打包进一个名为InGame的父状态(或称“超级状态”)。
  2. 只需从InGame父状态的边界创建一条到GameEnd状态的转换。
  3. 这样,无论角色处于哪个子状态,死亡事件都能被这条共享的转换逻辑捕获,极大简化了设计。

项目架构解析 (Architecture)

为了聚焦核心,本项目采用了一个分层的状态机结构,由一个全局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;
Loading

学习目标 (Learning Objectives)

通过探索和修改此项目,你将亲手实践:

  1. 熟悉项目结构: 理解HFSM中父子状态机的协作方式。
  2. 添加新状态: 在已有的FSM_InGame子状态机中,创建新的Fight状态。
  3. 设置转换条件: 为Idle, Run, Fight之间添加双向转换逻辑。
  4. 实现状态动作: 在每个状态的On State Begin事件中编写蓝图逻辑,通过改变角色颜色来直观地反馈当前状态。
  5. 验证HFSM优势: 测试在Idle, Run, Fight任一状态下,触发“死亡”事件时,状态机都能正确地从InGame父状态跳转到GameEnd状态。

如何使用 (How to Use)

1. 环境与依赖

  • Unreal Engine: 5.6 (或兼容版本)
  • 必需插件: Logic Driver Pro
    • 注意: Logic Driver Pro是一个付费插件,是运行本项目的必要条件。请确保你已从UE市场购买并安装了它。

2. 运行项目

  1. 克隆或下载本仓库。
  2. 确保已在引擎中启用Logic Driver Pro插件。
  3. 使用Unreal Engine打开StateMachineTutorial.uproject文件。
  4. 打开主关卡 Content/Maps/StateMachineTutorial
  5. 点击 运行 (Play) 即可开始探索。

3. 调试技巧

  • Print String: 在状态机的OnStateMachineStateChanged事件中打印日志,是简单有效的调试方法。

核心资产文件 (Core Assets)

  • Content/Blueprints/BP_Global: 全局管理器Actor,以及按键响应逻辑。
  • Content/Blueprints/FSM_Global: 主状态机。
  • Content/Blueprints/FSM_InGame: 核心玩法的子状态机,也是本次课程练习的主要操作对象。
  • Content/Blueprints/EnumEvents: 驱动状态机的外部事件定义。
  • Content/Blueprints/UI/UI_Info: UI。

许可证 (License)

本项目采用 MIT License

About

State Machine tutorial using Logic Driver Pro

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •