虚幻引擎节点 Switch on Int/Enum 详解

Switch on Int 和 Switch on Enum 是虚幻引擎5中实现多路分支逻辑的核心节点。你可以把它们想象成一个智能的“枢纽站”,当输入值改变时,它能自动将程序流程导向对应的“分支”,让蓝图逻辑在应对多种状态时保持干净利落

这里分别介绍 Switch on Int 和 Switch on Enum 的使用方法和案例。

🎯 Switch on Int:用整数做分支选择器

Switch on Int 节点就像一个数字开关,它会根据输入的整数值来决定执行哪一条后续路径

核心操作步骤

  1. 放置节点:在蓝图的空白区域右键,搜索 Switch on Int 并放置它。

  2. 理解节点结构:它主要有两部分:

    • 输入 (Input)

      • In (执行输入): 触发整个开关逻辑

      • Selection (选择值): 这里连接一个整数变量或数值,作为分支的判断标准

    • 输出 (Output)

      • Default (默认): 如果输入的整数和下面任何一个Case值都不匹配,默认执行这个分支

      • Case (具体数值): 这些是你可以自定义的“分支”。例如 Case 0Case 1 等。

  3. 自定义分支:操作主要集中在细节 (Details) 面板。

    • 设置起始值:你可以设置 Start Index,比如设为1,那么生成的第一个分支就是 Case 1

    • 添加/移除分支:点击“添加引脚 (Add pin)”即可添加新的分支。需要注意的是,移除引脚会导致它后面的分支整数值都减1来填补空缺

应用案例:AI 行为状态机

假设你想设计一个简单的AI敌人,它有“巡逻”、“追踪”和“攻击”三种行为模式,分别对应整数 0, 1, 2。通过 Switch on Int 来控制AI的行为状态非常清晰

  1. 创建状态变量:在角色蓝图中创建一个整数变量,例如命名为 CurrentAIState

  2. 构建核心逻辑:在事件图表(比如用 Event Tick 持续更新)中,创建 Switch on Int 节点,并将 CurrentAIState 连接到其 Selection 输入引脚。

  3. 配置分支逻辑

    • 当 CurrentAIState == 0 时,从 Case 0 引脚拉出连线,执行巡逻的逻辑(如随机移动)。

    • 当 CurrentAIState == 1 时,从 Case 1 引脚拉出连线,执行追踪玩家的逻辑。

    • 当 CurrentAIState == 2 时,从 Case 2 引脚拉出连线,执行攻击的逻辑。

    • 添加一个 Default 引脚,用于处理未定义状态的逻辑(例如,默认设置为巡逻)。

  4. 状态切换:当敌人发现玩家时,可以执行一个设置节点,将 CurrentAIState 的值设置为 1(追踪),这样下一次 Switch on Int 节点被触发时,就会执行追踪相关的逻辑。

🧩 Switch on Enum:更安全、更直观的选择

Switch on Enum 节点强烈推荐使用,因为它以有含义的名称而非“魔法数字”来区分分支,能极大地提高蓝图的可读性和可维护性。比如,相比记住“2代表攻击”,直接使用“Attack”作为分支名称要直观得多。

核心操作步骤

  1. 创建枚举 (Enum)

    • 在内容浏览器中右键,选择 蓝图 (Blueprints) -> 枚举 (Enum),并为其命名,例如 E_WeaponType

    • 双击打开,点击“添加枚举器”来添加武器类型,例如 PistolRifleRocket

  2. 在蓝图中使用

    • 在你的角色蓝图变量面板中,创建一个新变量,将其类型设置为 E_WeaponType 枚举,命名为 CurrentWeapon

    • 在事件图表中,右键搜索 Switch on E_WeaponType 并放置它(E_WeaponType 是你创建的枚举名)

  3. 体验智能分支:神奇的事情发生了:Switch on Enum 节点会自动为你枚举中的每一个选项都生成一个对应的输出引脚

  4. 连接分支逻辑:直接将 CurrentWeapon 变量连接到节点的 Selection 引脚,然后你就可以从 PistolRifle 等不同的引脚分别连接出不同的执行逻辑,实现武器切换功能

应用案例:武器切换系统

Switch on Enum 是实现武器切换功能的标准做法

  1. 准备就绪:接续上面的枚举 E_WeaponType,在角色蓝图中有变量 CurrentWeapon,并创建了 Switch on E_WeaponType 节点。

  2. 触发切换:创建一个新的自定义事件 SwitchWeapon,用于接收按键输入(如按数字1切换到手枪)。

  3. 实现切换逻辑

    • 在 SwitchWeapon 事件中,使用一个 设置 节点,将 CurrentWeapon 变量的值设置为期望的枚举类型(如 E_WeaponType::Pistol)。

    • 同时,在此处也放置 Switch on E_WeaponType 节点,并将 CurrentWeapon 连接到其 Selection 引脚。

  4. 连接具体行为

    • 从 Pistol 引脚连接逻辑:将角色装备的手枪网格体设为可见,步枪等设为隐藏,并播放一个切枪音效。

    • 从 Rifle 引脚连接逻辑:类似地,显示步枪,隐藏其他武器,播放换枪动画。

    • 以此类推为所有武器类型连接上对应的逻辑。

  5. 开火逻辑:在开火按钮的事件中,再次放置一个 Switch on E_WeaponType 节点。从这个节点的 PistolRifle 等不同引脚分别连接出不同的开火函数,这样每种武器就有了独立的射速、后坐力和弹道逻辑。

通过这两个案例,足以看出使用枚举让整个逻辑一目了然,并且当你后期想增加武器类型时,只需修改枚举,蓝图中的 Switch 节点会自动同步,不易出错

✨ 进阶技巧:合并节点

除了基础的 Switch on Int/Enum,虚幻引擎还提供了 Switch on String 和 Switch on Name 节点,它们的工作原理类似,但允许你根据字符串或名称进行分支选择。例如,你可以根据玩家输入的命令词来执行不同的逻辑。

另外,对于复杂的属性访问,Switch 系列节点还可以与 Get 节点(如 Get Object Type)结合使用,实现更精细的逻辑控制。

💎 总结与最佳实践

节点类型 优点 使用建议
Switch on Int 灵活,可用任何整数值分支,适合快速原型或数值范围固定的逻辑。 适用于场景较少且数值稳定的情况。
Switch on Enum 可读性高,易于维护,类型安全,杜绝“魔法数字” 强烈推荐作为首选方案。凡是涉及多种状态的处理,都优先使用枚举

💡 补充说明:Switch on Int 的移除逻辑

在编辑 Switch on Int 节点时,有一个容易被忽视的细节,这里帮你画个重点:

  • 移除引脚的影响:如果你移除了 Switch on Int 节点的某个输出引脚,例如移除了 Case 1 引脚,会导致它后面所有引脚的数值减 1,以此来填充空缺。

  • 示例:假设有 Case 0Case 1Case 2 三个引脚。当你移除了 Case 1 后,原先的 Case 2 会自动变为 Case 1。因此,在移除引脚前务必做好规划,以免引起逻辑错乱

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容