2015-01-27 39 views
3

我發現的是如何創建隨機數字。大。但是,這種解決方案並不適用於其他功能。要創建一個隨機數,我用Unity3D中的隨機數字?

Random randomDirection = new Random(); 
int directionChoice = randomDirection.Next(1, 4); 

裏面的函數叫enemyWalk(){};

然而,這引起了一個錯誤:

Type 'UnityEngine.Random' does not contain a definition for 'Next' and no extension method 'Next' of type 'UnityEngine.Random' could be found (are you missing a using directive or an assembly reference?)

,當我把隨機整數發電機出功能的這個錯誤不會出現。任何解決方案來解決這個問題?

我希望能夠通過隨機選擇一個決定他走向哪個方向(上,左,右,或下)的整數,然後使用隨機雙發生器以確定它走過的距離。不過,我需要一個隨機數,每當調用enemyWalk(){};時都會產生一個隨機數。

+1

當您使用Unity時,它是否允許您使用.NET System.Random類?如果是這樣,你應該使用它(如布拉德利所建議的)。如果沒有,你應該清楚你的問題。 – 2015-01-27 01:33:24

回答

9

如果您使用統一,快速搜索表明,該方法如下:

Random.Range(minVal, maxVal); 

看到這裏Unity Documentation - Random

請請記住minVal包括maxVal獨佔當使用整數方法重載時返回的隨機值。在你的情況下,它將是:

Random.Range(1,4); 

而不是Next(1,4)。每使用花車

如果爲:

Random.Range(1.0F, 3.5F); 

兩個MINVAL和MAXVAL在這種情況下包容

我希望這會有所幫助。

+0

這完美的作品。但是,有沒有辦法做這樣的浮動數字?我希望能讓我的角色沿着這條線走3.5米或者其他東西。 – Jeff 2015-01-27 01:39:04

+0

'maxVal'是'Range'的整數超載專用。 – BradleyDotNET 2015-01-27 01:39:41

+0

我的錯誤。編輯。根據文檔,該方法支持浮點數作爲重載之一。 – Michael 2015-01-27 01:41:33

5

簡單的解決辦法是隻使用.NET的Random類,這恰好是在System命名空間:

using System; 

... 

//Or System.Random without the using 
Random randomDirection = new Random(); 
int directionChoice = randomDirection.Next(1, 5); 

如果你想使用統一的,叫Range而不是Next

int directionChoice = randomDirection.Range(1, 5); 

請注意,在這兩種情況下,「max」都是獨佔,所以您應該使用5來返回1和4之間的值(包括4)

要獲得隨機float

Random.NextDouble(); //careful, this is between 0 and 1, you have to scale it 
//Also, this one is exclusive on the upper bound (1) 

Random.Range(1f, 4f); //max is inclusive now 
+0

在範圍內看起來像[max is inclusive](http://docs.unity3d.com/ScriptReference/Random.Range.html),不是排他性的。 – 2015-01-27 01:34:24

+0

這可能看起來很愚蠢(我對此很陌生,不好意思),但我不確定我是否使用了這個權利。當我插入這個時,我得到了同樣的錯誤,但是這次它說「找不到類型的命名空間名'Math'。」但是,我不確定是否需要集成.NET?另外,我沒有在任何地方使用System.Math,我也不確定是否需要。 – Jeff 2015-01-27 01:34:28

+1

@GrantWinney float版本是包容性的,int版本是獨佔的。它取決於調用哪個超載。我相信在上述情況下,整數將是一個整數。 – BradleyDotNET 2015-01-27 01:35:42