2017-08-03 152 views
-2

我正在使用隨機範圍來選擇一種敵對類型來產卵。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

回答

3

根據統一手冊:

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

5

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

相關問題