每当我尝试在两个参数之间生成一个随机数时,都会给我错误
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);
}
}
}
Random.Range是静态函数,因此必须在类型名称上调用它,而不是在Random实例上调用它。因此,就像您现在所做的一样,但是丢失了“ new Random()”的内容,而只说了Random.Range(...)。
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);
。NET Random上的大多数函数是实例函数。您需要一个实例来处理它们。常规建议是尽可能长地重用实例(创建多个实例将使随机性恶化,并且可以使用相同的值进行所有操作)。
。NET Random没有Range(Float, Float)
函数。因此,您使用的是Mono的Random(随机),3rd party的Random(随机),或者周围有一些扩展方法。
不论哪种情况,编译器的确找到了标记为静态的Range函数。静态函数必须在类型本身而不是实例上调用。类似于您运行Float.TryParse()
的方式。