虚幻引擎 Random Integer in Range 节点

一、节点概述

Random Integer in Range 是虚幻引擎5蓝图数学库(Kismet Math Library)中的一个随机数生成节点,用于在指定的整数区间内生成一个随机整数。该节点在关卡蓝图、类蓝图以及动画蓝图中均可直接使用

该节点的主要参数如下:

参数方向 名称 类型 说明
输入(左侧) Min Integer 随机范围的下限(包含)
输入(左侧) Max Integer 随机范围的上限(包含)
输出(右侧) Return Value Integer 返回的随机整数值(≥ Min 且 ≤ Max)

随机整数是在Min值到Max值之间(包含两端)随机均匀生成的。

技术提示:此节点在UE5的蓝图数学库(Kismet Math Library)中实现。当蓝图每次执行时,如果蓝图被移动或重新评估,使用普通随机节点可能会导致不同的随机分布结果。如果需要可重复的随机行为(即每次运行都产生相同的随机序列),可以考虑使用RandomStream(随机流)来基于种子值生成可控的随机数

二、使用 Random Integer in Range 的基本操作步骤

步骤一:打开目标蓝图编辑器

根据你的使用场景选择对应的蓝图编辑器:

  • 关卡蓝图:点击UE5编辑器顶部工具栏的“蓝图”(Blueprints)图标,选择“打开关卡蓝图”(Open Level Blueprint)

  • 类蓝图:在内容浏览器中右键新建蓝图类(Blueprint Class),双击打开

步骤二:搜索并添加节点

在蓝图图表区域中,空白处右键单击打开节点选择菜单,在搜索框中输入 Random 或 Random Integer,你会看到包括Random Integer in Range在内的多个随机节点选项。选择 Random Integer in Range 节点并点击添加到图表中

步骤三:设置输入参数(Min 和 Max)

有以下三种方式为节点提供Min和Max参数:

方法A:直接输入常量值

  • 点击Min或Max输入框,直接键入整数值

方法B:使用整数变量

  • 在“我的蓝图”(My Blueprint)面板中创建整数(Integer)类型的变量

  • 将其拖拽到图表中,连接到Min和Max引脚

方法C:使用其他节点的输出

  • 将其他节点的整数输出引脚连接到Min或Max引脚

步骤四:连接输出并触发执行

Random Integer in Range节点没有执行引脚(白色三角箭头),它是一个纯函数节点(pure function)。这意味着:

  • 它不会主动执行,而是被其他节点调用时才会生成随机数

  • 只要将其输出连接到需要使用该随机值的其他节点引脚上,当该节点被调用时,随机数就会自动生成

步骤五:测试验证

保存并编译蓝图后,在编辑器中进行测试(如按游戏模式运行、点击某个触发交互等),观察该随机整数输出是否符合预期。

三、完整使用案例一:随机数组元素选择

场景描述

有一个包含4个箭头的Actor,玩家射击时需要随机选择其中一根箭头作为子弹的发射点。这是一个典型的随机数选择场景

操作步骤

1. 创建Actor蓝图

  • 在内容浏览器中右键 → 蓝图类 → 选择Actor → 命名为 BP_WeaponActor

  • 双击打开蓝图编辑器

2. 添加组件并保存为数组变量

  • 在组件面板中添加4个箭头组件(Arrow Component),分别命名为 SpawnPoint_0SpawnPoint_1SpawnPoint_2SpawnPoint_3

  • 在“我的蓝图”面板中,点击“+”新建一个变量,命名为 SpawnPointsArray,变量类型选择 Array,数组元素类型设为 Arrow Component(箭头组件引用)

  • 默认值设置:点击数组变量的默认值区域,将4个箭头组件添加到该数组中

  • 将变量编译选项设置为 Editable(可编辑),以便在实例中进行调试

3. 构建蓝图图表逻辑

  • 触发事件节点(例如,按鼠标左键时触发的 InputAction Fire 事件,或使用 E 键自定义事件等)

  • 从执行引脚引出一条线,右键添加 Spawn Actor 节点(用于生成子弹等投射物),并将 Spawn Transform 引脚连接到待创建的随机发射点位置

  • 添加 Random Integer in Range 节点:右键搜索并添加到图表中

  • 设置节点参数:Min设为0,Max设为3(数组索引范围,第一个数组元素索引为0,最后一个为3)

  • 添加 Get 节点访问数组变量:将 SpawnPointsArray 变量拖拽到图表中,选择“Get”

  • 添加 Get (a copy) 节点(读取数组元素):右键搜索并添加,此节点从数组中按索引取出一个元素,将 Random Integer in Range 节点的 Return Value 输出连接到该节点的 Index 输入引脚

  • 再添加 Get Actor Transform 节点获取箭头组件的世界变换:

    • 连接 Get (a copy) 的输出到 Get Actor Transform 的 Target 输入引脚

    • 该节点将输出箭头组件的 World Location(世界位置)、World Rotation(世界旋转)等

  • 最后,将 Get Actor Transform 的 Return Value 引脚连接到 Spawn Actor 节点的 Spawn Transform 引脚

4. 编译与测试

  • 点击“编译”(Compile)和“保存”(Save)

  • 将蓝图拖入关卡中

  • 运行游戏并测试发射功能,观察每次发射时是否从不同的箭头位置产生投射物(即是否随机选择发射点)

图表核心逻辑:

text
[鼠标左键事件] → [Random Integer in Range](Min=0, Max=3) → [Get数组元素@随机索引] → [Get Actor Transform] → [Spawn Actor]

四、完整使用案例二:随机掉落物品系统(带权重变体)

场景描述

