【问题标题】:How can I use a special independent Random in unity via c#如何通过 c# 统一使用特殊的独立随机数
【发布时间】:2015-05-11 09:05:24
【问题描述】:

我想使用一个独立的 Random 实例,这样我就可以为这个独立的 Random 设置一个特殊的种子。我只希望这个 Random 的种子是特殊的,而全局的 Random.seed 是正常的。

我试试这个:

public Random newRandom = new Random();

但是我发现新的Random没有设置种子的功能,因为UnityEngine.Random.seed是一个静态成员。我该怎么做?

如果我成功设置种子,我想使用 newRandom.range(int, int) 来获取新值。

【问题讨论】:

  • public Random 有什么问题 newRandom = new Random(seed);
  • 我只是试试 public Random newRandom = new Random(1);但是统一告诉我“UnityEngine.Random' does not contain a constructor that takes 1' 类型的论点”
  • 你应该使用System.Random

标签: c# random unity3d


【解决方案1】:

我相信你混淆了UnityEngine.Random 类和System.Random 类。遗憾的是它们同名,很多开发者默认使用UnityEngineSystem(这也会导致Object类混淆)。

UnityEngine.Random 是完全静态的。所以,如果你写new Random(),而你没有得到编译错误,这意味着你在文件中有using System;,编译器实际上将你理解为new System.Random()

在这种情况下使用System.Random()实际上是一个不错的主意;请注意 UnityEngine.RandomSystem.Random 不能保证从同一个种子产生相同的值。当然,如果你想指定一个自定义种子,你应该这样做with the constructor new Random(int seed),就像@GreenEyedAndy 建议的那样。

【讨论】:

    【解决方案2】:

    Unity 和 Mono 都有一个 Random 类。

    Unity Random 允许您使用Random.seed 设置特定种子,但不能实例化。

    Mono Random 可以用一个特殊的种子实例化。

    您可能应该将System.Random 用于您的用例。

    只写:

    public System.Random newRandom = new System.Random(seed);
    

    你应该写System.Random,否则,即使你使用了System命名空间,你也会有歧义,编译器会报错。

    小心,因为它的工作方式并不完全相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      相关资源
      最近更新 更多