Unity C#出现Top-level statements编译报错问题咨询
问题根因
该报错与C#语言版本变更无关,是代码结构书写错误触发的编译器误导性提示,属于抄录教程代码时把变量放错了位置。
Top-Level(顶层)的含义
C#中的*Top-Level(顶层)*指代码文件内未被命名空间、类、结构体、方法等代码块包裹的最外层层级。C# 9.0新增顶层语句特性,允许直接在文件最外层写可执行代码,无需包裹在类的Main入口方法中,但该特性和当前报错无直接关联,此处的顶层语句相关报错是编译器解析代码结构失败后抛出的无效提示。
具体语法错误
代码存在两处基础语法问题,直接导致编译器解析逻辑错乱:
- 类成员变量被错误写在
Start()方法块内部 - 方法内的局部变量被错误添加了
public/private这类仅类/结构体成员可使用的访问修饰符
方法内部声明的局部变量作用域仅限当前方法,不允许添加访问修饰符;需要被类内多个方法(如本例中的Start、Update)访问的变量,必须声明在类的根层级,不能嵌套在方法块内。
修正后可正常编译的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class Button_Pressed : MonoBehaviour { // 类成员变量统一声明在类根层级,不要嵌套在方法内部 private int times = 5; public Text timesText; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { timesText.text = "Button pressed " + times + " times"; if (Input.GetKeyDown(KeyCode.Space)) { times++; } } }
内容的提问来源于stack exchange,提问作者Dookiiiii
相关产品推荐
相关产品推荐

