Unity中继承MonoBehaviour的类使用构造函数触发new关键字报错
问题原因
Unity 中所有继承自 MonoBehaviour 的类都禁止显式定义构造函数,也不允许通过 new 关键字手动实例化。你遇到的报错是因为你为 ScoreData 定义了自定义构造函数,Unity 引擎内部加载该类时会自动触发构造函数调用,本质上等同于隐式执行了 new 逻辑,触发了引擎的规则校验。
你提到教程中代码可正常运行,是因为教程使用的是较低版本 Unity,早期版本对该规则仅做警告提示,2020 及之后的新版本 Unity 将该校验升级为强制报错,才会出现你的项目报错、教程代码正常运行的差异。
解决方法
可根据你的实际使用场景选择以下任意方案:
- 方案1:移除 MonoBehaviour 继承
如果你不需要将ScoreData挂载到游戏对象上、也不需要用到 Unity 生命周期函数,直接去掉继承关系即可,原有构造函数可以保留,代码修改如下:public class ScoreData { public List<Score> scores; public ScoreData() { scores = new List<Score>(); } } - 方案2:保留 MonoBehaviour 继承,将初始化逻辑移到生命周期函数中
删掉自定义构造函数,把列表初始化逻辑放到Awake或Start中即可,代码修改如下:public class ScoreData : MonoBehaviour { public List<Score> scores; private void Awake() { scores = new List<Score>(); } } - 方案3:改为继承 ScriptableObject
如果该类仅用于存储排行榜数据,可修改为继承ScriptableObject,通过创建资源实例的方式使用,无需挂载到游戏对象。
内容的提问来源于stack exchange,提问作者KHAIRUL AZANNI AMRAN
相关产品推荐
相关产品推荐

