Unity创建SpriteDB类型ScriptableObject报无对应脚本资产错误
Unity创建ScriptableObject提示找不到脚本资产的解决方法
问题现象
尝试通过CreateAssetMenu创建自定义ScriptableObject资产时弹出报错:
No script asset for SpriteDB. Check that the definition is in a file of the same name and that it compiles properly
对应SpriteDB脚本代码如下:
using UnityEngine; using System.Collections; using System.Collections.Generic; [CreateAssetMenu(fileName = "SpriteDB", menuName = "AR+GPS/SpriteDB")] public class SpriteDB : ScriptableObject { public class Iconos{ public string nombre; public Sprite icon; public string url; } public List<Iconos> Entries; public Sprite GetEntryById(string Id) { Sprite result = null; foreach (var entry in Entries) { if (entry.nombre == Id) { result = entry.icon; break; } } return result; } }
相关文件结构与报错截图:

排查修复步骤
按以下顺序逐一排查即可解决问题:
- 检查脚本文件名匹配性:Unity强制要求,继承自
ScriptableObject、MonoBehaviour的顶层C#类,所在.cs文件的文件名必须和类名完全一致(大小写敏感)。确认存放SpriteDB类的脚本文件名为SpriteDB.cs,如果存在拼写偏差、大小写错误、多余后缀,直接重命名文件即可,这是该报错最常见的诱因。 - 排查全局编译错误:打开Unity Console面板,清空日志后等待脚本重新编译,只要项目中存在任意脚本编译错误,整个C#程序集都不会完成加载,SpriteDB类自然无法被识别。修复所有编译报错,等待编译进度条走完后再尝试创建资产。
- 补全序列化特性(解决后续Inspector赋值异常):你代码中嵌套的
Iconos类没有加序列化标记,即使资产创建成功,Inspector面板也无法正常显示和赋值Entries列表,需要给该类添加[System.Serializable]特性,修正后的代码段如下:[System.Serializable] public class Iconos{ public string nombre; public Sprite icon; public string url; } - 修复缓存异常:如果前两项检查都没有问题,关闭Unity,删除项目根目录下的
Library和Temp缓存文件夹,重新打开Unity等待资产全量重新导入、编译完成即可,这类问题一般是Unity资产数据库缓存损坏导致的偶发问题。 - 检查脚本所属程序集:确认SpriteDB脚本没有放在
Editor等纯Editor专属文件夹下,也没有被归入Editor类的程序集定义(asmdef)中,运行时使用的ScriptableObject类必须归属到运行时程序集,否则无法正常创建资产。
内容的提问来源于stack exchange,提问作者Jorge _
相关产品推荐
相关产品推荐

