虚幻引擎 Switch on Name 节点

一、节点基础认知

1. 作用

Switch on NameFName 类型多路分支判断节点,等同于代码 switch(FName),根据输入 Name 值匹配预设分支执行逻辑,匹配失败走 Default 默认分支Epic Games。
图片[1]_虚幻引擎 Switch on Name 节点_虚幻引擎

2. 核心优势(对比 Switch on String)

  • 性能更高:FName 是引擎内部哈希存储,对比速度远快于字符串逐字符对比;大量分支逻辑优先用 Name
  • 资源标识原生适配:动画名、插槽名、标签 Tag、骨骼名、音效名、碰撞通道全是 FName,无需 String 转换
  • 大小写敏感可控:细节面板可开关Is Case Sensitive区分大小写

3. 引脚说明

  • In(执行输入):触发判断的执行线(如按键、BeginPlay、动画通知)
  • Selection(Name 输入):待匹配的 FName 变量 / 节点输出
  • 自定义 Case 输出引脚:每个引脚对应一个 Name 值,匹配则执行该分支
  • Default(默认输出):无任何匹配时执行,可在细节面板关闭

二、从零添加 & 配置节点 详细操作步骤

步骤 1:打开蓝图(以第三人称角色蓝图为例)

  1. UE5 编辑器 → 内容浏览器 → ThirdPerson/Blueprints → 双击打开BP_ThirdPersonCharacter
  2. 切换到 ** 事件图表(Event Graph)** 空白区域

步骤 2:创建 / 获取 Name 数据源(两种方式)

方式 A:创建自定义 Name 变量(静态赋值)

  1. 蓝图左侧我的蓝图面板 → 变量「+」
  2. 变量设置:
    • 变量名:CurrentActionTag
    • 变量类型:Name(不要选 String)
    • 默认值:Idle
    • 勾选可编辑实例(方便编辑器面板修改)
  3. 点击「编译」保存变量,拖动变量到图表 → 选择获取 CurrentActionTag

方式 B:引擎原生节点输出 Name(动态数据源,实战常用)

常用原生 Name 输出节点:
  • Get Montage Name(动画蒙太奇名称)
  • Get Socket Name(模型插槽名)
  • Get Actor Tag(Actor 标签)
  • Get Bone Name(骨骼名)
  • Get Platform Name As Name(平台名称转 Name)

步骤 3:添加 Switch on Name 节点

两种添加方法任选其一:

方法 1:右键搜索添加(通用)

  1. 图表空白处右键,搜索 Switch on Name,点击生成节点
  2. 刚生成只有InSelectionDefault三个引脚,无自定义 Case

方法 2:从 Name 引脚快速生成(推荐)

  1. 拖动「获取 CurrentActionTag」的 Name 输出引脚,向外拖拽松开
  2. 弹出菜单选择:Add a Branch or Switch node...Make a switch from this pin
  3. 自动生成Switch on Name,Selection 引脚已自动连线

步骤 4:配置匹配分支 Case(核心步骤)

  1. 选中图表中的Switch on Name节点,右侧打开 ** 细节(Details)** 面板
  2. 找到Pin Options → Pin Names数组,点击数组右侧 **+** 添加匹配项Epic Games
  3. 在新增输入框填入需要匹配的 Name,重复+添加多个分支:
    • 第 0 项:Idle
    • 第 1 项:Walk
    • 第 2 项:Attack
    • 第 3 项:Jump
  4. 关键参数:
    • Is Case Sensitive:勾选则区分大小写(Attackattack),日常逻辑建议取消勾选
    • Has Default Pin:取消勾选可移除默认分支(无匹配则不执行任何逻辑)
  5. 配置完成后,节点自动新增Idle、Walk、Attack、Jump四条执行输出引脚

