2015-01-27 204 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