Unity 脚本无法拖拽到或添加到物体上
问题描述
脚本无法拖拽到或添加到场景中的物体上
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 | [ ] |
五、 脚本未正常编译!!!
我也是终于在这一步发现问题了
一般来说对脚本更改做出更新后,返回 Unity 窗口时,Unity 会自动编译脚本。
也就是会弹出一个窗口显示 Compiling…
如果这个窗口没有弹出,那么脚本将无法正常编译,也就无法添加到物体上,Inspector 中也不会显示 public 变量
那么什么情况会导致脚本没正常编译呢?
我的话,发现是因为项目创建的模版为 Built-in Render Pipeline,会导致脚本不自动编译 XD
所以我说真的,一般情况下,尽量选择 SRP 模版创建项目,除非你真的需要 Built-in Render Pipeline
不过 Unity 6 开始,直接没有 Built-in Render Pipeline 模版了