如何让Random.Range()按指定步长生成随机数?以步长0.5为例
实现步长为0.5的目标随机数值选取
其实这个需求很好解决,换个思路就能轻松实现——我们可以通过整数随机数转换,或者直接从预设的可选值里抽取,来精准得到你要的2、2.5、3、3.5这些数值。下面给你两种实用方案:
方案一:整数随机数转半整数
你要的数值可以看作是「基础值2 + 0.5的整数倍」,总共对应4个倍数(0、1、2、3)。我们先生成这个倍数的随机整数,再做转换就行:
// 先生成0-3的随机整数,再转换成目标半整数 float randomValue = 2f + Random.Range(0, 4) * 0.5f;
简单解释:Random.Range(0,4)会返回0、1、2、3中的任意整数,乘以0.5后得到0、0.5、1、1.5,加上基础值2就正好是你要的那四个半整数啦。
方案二:从预设数组中随机取值
如果觉得计算逻辑不够直观,也可以直接把所有符合要求的数值放进数组,随机选取数组元素:
float[] targetValues = new float[] { 2f, 2.5f, 3f, 3.5f }; float randomValue = targetValues[Random.Range(0, targetValues.Length)];
这种方法的优势是后续调整可选值时,直接修改数组内容即可,不需要改动计算逻辑,非常灵活。
补充:为什么原写法达不到效果?
顺便提一句,你最初写的Random.Range(2,4)在Unity里是整数范围的随机(因为传入的是int参数),只会返回2、3这两个整数;如果改成Random.Range(2f,4f),又会生成2到4之间的任意浮点数,会出现2.1、3.8这类不符合要求的数值,所以才需要用上面的方法来限制步长。
内容的提问来源于stack exchange,提问作者Itai Elidan
相关产品推荐
相关产品推荐

