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

Unity运行报错CS0117:'Score'无'score'定义,VSCode无报错如何解决?

报错原因及对应解决方案

error CS0117: 'Score' does not contain a definition for 'score' 本质是运行时AddScore类访问的Score类不是你写的带score静态字段的Score类,按以下优先级排查:

  • 检查Score脚本的文件名是否和类名完全一致
    Unity要求继承MonoBehaviour的类,类名必须和脚本文件名完全匹配,大小写也需要对应。比如你类名是Score,脚本文件名必须是Score.cs,只要有一个字符不符就会导致类无法被正常识别。
  • 检查是否存在重名的Score类
    如果你项目里其他脚本/导入的插件里也有叫Score的类,AddScore访问时会优先匹配到其他没有score字段的Score类。排查方式:
    1. 鼠标在VSCode里选中AddScore里的Score类名,按F12跳转,看跳转到的是不是你写的Score脚本
    2. 如果跳转错了,可以把你的Score类改个唯一的名字比如GameScore,对应修改访问代码为GameScore.score++即可,也可以用全局命名空间限定写法:global::Score.score++
  • 检查两个脚本的命名空间和存放路径
    1. 确认你的两个脚本都没有被自定义namespace包裹,如果其中一个加了命名空间,另一个脚本需要先using对应命名空间才能访问
    2. 确认Score脚本没有存放在Editor文件夹下,Editor文件夹下的代码仅在Unity编辑模式下编译,运行模式的游戏代码无法访问该文件夹内的类,把Score脚本移到普通的游戏代码目录(比如自建的Scripts文件夹)即可
  • 额外验证方案
    可以临时在AddScore的OnTriggerEnter2D方法里加一行调试代码,确认访问的类是否正确:
    private void OnTriggerEnter2D (Collider2D collision) {
        // 输出找到的Score类的所有公共静态字段数量,正常应该输出1(对应你定义的score字段)
        Debug.Log(typeof(Score).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static).Length);
        // Score.score++;
    }
    
    如果输出为0就说明你访问的不是自己写的Score类,按上面的步骤排查重名/文件名/路径问题即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:07