You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity报错:Random.Range需以类型名访问,不可用实例引用

解决Unity中Random.Range的实例调用报错问题

嘿,刚接触Unity遇到这种报错太正常了,我来帮你快速搞定~

你遇到的错误 Random.Range(float, float) cannot be accessed with an instance reference; qualify it with a type name instead,核心原因是你误用了静态方法的调用方式:

你在代码里写了 Random random = new Random();,试图创建一个Random类的实例,然后用这个实例去调用Range方法。但Unity引擎提供的Random.Range是一个静态方法——静态方法不需要创建类的实例,直接通过类名Random调用就可以。更关键的是,你实例化的其实是C#标准库的System.Random类,和Unity自带的UnityEngine.Random不是同一个东西,这就导致了调用冲突。

修复步骤很简单:

  1. 删除多余的实例化代码:把Random random = new Random();这一行直接删掉,完全不需要创建Random实例。
  2. 修改Range方法的调用方式:把Update方法里的random.Range(...)改成Random.Range(...),直接通过Unity的Random类名调用静态方法。

修改后的完整代码:

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;

    // 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,要注意Unity的版本是左闭右开区间(比如Random.Range(1, 3)只会返回1或2),而C#标准库的System.Random是左闭右闭区间。不过你现在用的是float参数,两者都是左闭右闭,不用担心这个差异~

内容的提问来源于stack exchange,提问作者Rice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:02:33