Random.Range每次调用时都不会改变其结果,为什么?

时间:2017-08-03 09:36:27

标签: c# unity3d random delegates

我正在使用随机范围来选择产生的敌人类型。

IEnumerator Spawn()
    {
        int randAmount = UnityEngine.Random.Range(minAmount, maxAmount); // Determine quantity of enemies to be spawned
        int randType = UnityEngine.Random.Range(0, 1); // Determine which enemy is spawned
        enemies[randType](randAmount); // Call enemy type, then amount
        yield return new WaitForSeconds(spawnRate);
        StartCoroutine(Spawn()); // Loop
    }

当与调试器连接到统一时,我可以看到每次调用协程时randAmount都会改变,但是randType没有从0改变,我一直在测试,而且我我开始认为它不再是运气不好。

我知道第一个变量工作正常,无论如何都要确保第二个变量正常工作,或者每次调用协程时获取0到1之间的随机数的替代方法。

2 个答案:

答案 0 :(得分:5)

Unity Random.Range第二个参数是独占的,这意味着Unity不包含它。它包括max-1。

如果要在01之间生成随机数,则必须将2传递给第二个参数。那应该是Random.Range(0, 2)

答案 1 :(得分:3)

根据Unity手册:

public static float Range(float min, float max);
  

描述   返回介于和[包含]和最大[包含]之间的随机浮点数(只读)。   请注意,max是包含,因此使用Random.Range(0.0f,1.0f)可以返回1.0作为值。

但是

public static int Range(int min, int max);
  

描述   返回min [inclusive]和max [exclusive](只读)之间的随机整数。   请注意,max是独占,因此使用Random.Range(0,10)将返回0到9之间的值。如果max等于min,则返回min。

所以解决方案是从(0,1)变为(0,2)。