问题描述

  • 脚本无法拖拽到或添加到场景中的物体上

  • Inspector 中无法显示 public 变量 - 解决方案

  • 在 Inspector 中,点击 Add Component 按钮,添加脚本没反应或者根本无法找到脚本

  • 出现报错:
    Can't add script component 'xxx' because the script class cannot be found.
    Make sure that there are no compile errors and that the file name and class name match.

脚本无法添加 - 解决方案

我在最后一步终于解决了,很无语的问题,但是希望你能在前面几步中就解决呢 >︿<

首先确保你已经尝试过最基本的:重启 Unity 和重启电脑,如果无效再看接下来几步哦

一、 文件名与类名不一致

在 Unity 中,类名与文件名必须完全一致(包括大小写)

如果脚本的文件名是 Test.cs,那么脚本中的类名必须是 Test,且大小写匹配。

二、 脚本存在编译错误

如果脚本存在编译错误,那么无法添加到物体上。

三、 脚本未保存

如果脚本未保存,那么无法添加到物体上。

四、 脚本没有继承 MonoBehaviour 类

Unity 只能将继承自 MonoBehaviour 的脚本作为组件挂载到 GameObject 上。

如果你的脚本没有继承 MonoBehaviour,它将无法作为组件添加。

五、 脚本文件放置位置不正确

Unity 只会识别放在 Assets 文件夹下的脚本文件。

如果你的脚本文件在项目的其他地方(如桌面或其他路径),Unity 也无法识别它。

六、 命名空间问题

如果你的脚本在命名空间内,Unity 可能无法找到该类,除非你引用了正确的命名空间。

七、 重新创建脚本

如果以上方法都无法解决问题,可以尝试重新创建脚本。

八、项目创建的模版问题!!!

总所周知 Unity 创建项目时,有多个模版提供选择,按照渲染管线分:

  • Unity6 之前:
    • Built-in Render Pipeline
    • Universal Render Pipeline (URP)
    • High Definition Render Pipeline (HDRP)

如果你的项目正好是基于 Built-in Render Pipeline 创建的,那这可能就是问题原因

有时使用 Built-in Render Pipeline 模板创建的项目会出现一些奇怪的行为,尤其是在 脚本编译 和 渲染设置 方面

尝试使用 SRP模版(即 URP 或 HDRP) 创建项目

Inspector 中无法显示 public 变量 - 解决方案

发现这个问题和上一个其实有关联

一、脚本未继承自 MonoBehaviour

二、字段不是可序列化的类型

可序列化的类型包括:

  • 基本类型(如 int、float、bool)
  • string
  • UnityEngine 类型(如 Vector3, GameObject 等)
  • 标记为 [System.Serializable] 的自定义类或结构体

三、使用了属性(Property)而不是字段(Field)

Unity 不会显示 get / set 属性,只会显示字段。如果你使用了属性,即使是 public,也不会显示。

1
public int MyValue { get; set; } // 不会显示
1
public int myValue; // 会显示

四、 字段被 [HideInInspector] 隐藏

1
2
[HideInInspector]
public int myValue; // 不会显示

五、 脚本未正常编译!!!

我也是终于在这一步发现问题了

一般来说对脚本更改做出更新后,返回 Unity 窗口时,Unity 会自动编译脚本。

也就是会弹出一个窗口显示 Compiling…

如果这个窗口没有弹出,那么脚本将无法正常编译,也就无法添加到物体上,Inspector 中也不会显示 public 变量

那么什么情况会导致脚本没正常编译呢?

我的话,发现是因为项目创建的模版为 Built-in Render Pipeline,会导致脚本不自动编译 XD

所以我说真的,一般情况下,尽量选择 SRP 模版创建项目,除非你真的需要 Built-in Render Pipeline

不过 Unity 6 开始,直接没有 Built-in Render Pipeline 模版了