Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决';UnityEngine.Random';不包含';下一个'&引用;错误?_C#_Random_Unity3d - Fatal编程技术网

C# 如何解决';UnityEngine.Random';不包含';下一个'&引用;错误?

C# 如何解决';UnityEngine.Random';不包含';下一个'&引用;错误?,c#,random,unity3d,C#,Random,Unity3d,我正在写一个统一的游戏,我想创造 一个随机整数。。。我正在使用以下工具: public Random ran = new Random(); public int power = ran.Next(0, 10); 但当我想运行程序时,它会给我以下错误: 类型“UnityEngine.Random”不包含“Next”和“no”的定义 找不到类型为“UnityEngine.Random”的扩展方法“Next” (是否缺少using指令或程序集引用?) 有人能帮我找出哪里出了问题吗?你应该使用Sys

我正在写一个统一的游戏,我想创造 一个随机整数。。。我正在使用以下工具:

public Random ran = new Random();
public int power = ran.Next(0, 10);
但当我想运行程序时,它会给我以下错误:

类型“UnityEngine.Random”不包含“Next”和“no”的定义 找不到类型为“UnityEngine.Random”的扩展方法“Next” (是否缺少using指令或程序集引用?)


有人能帮我找出哪里出了问题吗?

你应该使用
System.Random
类,因为这个类有一个名为
Next
的方法。有关这方面的更多文档,请查看。我想这是您的错误,因为从您收到的错误消息中,很明显使用了
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);
    }
}
请尝试以下方法:

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

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

    var randomNumber = Random.Range(10);

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


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

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

你是在尝试使用System.Random()?看起来您的代码使用的是Unity的内容。请尝试在
随机
的两个实例之前添加一个
系统。
。您的下一个问题在这里得到了回答:@Henkholtman,很好,我甚至没有注意到这些是字段。非常感谢大家:)我将尝试您向我提出的建议,并让您知道是什么t正在发生!!!希望能帮助和其他有类似问题的人!!但再次感谢:)错误:字段初始值设定项不能引用非静态字段、方法或property@HenkHolterman我找到你了。我会相应地更新我的帖子。谢谢你发给我的好的catch.nXu(public System.Random ran=new System.Random();)非常完美:)它完全可以工作,没有任何错误,也不需要在程序中包含任何库或类!!!@MarizzaKyriakou我很高兴我提供了帮助!欢迎您。不要使用System。Unity中的Random!它在特定条件下不会生成与Unity的gameloop相关的变化数。这个答案很差,因为它无法解释在为什么这应该有效,但如果我没有错的话,UnityEngine类Random有Range static方法。例如:否决这一方法的人应该重新考虑。这似乎与DoanCan给出的答案没有显著差异。也许你可以添加一些解释,说明为什么你认为这更好。