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之间的随机数的替代方法。
根据统一手册:
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。
如果要生成0
和1
之间的随机数,则必须将2
传递给第二个参数。那应该是Random.Range(0, 2)
。
@EpicKip我不回答重复。我关闭所有重复项。 **这不是重复**。您提供的链接与此不重复。 1. OP使用'Random.Range'而不是'Random.Next'。 2.在Unity中生成随机数与使用C#标准API生成随机数不同。注意我在这个答案中链接的API。 – Programmer
我真的不确定为什么我没有在询问之前用这个问题开始搜索,对不起。 – OmBiEaTeR
'静态函数范围(min:int,max:int):int' 描述 返回min [inclusive]和max [exclusive](只读)之间的随机整数。 – Hristo
@OmBiEaTer,我不认为他们数上限数,所以你必须去+1 – EpicKip
'Random.Range(0,2)' – InBetween