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
相关产品推荐
相关产品推荐

