如何使Random.Range()步进一定量?

时间:2019-07-09 12:25:04

标签: c# unity3d

这是一个非常简单的问题,但是我找不到解决方法。可以说我有这行:

Random.Range(2,4);

我希望这不仅可以生成整数,还可以生成一半。我的意思是步长应该是0.5。我希望它仅从以下各项中随机选择: 2、2.5、3、3.5 我不要任何其他十进制数字。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

这是针对您的特定情况的简单解决方案。

var randomNumber = ((float)Random.Range(4, 8)) * 0.5f;

您还可以扩展该方法以使用不同的值。

public float GetRandomFloat(int min, int max, float value = 0.5f)
{
    int multipliedMin = (int) (max / value);
    int multipliedMax = (int) (max / value);

    return ((float) Random.Range(multipliedMin, multipliedMax)) * value;
}

答案 1 :(得分:0)

System.Random类没有您本机所需的功能,您可以为其创建自己的方法或扩展

方法

// use only one instance of System.Random to avoid getting duplicates
  static System.Random ra = new Random();
  static double GenRnadNum(int min,int max,double step)
        {
           //  calc the max-min and round down
            int n = (int)((max - min) / step);
            int r=  ra.Next(0, n);
            return min + r * step;
        }

用法示例dd.Add(GenRnadNum(5, 20, 0.7));

我看到许多人通过将最大值和最小值除以步长(最大值/步长,最小值/步长)来进行操作 然后将结果随机乘以步长(randomRestul * step) 但这会产生错误的结果,例如min = 2,max = 4,step = 0.3可以为您提供2.4(2 / 0.3 = 6.66-> 7,随机结果= 8,8 * 0.3 = 2.4)