步骤 5:连线与编写分支逻辑

  1. 触发执行源(如Event Tick/E键盘按下)连线到节点In输入
  2. Name 数据源连线到Selection
  3. 每个 Case 输出引脚连接对应业务逻辑:
    • Idle:播放待机动画
    • Walk:播放走路动画
    • Attack:播放攻击蒙太奇 + 生成子弹
    • Jump:播放跳跃动画 + 施加向上力
    • Default:打印日志「未知动作标签」

三、完整实战案例:根据动作 Tag 切换角色动画

案例需求

通过 FName 类型动作标签CurrentActionTag控制角色播放对应动画,未知标签输出提示日志。

完整操作流程

1. 准备资源

  • 4 个动画序列:Anim_Idle、Anim_Walk、Anim_Attack、Anim_Jump
  • 打开 BP_ThirdPersonCharacter,事件图表操作

2. 创建 Name 变量

变量名:CurrentActionTag,类型 Name,默认值Idle

3. 添加 Switch on Name 并配置分支

Pin Names 数组填写:IdleWalkAttackJump,取消大小写敏感

4. 搭建完整蓝图链路

  1. 触发入口:Event Tick(每帧检测动作标签)→ 连线 Switch on Name 的 In
  2. 获取CurrentActionTag → 连线 Selection
  3. 各分支逻辑:
    • Idle 分支:Play Animation → Anim_Idle,循环播放
    • Walk 分支:Play Animation → Anim_Walk
    • Attack 分支:Play Anim Montage → Montage_Attack;Print String「发起攻击」
    • Jump 分支:Add Impulse(Z 轴向上力 600);播放跳跃动画
    • Default 分支:Print String(文本:未知动作标签,Name=+ 转换 Selection 为 String)

5. 测试验证

  1. 蓝图点击「编译」「保存」
  2. 选中关卡内角色实例,右侧细节面板修改CurrentActionTag
    • 修改为Attack:运行游戏自动播放攻击动画
    • 修改为Run(未配置分支):控制台打印未知动作日志

四、高级实操技巧

1. 动态修改 Selection 实现分支切换

通过Set CurrentActionTag节点在按键事件修改 Name,实现动态切换:
  • W 键按下 → Set CurrentActionTag = Walk
  • 空格按下 → Set CurrentActionTag = Jump
  • 鼠标左键 → Set CurrentActionTag = Attack

2. 快速增删 Case 分支

  1. 增分支:细节面板 Pin Names 点+,填入新 Name
  2. 删分支:细节面板 Pin Names 点数组项右侧垃圾桶;或右键节点输出引脚 → Remove Execution Pin

3. 与动画通知 / 标签联动(高频场景)

动画通知内传递 FName 标签,传递到角色蓝图Switch on Name,实现动画分段逻辑(攻击前摇、攻击判定、后摇)。

4. 性能优化建议

  1. 大量分支(>5 个)优先Switch on Name,不要堆叠大量 Branch(If)节点
  2. 固定枚举逻辑用Switch on Enum,动态文本标签用Switch on Name,仅展示文本用 Switch on String

五、常见问题排查

  1. 分支不触发
    • 检查 Name 大小写:Is Case Sensitive是否勾选,输入 Name 与 Case 名称完全一致
    • Selection 引脚是否正确连线,变量是否被正确赋值
  2. 添加 Pin Names 后节点无新引脚
    • 选中节点后重新编译蓝图,刷新图表
  3. Default 一直执行
    • 确认 Selection 的 FName 和所有 Case 值无匹配;打印 Selection 转 String 查看真实值
  4. 和 Switch on String 混淆
    • 数据源是 FName(动画、Tag、插槽)必须用 Switch on Name,强制转换 String 会损失性能

六、简易蓝图逻辑流程图

plaintext
Event Tick(执行触发)
        ↓
获取 CurrentActionTag(Name数据源)
        ↓
Switch on Name(匹配判断)
├─ Idle → 播放待机动画
├─ Walk → 播放走路动画
├─ Attack → 播放攻击蒙太奇+打印攻击提示
├─ Jump → 施加跳跃力+播放跳跃动画
└─ Default → 打印未知动作日志

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容