【问题标题】:How to resolve "'UnityEngine.Random' does not contain a definition for 'Next' ..." error?如何解决“'UnityEngine.Random'不包含'Next'的定义......”错误?
【发布时间】:2015-03-23 14:05:39
【问题描述】:

我正在统一编写游戏,我想创建 一个随机整数...我正在使用以下内容:

public Random ran = new Random();
public int power = ran.Next(0, 10);

但是当我想运行程序时,它给了我以下错误:

类型“UnityEngine.Random”不包含“下一个”的定义,也没有 可以找到“UnityEngine.Random”类型的扩展方法“Next” (您是否缺少 using 指令或程序集引用?)

有人帮我解决问题吗???

【问题讨论】:

  • 您是否尝试使用 System.Random (msdn.microsoft.com/en-us/library/…)?看起来您的代码正在使用 Unity 中的某些内容。尝试在Random 的两个实例之前添加System.
  • 您的下一个问题在这里得到解答:stackoverflow.com/questions/21564610/…
  • @HenkHolterman,很好的收获;我什至没有注意到这些是字段。
  • 非常感谢你们所有人 :) 我会尝试你们对我的建议,我会让你们知道发生了什么!!!并希望能帮助和其他有类似问题的人!但再次感谢:)

标签: c# random unity3d


【解决方案1】:

您应该使用System.Random 类,因为该类有一个名为Next 的方法。有关这方面的更多文档,请查看here。我想这是您的错误,因为从您收到的错误消息中,很明显使用了UnityEngine.Random 类而不是System.Random。在代码方面,我会试试这个:

public System.Random ran = new System.Random();
public int power = ran.Next(0, 10);

更新

使用System.Random 我们将解决命名冲突的问题,但会出现另一个问题。在类的主体中键入上述两行,如下所示:

public class Program
{
    public System.Random ran = new System.Random();
    public int power = ran.Next(0, 10);
}

您会注意到编译器会警告您发生了错误,如果您尝试构建项目,您将收到以下消息:

字段初始值设定项不能引用非静态字段、方法或 属性

为了解决这个问题,有两种选择:

a) 将ran 设为静态:

public class Program
{
    public static System.Random ran = new System.Random();
    public int power = ran.Next(0, 10);
}

b) 将power的初始化移到构造函数内部:

public class Program
{
    public System.Random ran = new System.Random();
    public int power;

    public Program()
    {
       power = ran.Next(0, 10);
    }
}

【讨论】:

  • 错误:字段初始化器无法引用非静态字段、方法或属性
  • @HenkHolterman 我知道了。我会相应地更新我的帖子。谢谢你的好收获。
  • nXu 你发给我的东西 (public System.Random ran = new System.Random();) 非常完美 :) 它完全可以正常工作,没有任何错误,也不需要在其中包含任何库或类程序!!!
  • @MarizzaKyriakou 我很高兴能帮上忙!欢迎您。
  • 不要在 Unity 中使用 System.Random!它不会在特定条件下生成不同的数字,这与 Unity 的游戏循环有关。
【解决方案2】:

试试这个:

var number = Random.Range(0,10);

【讨论】:

【解决方案3】:

Unity 有一个内置的 Random 类。相反,您可以使用:

    var randomNumber = Random.Range(10);

【讨论】:

  • 这似乎与 DoanCan 给出的答案没有显着差异。也许您可以添加一些解释,说明为什么您认为这更好。
【解决方案4】:

正如其他人所说,Unity 有自己的伪随机数生成器,这是您自动获取的,并且正如 nightRider 所说,该 PRNG 的语法是 var number = Random.Range(0,10)

它通常是您在 Unity 中想要的浮点数,因此使用 Unity 自己的 PRNG 可以避免 可能的开销(我没有测试过)必须生成双精度并将它们转换为浮点数,而且它还自动为所有脚本提供一个 PRNG,当您想要使用种子初始化 PRNG 以实现一致的行为时,这可以简化调试。它还提供了一些其他面向游戏的方法和属性,例如在单位球体内部或之上生成随机点。另一方面,它不提供位或双伪随机数,所以如果你想要很多,那么 System.Random 可能是一个更好的选择,但对于调试时的可重复行为,你需要使 PRNG 通用到所有脚本并只播种一次,这有点让人头疼。

【讨论】:

    【解决方案5】:

    您是否尝试过删除“使用系统”?因为如果你写 Random 它不知道你是指 System 还是 UnityEngine 中的 Random。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2021-12-16
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 2022-07-06
      • 2018-12-25
      相关资源
      最近更新 更多