击败敌人后随机掉落宝物,掉落池包括:普通药水(60%概率)、稀有宝石(30%概率)、传说之剑(10%概率)。使用 Random Integer in Range 生成1-100之间的随机整数进行区间判断(即权重随机机制)。例如:当随机数在1-60区间时掉落药水,61-90区间掉落宝石,91-100区间掉落剑

操作步骤

1. 准备物品蓝图类

  • 在内容浏览器中分别创建三个Actor蓝图类:BP_Potion(药水)、BP_Gem(宝石)、BP_Sword(剑)

  • 为每个蓝图添加简单的静态网格体以便观察

2. 创建敌人蓝图并添加变量

  • 新建蓝图类 BP_EnemyBase(基于Character或Actor)

  • 在“我的蓝图”面板创建以下整数类型变量(设置默认值):

    • CommonItemThreshold:默认60

    • RareItemThreshold:默认90

    • EpicItemThreshold:默认100

  • 这些阈值变量用于动态调整掉落概率

3. 构建掉落逻辑蓝图图表(核心部分)

当敌人被击败时(通常是死亡事件,例如 OnDeath 自定义事件),执行如下逻辑:

  • 添加 Random Integer in Range 节点,Min设为1,Max设为100(包含)

  • 其 Return Value 输出连接到一个 分支(Branch / If) 节点的输入判断引脚

  • 在分支节点之前依次比较随机数与各阈值的关系:

    • 首先,添加 < 或 <= 比较节点(位于“数学”类别中的“整数”类下):

      • 比较随机数是否 <= 60(普通物品阈值):

        • 若为真,执行 Spawn Actor 节点生成 BP_Potion

      • 若为假(即 >60),进一步比较随机数是否 <= 90

        • 若为真,执行 Spawn Actor 节点生成 BP_Gem

      • 若为假,执行 Spawn Actor 节点生成 BP_Sword

使用嵌套分支多个比较节点组合形成较为清晰的if-else结构。也可以使用更简洁的Switch on Int节点替代多层分支。

4. 可选:添加随机掉落数量

  • 可使用另一个 Random Integer in Range 节点控制掉落数量,例如Min设为1、Max设为3,控制物品掉落数量的随机变化

5. 编译与测试

  • 编译并保存敌人蓝图

  • 将敌人蓝图拖入关卡,运行游戏,击败多个敌人观察掉落物品的概率分布

五、进阶:随机流(RandomStream)

为什么需要RandomStream(随机流)

普通 Random Integer in Range 每次执行蓝图都会产生不同的随机值,且无法保证一致性。如果需要可重复的随机序列(例如程序化生成场景、放置树木石头时希望每次生成结果一样以便测试调试),可以使用 RandomStream。随机流基于初始种子(Initial Seed)生成随机序列,相同的种子始终生成相同的随机值序列

Random Integer in Range from Stream(基于随机流的整数随机)

节点介绍

  • Random Integer in Range from Stream 是 Random Integer in Range 的RandomStream变体,其功能是根据给定的随机流与范围输出一个随机整数。需要输入 RandomStream 变量(类型为特殊的结构体)。

使用RandomStream的基本步骤

1. 创建RandomStream变量

  • 在“我的蓝图”面板中点击“+”新建变量

  • 命名为 MyRandomStream变量类型在类型选择下拉框中搜索并选择 Random Stream

  • 在变量详细面板中,勾选 Instance Editable 并设置为 Expose on Spawn(若需在关卡中直接调试可将其公开为可编辑)

2. 使用RandomStream函数

  • 在蓝图图表中,右键搜索 Random Integer in Range From Stream 并添加到图表中

  • 将变量 MyRandomStream 拖拽到图表中,连接其输出到节点的 Stream 输入引脚

  • 设置Min和Max输入值

3. 控制种子值

  • 随机流的初始种子决定了整个随机序列,每次放置蓝图实例时会自动生成新的种子,不同实例有不同的随机表现

  • 如需手动控制,可使用 Set Random Stream Seed 节点来设置种子值

  • 也可在蓝图实例的“详细面板”中直接修改 Initial Seed 属性(需将变量暴露为可编辑)

可重复随机数的完整示例:程序化地面对话文本系统

如果你正在制作一款叙事类游戏,需要从一组对话文本中随机选择一句台词,但同时希望测试阶段每次运行游戏时相同的对话场景能显示相同的随机文本(以确保测试的一致性),则可使用 Random Integer in Range from Stream 配合RandomStream变量来实现这一需求。

六、常见问题排查

问题 解决方案
Random Integer in Range 无法找到该节点 确认在搜索时输入了正确的节点名称,检查是否误打在蓝图图表之外的区域,或者重新尝试:右键菜单 → Utilities(工具) → 输入Random查找
输出结果始终为Min值 检查Max的输入值是否大于Min。当Max ≤ Min时节点可能只返回Min
随机数不够“随机” 考虑改用RandomStream版本并确保每次执行时种子不同,或者检查蓝图执行逻辑是否存在缓存
蓝图编译报错 检查Min、Max引脚的连接是否正确,两者必须为整数类型,不能是Float等其他类型
每次运行游戏随机结果都相同 检查使用的RandomStream种子是否被固定为相同的值,若需要每次不同,应确保每次生成新实例时自动生成新种子,不要手动固定种子

七、小结

Random Integer in Range 是UE5蓝图系统中非常实用的随机数生成节点,其核心应用场景包括:随机数组元素选取、随机生成位置坐标、随机掉落系统、随机旋转角度、程序化生成道具数量、随机事件触发判断等。理解节点的Min/Max取值范围规则和纯函数的使用方式,并结合分支、比较等控制流节点,可以扩展出各种复杂的随机逻辑需求。而当需要可重复、可调试的随机序列时,使用 RandomStream 配合 Random Integer in Range from Stream 则是更优的选择

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容