2016-12-16 162 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