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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:18:04