无法创建静态类“Random”的实例

4 c# unity-game-engine

你好,我已经从常规编码转向使用 Unity,但我在看似简单的事情上遇到了错误。这是这里,提前致谢。

错误:资产/启动 Biome.cs(8,18):错误 CS0712:无法创建静态类“Random”的实例

错误:资产/启动 Biome.cs(8,7):错误 CS0723:无法声明静态类型“随机”的变量

错误:资产/启动 Biome.cs(9,23):错误 CS1061:“随机”不包含“下一步”的定义,并且找不到接受“随机”类型的第一个参数的可访问扩展方法“下一步”(您是否缺少 using 指令或程序集引用?)

这是我的代码:

    using UnityEngine;
    using System.Runtime;

    public class StartingBiome : MonoBehaviour{
    // Start is called before the first frame update
    static void StrBiome(){
      var RndB = new Random();
      int StrB = RndB.Next();
    }
    void Start()
    {

    }
    // Update is called once per frame
    void Update()
    {

    }
    }
Run Code Online (Sandbox Code Playgroud)

der*_*ugo 17

有静态类UnityEngine.Random,也有System.Random.

既然你有

using UnityEngine;
Run Code Online (Sandbox Code Playgroud)

在你的脚本中但不是

using System;
Run Code Online (Sandbox Code Playgroud)

对于编译器来说,很明显您指的是UnityEngine.Random.


现在你可以明确地使用

var RndB = new System.Random();
var StrB = RndB.Next();
Run Code Online (Sandbox Code Playgroud)

或者添加一个

using Random = System.Random;
Run Code Online (Sandbox Code Playgroud)

在脚本的顶部,然后使用你所拥有的。

var RndB = new Random();
var StrB = RndB.Next();
Run Code Online (Sandbox Code Playgroud)

UnityEngine.Random专为float( )设计Random.value。对于int值,您必须通过UnityEngine.Random.Range并获得与(仅返回正值)相同的行为,System.Random.Next您必须这样做

using UnityEngine;

...

var StrB = Random.Range(0, int.MaxValue);
Run Code Online (Sandbox Code Playgroud)

现在你选择这两个中的哪一个是一个偏好问题。

通过System.Random您创建一个实例,使用它一次然后扔掉它..但这对您的情况来说并不重要。