2016-12-16 103 views
0

我目前正在嘗試爲我正在製作的遊戲一次生成兩個隨機(全部)數字。我試圖隨機生成一個開始和結束的瓷磚。當我這樣做時,我的兩個隨機生成的數字總是相同的。我明白這可能只是因爲他們被稱爲計算在一起關閉,但我找不到任何有關如何獲得兩個不同的隨機數字的信息。我的代碼很簡單(在C#中):Unity3d生成多個隨機數

float startTile = Mathf.Ceil(Random.Range(1.0f, 8.0f)); 
float endTile = Mathf.Ceil(Random.Range(1.0f, 8.0f)); 

提前謝謝!

編輯

這被標記爲重複的問題,其中對於老問題的答案是:

Random rand = new Random(); 
int t = rand.next(x,x2); 

除非我做得不正確,我無法甚至使用rand.Next(x,x1)函數在單位內。

enter image description here

的實際代碼:

private void SpawnStartandEndTiles() 
{ 
    Random rand = new Random(); 
    int t = rand.N //<Next is not an option 

    //Other misc. Code that uses the random numbers 
} 

請讓我知道,如果我只是沒有得到與隨機函數是如何工作的東西。

非常感謝。

+0

隨着你的更新的大小產生任何影響,展示如何你聲明瞭'rand'。 –

+0

我不認爲這是重複的,因爲你使用Unity的['Random.Range'](https://docs.unity3d.com/ScriptReference/Random.Range.html)而不是.NET的Random類。我不知道Unity,但是有一個['Random.InitState'](https://docs.unity3d.com/ScriptReference/Random.InitState.html)方法可以用一個整數種子值調用,所以一個潛在的解決方法是在'Random.Range'調用之間調用Random.InitState(new System.Random()。Next())'。但依靠.NET的隨機生成一個隨機種子,然後生成另一個隨機數似乎很奇怪..也許只是使用.NET的隨機本身。 – Quantic

+2

澄清您正在使用'UnityEngine.Random'而不是'System.Random'可能有助於重新打開問題。 – Quantic

回答

0

首先不要使用System.Random,因爲使用System命名空間(*)中的大多數類會大幅增加遊戲的大小。相反使用UnityEngine.Random

隨機數總是使用種子生成。給定一個特定的種子,隨機數序列總是相同的。你可以說計算隨機從來沒有真正的隨機。

通過將Random.seed設置爲取決於時間的值使Random.Range生成的數字接近真實的隨機數。

例如:

Random.seed = System.DateTime.Now.Millisecond; 
//... 
float startTile = Mathf.Ceil(Random.Range(1.0f, 8.0f)); 
float endTile = Mathf.Ceil(Random.Range(1.0f, 8.0f)); 

(*)這些是在mscorlib.dll中,因此不會對遊戲

System.Collection.* 
System.Collection.Generic.* 
System.IO.* 
+0

Unity的內建隨機類不包含[種子屬性或範圍方法](https://docs.unity3d.com/ScriptReference/Random.html)。 – Draco18s