在虚幻引擎5中,Branch (If) 节点是蓝图视觉脚本中最基础、也是最核心的条件判断工具。它相当于传统编程语言中的 if-else 语句,根据一个布尔值(True 或 False)来决定程序的执行路径。
🔎 Branch节点核心基础
| 核心概念 | 详细解释与示例 |
|---|---|
| 功能 | 输入一个布尔值,如果为 True,则执行 True 引脚后的逻辑;如果为 False,则执行 False 引脚后的逻辑。 |
| 创建方式 | 蓝图中节点主要用于流程控制,可按快捷键 B + 鼠标左键快速生成。 |
| 输入引脚 | In: 执行入口,触发判断;Condition: 布尔值(Bool),用来决定执行哪个分支的关键,通常是变量、比较、或逻辑运算的结果。 |
| 输出引脚 | True: Condition 为 True 时的执行出口;False: Condition 为 False 时的执行出口。 |
💔 案例一:角色生命周期管理(血量系统)
1. 在角色蓝图中创建血量变量
-
打开角色蓝图(例如
ThirdPersonCharacter) -
在 My Blueprint 面板中点击 Variables 旁边的 + 号
-
将变量命名为
Health,类型选择 Float -
在 Details 面板中将 Default Value 设为
100.0 -
点击 Compile 按钮保存
2. 创建伤害事件
-
在 Event Graph 中右键 → 搜索并添加 Add Custom Event 节点
-
命名为
TakeDamage -
点击该节点右侧的 + 图标,添加一个输入参数:命名为
DamageAmount,类型为 Float
3. 处理血量和死亡判断
-
从
TakeDamage的执行引脚拖出,添加一个 Float – Float 节点 -
将
Health变量的 GET 节点连接到第一个输入端,DamageAmount连接到第二个输入端 -
将减法结果连接到 SET Health 节点(使用 Alt + 拖拽
Health变量创建 SET 节点) -
从 SET Health 节点拖出执行引脚,添加 Branch 节点
-
将 <= 比较节点连接到
Branch的 Condition 引脚 -
比较:左侧输入端 =
Health变量的 GET 节点,右侧输入端 =0.0
4. 实现死亡逻辑
-
创建 Add Custom Event 命名为
PlayerDeath -
在
PlayerDeath中拖入角色的 Mesh 组件 -
从 Mesh 拖出,搜索并添加 Set Simulate Physics 节点,勾选 New Simulate Physics
-
从 Mesh 拖出,搜索并添加 Set Collision Profile Name 节点,在 New Collision Profile Name 中输入
Ragdoll -
最后添加 Disable Input 节点,将角色控制器连接到 Player Controller 输入
-
将
Branch的 True 引脚连接到PlayerDeath事件
5. 在伤害源(如 Smasher)中调用伤害
-
在伤害源角色的蓝图中,添加 Box Collision 组件
-
在 Details 面板中勾选 Generate Overlap Events
-
选中 Box 组件 → 右键 → Add Event → Add OnComponentBeginOverlap
-
从该节点拖出,添加 Cast To ThirdPersonCharacter(角色蓝图类名)
-
从 As ThirdPersonCharacter 引脚拖出,搜索
TakeDamage自定义事件并调用 -
将
DamageAmount值设为伤害数值(例如50.0)
🔑 案例二:交互系统(有钥匙才能开门)
1. 在玩家角色蓝图中添加钥匙变量
-
打开玩家角色蓝图
-
在 My Blueprint → Variables 中添加变量
bHasKey,类型 Boolean -
也可添加
KeyCount变量,类型 Integer -
设置默认值(例如
KeyCount = 0)
2. 在门蓝图中设置碰撞触发器
-
打开门蓝图,选择一个 Static Mesh 作为门体
-
在组件面板中添加 Box Collision 作为交互触发器,调整大小覆盖门前区域
-
在 Details 面板中确保 Generate Overlap Events 已勾选
-
选中 Box Collision 组件 → 右键 → Add Event → Add OnComponentBeginOverlap
3. 实现交互检测
-
在
OnComponentBeginOverlap节点后添加 Cast To [YourCharacterClass] -
从 As Character 引脚拖出,使用 GET 节点获取玩家角色变量
bHasKey -
将该布尔值连接到 Branch 节点的 Condition 引脚
4. 执行开门或拒绝逻辑
-
True 引脚:执行开门动画/操作
-
添加 Timeline 节点控制门旋转
-
添加 Play Animation 等开门效果
-
-
False 引脚:播放拒绝交互的音效或提示
-
添加 Play Sound at Location 播放 “Door Locked” 声音
-
或者添加 Print String 输出提示文本
-
🏃 案例三:耐力消耗系统
1. 创建耐力变量
-
打开玩家角色蓝图(如
BP_ThirdPersonCharacter) -
在 My Blueprint → Variables 中添加
CurrentStamina类型 Float -
添加
MaxStamina类型 Float,默认值设为100.0 -
在 Event BeginPlay 中使用 SET CurrentStamina 将初始值设为
MaxStamina
2. 在跳跃时添加耐力检查
-
找到现有的跳跃输入事件(通常是
Jump动作) -
在
Jump事件的执行引脚后,添加 Branch 节点 -
创建 >= 比较节点:左侧 =
CurrentStamina,右侧 = 跳跃消耗值(例如10.0) -
将该比较结果连接到 Branch 的 Condition 引脚
3. 分支处理
-
True 引脚:
-
创建减法运算:
CurrentStamina = CurrentStamina - 10.0 -
使用 SET CurrentStamina 节点更新变量
-
将执行流连接到原有的 Launch Character 跳跃逻辑
-
-
False 引脚:
-
添加 Print String 节点,输出 “Stamina不足,无法跳跃”
-
或者添加 Play Sound at Location 播放失败音效
-
4. (进阶)将耐力检查封装为宏
-
在 My Blueprint 面板中点击 Add Macro 按钮,命名如
CheckStamina -
在宏的 Details 面板中添加:Inputs →
BeginCheck(Exec 类型);Outputs →OnSuccess和OnFailure(Exec 类型) -
在宏图表中构建上述耐力检查逻辑,将成功和失败分别连到对应的输出执行引脚
-
在主事件图表中,可以直接调用宏来复用逻辑
🔫 案例四:弹药管理系统
1. 创建弹药变量
-
打开武器蓝图或玩家角色蓝图
-
添加变量:
-
CurrentAmmo类型 Integer,默认值设为弹匣容量(如30) -
MaxAmmo类型 Integer,默认值设为最大弹药量(如120) -
ReserveAmmo类型 Integer(备用弹药),默认值设为90
-
2. 在射击时实现弹药检查
-
找到射击输入事件(如
Fire动作) -
在事件执行引脚后添加 Branch 节点
-
创建 >= 比较节点:左侧 =
CurrentAmmo的 GET 节点,右侧 =1 -
连接该比较结果到 Branch 的 Condition
3. 分支处理
-
True 引脚:
-
执行射击逻辑(生成子弹、播放动画、音效、后坐力等)
-
创建减法运算:
CurrentAmmo - 1 -
使用 SET CurrentAmmo 更新变量
-
-
False 引脚:
-
播放空枪音效 “Click”
-
可以触发自动装填或显示弹药不足 UI 提示
-
4. 实现装填功能
-
创建 Reload 自定义事件或输入处理
-
检查
ReserveAmmo是否大于 0,且CurrentAmmo是否小于MaxAmmo(使用 AND Boolean 组合两个条件) -
计算需要装填的数量 =
Min(ReserveAmmo, MaxAmmo - CurrentAmmo) -
更新:
-
CurrentAmmo = CurrentAmmo + 需要装填的数量 -
ReserveAmmo = ReserveAmmo - 需要装填的数量
-
5. 添加弹药拾取
-
创建可拾取的弹药物品蓝图
-
添加 Box Collision 组件并设置 Generate Overlap Events
-
添加 OnComponentBeginOverlap 事件
-
进行 Cast To Character 检测
-
True 分支:增加弹药变量(注意检查上限),然后 DestroyActor
-
False 分支:无操作,弹药保持存在
🔛 案例五:开关门和一次性宝箱
场景 A:开关门(状态切换)
1. 创建门蓝图和状态变量
-
创建新蓝图类,父类选择 Actor,命名为
BP_Door -
添加 Static Mesh 组件作为门体,再添加 Box Collision 作为交互触发器
-
在 My Blueprint → Variables 中添加 Boolean 变量
bIsOpen,默认值设为False
2. 设置交互触发
-
确保在项目输入设置中已定义交互键(如
E或F) -
在门蓝图中添加 InputAction 交互事件(需要在玩家控制器蓝图中处理交互检测并调用门上的接口/事件)
-
交互事件的执行引脚后添加 Branch 节点
-
将
bIsOpen变量的 GET 节点连接到 Branch 的 Condition
3. 分支执行打开/关闭
-
True 引脚(门当前是开的 → 关闭门):
-
执行关门动画/逻辑
-
使用 SET bIsOpen 节点设为 False
-
-
False 引脚(门当前是关的 → 打开门):
-
执行开门动画/逻辑
-
使用 SET bIsOpen 节点设为 True
-
4. 添加距离检测(高级)
-
在交互事件中使用 Get Player Pawn 获取玩家位置
-
使用 Vector Distance 计算玩家与门的距离
-
创建 < 比较节点,阈值设为交互距离(如
200.0) -
将比较结果与
bIsOpen状态组合使用 -
使用 AND Boolean 节点将多个条件合并为一个布尔值,送入 Branch 的 Condition
场景 B:一次性宝箱
1. 创建宝箱蓝图和状态变量
-
创建新蓝图,命名为
BP_TreasureChest -
添加两个 Static Mesh 组件(宝箱底
Chest_Bottom和宝箱盖Chest_Top) -
添加 Box Collision 覆盖宝箱范围,设置 Generate Overlap Events
-
在 Variables 中添加 Boolean 变量
bIsOpened,默认值设为 False
2. 配置宝箱属性
-
如需生成随机奖励,添加 Integer 或 Float 类型变量,默认值设为具体数值
-
通过 EditCondition 让奖励在编辑器中可调节
3. 设置交互和开箱逻辑
-
在 Box Collision 上添加 OnComponentBeginOverlap 事件
-
添加 Cast To [PlayerCharacter] 确认触发者是玩家
-
从
Branch节点的 Condition 引脚拖出,读取bIsOpened变量的 GET 值 -
False 分支(未打开):给予奖励 → 播放开启动画 → 将
bIsOpened设为 True -
True 分支(已打开):播放”宝箱已空”音效,不给予额外奖励
🧩 案例六:组合条件判断
使用 AND 逻辑
-
在需要组合多个布尔值的节点处添加 AND Boolean 节点
-
点击 AND Boolean 节点右下角的 + 号添加额外的输入引脚
-
将所有需要满足的条件分别连接到各个输入引脚
-
将 AND Boolean 的输出连接到 Branch 的 Condition 引脚
-
只有当所有输入条件均为
True时,AND 才会输出True -
例如:玩家有钥匙 AND 玩家站在门前 AND 游戏未暂停,才能开门
使用 OR 逻辑
-
添加 OR Boolean 节点,同样可以通过 + 添加多个输入引脚
-
将任意需要满足的条件分别连接到输入引脚
-
将 OR Boolean 的输出连接到 Branch 的 Condition 引脚
-
只要满足任意一个条件,OR 就会输出
True -
例如:按 W 键 OR 按上箭头键,角色向前移动
使用 NOT 逻辑
-
添加 NOT Boolean 节点
-
将需要取反的条件连接到它的输入
-
将 NOT 的输出连接到 Branch 的 Condition
-
True 变 False、False 变 True
-
例如:玩家 NOT 处于蹲伏状态(
bIsCrouching为 False),才允许冲刺
使用 Sequence 顺序执行
-
添加 Sequence 节点
-
点击 + 号可以添加多个输出执行引脚(
Then 0、Then 1、Then 2…) -
将需要按顺序执行的逻辑分别连接到对应的输出引脚
-
Sequence 会按照引脚索引顺序依次执行,无论上一个分支是否执行完毕(并行执行)
-
如果需要严格等待上一个分支执行完毕,使用多个独立的执行链或者使用 Delay 节点强制延迟
🔄 案例七:Branch 的变体 – Switch 节点
Switch on Int
1. 创建枚举或直接使用整型
-
添加 Integer 变量
WeaponType,用数字代表武器状态:0= 未装备、1= 手枪、2= 步枪、3= 霰弹枪
2. 添加 Switch on Int 节点
-
在图表中右键搜索 Switch on Int 并添加
-
默认只有 Default 输出引脚
-
选中该节点,在 Details 面板中设置 Start Index(起始索引)为
0 -
点击节点上的 Add Pin 按钮添加输出引脚,每次点击会按顺序添加下一个数字的引脚(0、1、2、3…)
3. 连接逻辑
-
将需要根据整型值分支的输入值(如
WeaponType)连接到 Switch on Int 的 Selection 输入 -
将执行触发连接到 Switch on Int 的输入执行引脚
-
将
0引脚连接到”未装备”的逻辑、1引脚连接到”手枪”逻辑、2引脚连接到”步枪”逻辑等 -
Default 引脚仅在输入值与任何已定义引脚均不匹配时触发,建议保留处理异常情况
4. 移除不需要的引脚
-
如需删除某个引脚,右键点击该引脚 → 选择 Remove Execution Pin
Switch on Enum
1. 创建枚举
-
在 Content Browser 中右键 → Miscellaneous → Enumeration
-
命名为
EDoorState -
添加条目:
Closed、Opening、Open、Closing
2. 添加 Switch on Enum 节点
-
在图表中右键搜索 Switch on Enum 并添加,选择创建的枚举类型
-
Switch on Enum 会自动为枚举中的每个值生成对应的输出引脚,无需手动添加
-
无需担心忘记处理枚举值
3. 连接逻辑
-
将
DoorState枚举变量连接到 Selection -
执行触发时,
Switch on Enum会根据当前枚举值执行对应分支 -
依次连接
Closed→ 关门的动画/逻辑,Opening→ 正在打开的逻辑,Open→ 门已保持打开的逻辑,Closing→ 正在关闭的逻辑
Switch on String(用于动态对话选项)
1. 添加 Switch on String
-
在图表中右键搜索 Switch on String 并添加
-
默认只有 Default 输出引脚
-
选中节点,在 Details 面板中找到 Pin Names 数组
-
点击 + 号添加引脚名称,输入需要匹配的字符串(如
"Greeting"、"Farewell"、"Help")
2. 连接逻辑
-
将用于选择的字符串变量(如
DialogueOption)连接到 Selection -
根据每个字符串引脚连接不同的对话响应逻辑
-
Default 引脚处理未知或无效的对话选项
💡 高级技巧与优化:调试和性能
断点调试
-
在图表中右键单击任意节点(如 Branch、Set Health 等)
-
从上下文菜单中选择 Add Breakpoint(添加断点)
-
添加断点后,节点左上角会显示红色的实心八边形图标
-
运行游戏(Play In Editor)并执行到该节点时,编辑器将自动暂停并高亮该节点
-
此时可查看当前时刻所有变量的值,检查逻辑是否符合预期
-
右键断点节点可 Disable Breakpoint(暂时禁用,显示为八边形轮廓)或 Remove Breakpoint
观察变量
-
调试暂停时,右键点击蓝图图表中任意变量引脚的名称
-
选择 Watch this value(观察此值)
-
在 Blueprint Debugger 窗口中可以持续追踪该变量的变化
性能优化 – 替代 Event Tick
-
避免在 Event Tick 中使用昂贵的 Branch 逻辑,Event Tick 每帧都执行,性能开销极大
-
使用 Timer 替代 Tick:添加 Set Timer by Event 节点,设置循环执行间隔(如
0.1秒),将分支逻辑放到 Timer 事件中 -
仅在条件满足时执行 Tick 逻辑:使用 Branch + Gate 节点,在开始时关闭 Gate,仅在需要的条件下打开 Gate 接收执行
-
使用 Bind Event 替代 Tick 轮询:只在特定事件触发时执行逻辑(如
OnComponentBeginOverlap),而不是每帧检查 -
优化原则:如果逻辑不需要每帧都运行,就不要放在 Event Tick 中
蓝图开发规范
-
为关键节点添加 Comment 文本说明(框选节点后右键 → Create Comment)
-
保持图表连线整洁,避免过长、交叉的连线
-
多使用 Collapsed Graphs 或 Functions 来封装复杂逻辑,提高可读性和复用性
-
养成 Compile(编译)和 Save(保存)的习惯
以上便是七个案例在 UE5 编辑器中的详细操作步骤。通过这些具体实践,可以有效掌握 Branch 节点在不同游戏机制中的应用。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容