【发布时间】:2016-12-16 18:17:02
【问题描述】:
我目前正在尝试为我正在制作的游戏一次生成两个随机(整数)数字。我正在尝试随机生成开始和结束图块。但是,当我这样做时,我的两个随机生成的数字总是相同的。我知道这可能只是因为它们被称为计算关闭在一起,但我找不到任何有关如何获得两个不同随机数的信息。我的代码很简单(在 c# 中):
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);
除非我做错了什么,否则我什至无法在 unity 中使用 rand.Next(x,x1) 函数。
实际代码:
private void SpawnStartandEndTiles()
{
Random rand = new Random();
int t = rand.N //<Next is not an option
//Other misc. Code that uses the random numbers
}
如果我不了解 Random 函数的工作原理,请告诉我。
非常感谢。
【问题讨论】:
-
随着你的更新,展示你如何声明
rand。 -
我不认为这是重复的,因为您使用的是 Unity 的
Random.Range而不是 .NET 的 Random 类。我不了解 Unity,但有一个Random.InitState方法可以使用整数种子值调用,因此潜在的解决方案是在Random.Range调用之间调用Random.InitState(new System.Random().Next())。但是依靠 .NET 的 random 生成一个随机种子然后生成另一个随机数似乎很奇怪.. 可能只是使用 .NET 的 random 本身。 -
澄清您使用的是
UnityEngine.Random而不是System.Random可能有助于重新提出问题。 -
我需要澄清我之前的评论,这是目前不正确的。如链接的副本所示,您只需创建一个
new System.Random(),然后在该单个实例上调用.Next()。如果您尝试我的建议,请不要每次都创建new Random(),否则您可能会遇到同样的问题。我之前的评论应该是Random.InitState(yourRandomInstantiation.Next()),其中var yourRandomInstantiation = new System.Random()只被调用一次。 -
@Joey 你永远不应该团结一致地打电话给
new Random()。将using UnityEngine;添加到文件顶部,然后执行int t = Random.Next(1.0f, 8.0f)如果该代码给出重复项,则说明代码中其他地方存在未显示的错误。