Random.Range(float,float)不能使用实例引用进行访问;用类型名来代替它

问题描述 投票:-1回答:3

每当我尝试在两个参数之间生成一个随机数时,都会给我错误

Random.Range(float,float)不能使用实例引用进行访问;用类型名称来代替它]

我是团结的新手,将不胜感激的帮助

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawner : MonoBehaviour
{
    public GameObject enemy;
    float randx;
    float randy;
    Vector2 whereToSpawn;
    public float spawnRate = 2f;
    float nextSpawn = 0f;
    Random random = new Random();
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if(Time.time > nextSpawn)
        {
            nextSpawn = Time.time + spawnRate;
            randx = random.Range(-1.408f, 1.232f);
            randy = random.Range(0.776f, 1.232f);
            whereToSpawn = new Vector2 (randx, randy);
            Instantiate(enemy, whereToSpawn, Quaternion.identity);
        }
    }
}
c# unity3d
3个回答
0
投票

Random.Range是静态函数,因此必须在类型名称上调用它,而不是在Random实例上调用它。因此,就像您现在所做的一样,但是丢失了“ new Random()”的内容,而只说了Random.Range(...)。


0
投票

Range不是实例方法,必须通过其类型进行访问。替换为:

randx = random.Range(-1.408f, 1.232f);
randy = random.Range(0.776f, 1.232f);

带有此:

randx = Random.Range(-1.408f, 1.232f);
randy = Random.Range(0.776f, 1.232f);

0
投票

。NET Random上的大多数函数是实例函数。您需要一个实例来处理它们。常规建议是尽可能长地重用实例(创建多个实例将使随机性恶化,并且可以使用相同的值进行所有操作)。

。NET Random没有Range(Float, Float)函数。因此,您使用的是Mono的Random(随机),3rd party的Random(随机),或者周围有一些扩展方法。

不论哪种情况,编译器的确找到了标记为静态的Range函数。静态函数必须在类型本身而不是实例上调用。类似于您运行Float.TryParse()的方式。

© www.soinside.com 2019 - 2024. All rights reserved.