【问题标题】:Unity3d generate multiple random numbersunity3d生成多个随机数
【发布时间】: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) 如果该代码给出重复项,则说明代码中其他地方存在未显示的错误。

标签: c# unity3d random


【解决方案1】:

首先不要使用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.*

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多