Random.Range每次调用都不改变它的结果,为什么?

问题描述:

我正在使用随机范围来选择一种敌对类型来产卵。Random.Range每次调用都不改变它的结果,为什么?

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之间的随机数的替代方法。

+3

'静态函数范围(min:int,max:int):int' 描述 返回min [inclusive]和max [exclusive](只读)之间的随机整数。 – Hristo

+2

@OmBiEaTer,我不认为他们数上限数,所以你必须去+1 – EpicKip

+1

'Random.Range(0,2)' – InBetween

根据统一手册:

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); 

说明 返回分钟包容]和MAX [独家](只读)之间的随机整数。 请注意,max是独占,所以使用Random.Range(0,10)将返回0到9之间的值。如果max等于min,min将被返回。

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

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

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

+5

@EpicKip我不回答重复。我关闭所有重复项。 **这不是重复**。您提供的链接与此不重复。 1. OP使用'Random.Range'而不是'Random.Next'。 2.在Unity中生成随机数与使用C#标准API生成随机数不同。注意我在这个答案中链接的API。 – Programmer

+0

我真的不确定为什么我没有在询问之前用这个问题开始搜索,对不起。 – OmBiEaTeR