如何解决"'UnityEngine.Random'不包含'Next'的定义......"错误?

Mar*_*kou 9 c# random unity-game-engine

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

public Random ran = new Random();
public int power = ran.Next(0, 10);
Run Code Online (Sandbox Code Playgroud)

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

类型'UnityEngine.Random'不包含'Next'的定义,也没有找到'UnityEngine.Random'类型的扩展方法'Next'(你是否缺少using指令或汇编引用?)

有什么人帮我解决了什么问题???

Chr*_*tos 16

您应该使用System.Random该类,因为此类有一个名为的方法Next.有关此问题的进一步文档,请查看此处.我想这是你的错误,因为从你得到的错误信息中,很明显UnityEngine.Random该类被使用而不是System.Random.在代码方面,我会尝试这样做:

public System.Random ran = new System.Random();
public int power = ran.Next(0, 10);
Run Code Online (Sandbox Code Playgroud)

更新

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

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

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

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

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

a)制作 ran成为静态的:

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

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

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

    public Program()
    {
       power = ran.Next(0, 10);
    }
}
Run Code Online (Sandbox Code Playgroud)