You need to enable JavaScript to run this app. Unity开发C#报错CS1513:括号数量正确仍提示缺少}问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Unity开发C#报错CS1513:括号数量正确仍提示缺少}问题求助

CS1513报错原因及修复方案

根本原因

你看到的}缺失报错是C#编译器的误报,真正的语法错误是在方法内部的代码块中使用了public访问修饰符声明变量。
C#中public/private/protected这类访问修饰符只能用于类的成员(字段、方法、属性等,需要声明在类内部、所有方法外部),方法内部的局部变量不允许加访问修饰符,编译器遇到非法语法后无法正确解析代码结构,就会误判为缺少结束括号。

其他隐藏问题

  • 你在if和else分支中重复声明damage、range变量,即便去掉public修饰符,这种写法也会导致变量仅在当前分支块内有效,分支外无法访问,不符合武器切换修改属性的逻辑需求。
  • Unity原生Input API中不存在GetButtonHold方法,长按触发需要用Input.GetButton()。

修复后代码示例

首先将共用变量提到类级别作为成员字段,分支内仅修改变量值即可:

// 以下字段声明在PlayerShoot类内部、Update方法外部
public float fireRate;
public string equipped;
public float damage;
public float range;

void Update () 
{
    fireRate -= Time.deltaTime;
    if (equipped == "raygun") {
        damage = 25f;
        range = 100f;
        fireRate -= 0.8f;
             
        if (Input.GetButtonDown("Fire1") && fireRate <= 0) {
            Shoot();
        }
    } else {
        damage = 20f;
        range = 100f;
        fireRate -= 0.15f;

        if (Input.GetButton("Fire1") && fireRate <= 0) {
            Shoot();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:45:09