我正在使用随机范围来选择产生的敌人类型。
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之间的随机数的替代方法。
答案 0 :(得分:5)
Unity Random.Range
第二个参数是独占的,这意味着Unity不包含它。它包括max-1。
如果要在0
和1
之间生成随机数,则必须将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)。