Switch on Int 和 Switch on Enum 是虚幻引擎5中实现多路分支逻辑的核心节点。你可以把它们想象成一个智能的“枢纽站”,当输入值改变时,它能自动将程序流程导向对应的“分支”,让蓝图逻辑在应对多种状态时保持干净利落。
这里分别介绍 Switch on Int 和 Switch on Enum 的使用方法和案例。
🎯 Switch on Int:用整数做分支选择器
Switch on Int 节点就像一个数字开关,它会根据输入的整数值来决定执行哪一条后续路径。
核心操作步骤
-
放置节点:在蓝图的空白区域右键,搜索
Switch on Int并放置它。 -
理解节点结构:它主要有两部分:
-
输入 (Input):
-
In(执行输入): 触发整个开关逻辑。 -
Selection(选择值): 这里连接一个整数变量或数值,作为分支的判断标准。
-
-
输出 (Output):
-
Default(默认): 如果输入的整数和下面任何一个Case值都不匹配,默认执行这个分支。 -
Case(具体数值): 这些是你可以自定义的“分支”。例如Case 0,Case 1等。
-
-
-
自定义分支:操作主要集中在细节 (Details) 面板。
-
设置起始值:你可以设置
Start Index,比如设为1,那么生成的第一个分支就是Case 1。 -
添加/移除分支:点击“添加引脚 (Add pin)”即可添加新的分支。需要注意的是,移除引脚会导致它后面的分支整数值都减1来填补空缺。
-
应用案例:AI 行为状态机
假设你想设计一个简单的AI敌人,它有“巡逻”、“追踪”和“攻击”三种行为模式,分别对应整数 0, 1, 2。通过 Switch on Int 来控制AI的行为状态非常清晰。
-
创建状态变量:在角色蓝图中创建一个整数变量,例如命名为
CurrentAIState。 -
构建核心逻辑:在事件图表(比如用
Event Tick持续更新)中,创建Switch on Int节点,并将CurrentAIState连接到其Selection输入引脚。 -
配置分支逻辑:
-
当
CurrentAIState == 0时,从Case 0引脚拉出连线,执行巡逻的逻辑(如随机移动)。 -
当
CurrentAIState == 1时,从Case 1引脚拉出连线,执行追踪玩家的逻辑。 -
当
CurrentAIState == 2时,从Case 2引脚拉出连线,执行攻击的逻辑。 -
添加一个
Default引脚,用于处理未定义状态的逻辑(例如,默认设置为巡逻)。
-
-
状态切换:当敌人发现玩家时,可以执行一个
设置节点,将CurrentAIState的值设置为 1(追踪),这样下一次Switch on Int节点被触发时,就会执行追踪相关的逻辑。
🧩 Switch on Enum:更安全、更直观的选择
Switch on Enum 节点强烈推荐使用,因为它以有含义的名称而非“魔法数字”来区分分支,能极大地提高蓝图的可读性和可维护性。比如,相比记住“2代表攻击”,直接使用“Attack”作为分支名称要直观得多。
核心操作步骤
-
创建枚举 (Enum):
-
在内容浏览器中右键,选择 蓝图 (Blueprints) -> 枚举 (Enum),并为其命名,例如
E_WeaponType。 -
双击打开,点击“添加枚举器”来添加武器类型,例如
Pistol,Rifle,Rocket。
-
-
在蓝图中使用:
-
在你的角色蓝图变量面板中,创建一个新变量,将其类型设置为
E_WeaponType枚举,命名为CurrentWeapon。 -
在事件图表中,右键搜索
Switch on E_WeaponType并放置它(E_WeaponType是你创建的枚举名)。
-
-
体验智能分支:神奇的事情发生了:
Switch on Enum节点会自动为你枚举中的每一个选项都生成一个对应的输出引脚。 -
连接分支逻辑:直接将
CurrentWeapon变量连接到节点的Selection引脚,然后你就可以从Pistol,Rifle等不同的引脚分别连接出不同的执行逻辑,实现武器切换功能。
应用案例:武器切换系统
Switch on Enum 是实现武器切换功能的标准做法。
-
准备就绪:接续上面的枚举
E_WeaponType,在角色蓝图中有变量CurrentWeapon,并创建了Switch on E_WeaponType节点。 -
触发切换:创建一个新的自定义事件
SwitchWeapon,用于接收按键输入(如按数字1切换到手枪)。 -
实现切换逻辑:
-
在
SwitchWeapon事件中,使用一个设置节点,将CurrentWeapon变量的值设置为期望的枚举类型(如E_WeaponType::Pistol)。 -
同时,在此处也放置
Switch on E_WeaponType节点,并将CurrentWeapon连接到其Selection引脚。
-
-
连接具体行为:
-
从
Pistol引脚连接逻辑:将角色装备的手枪网格体设为可见,步枪等设为隐藏,并播放一个切枪音效。 -
从
Rifle引脚连接逻辑:类似地,显示步枪,隐藏其他武器,播放换枪动画。 -
以此类推为所有武器类型连接上对应的逻辑。
-
-
开火逻辑:在开火按钮的事件中,再次放置一个
Switch on E_WeaponType节点。从这个节点的Pistol,Rifle等不同引脚分别连接出不同的开火函数,这样每种武器就有了独立的射速、后坐力和弹道逻辑。
通过这两个案例,足以看出使用枚举让整个逻辑一目了然,并且当你后期想增加武器类型时,只需修改枚举,蓝图中的 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 0,Case 1,Case 2三个引脚。当你移除了Case 1后,原先的Case 2会自动变为Case 1。因此,在移除引脚前务必做好规划,以免引起逻辑错乱。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容