Unity 2021 LTS中Resources.Load<GameObject>()加载不一致,部分返回Null
Unity Resources.Load 部分预制体加载返回Null的解决方法
检查路径格式是否符合要求
Resources.Load的路径有严格规则:- 必须是相对于Assets/Resources文件夹的路径,不能包含"Assets/Resources"前缀
- 不能带
.prefab后缀 - 注意大小写差异(Windows编辑器下不区分,但打包后或跨平台会严格校验)
例如预制体在Assets/Resources/Prefabs/enemyP.prefab,正确路径应为"Prefabs/enemyP",而非"Assets/Resources/Prefabs/enemyP"或"Prefabs/enemyP.prefab"。
验证预制体本身的有效性
- 选中无法加载的预制体,在Inspector确认其Asset Type为Prefab,且能正常拖入场景使用(若拖入场景报错,说明预制体损坏,需重新创建)
- 确保预制体确实位于
Assets/Resources或其子文件夹内,且未被排除在构建资源之外(可在Player Settings -> Other Settings -> Configuration中检查资源包含情况)
调整加载代码并增加错误日志
修改加载逻辑,增加空判断和详细错误日志,精准定位问题:foreach (var c in dictPrefabs) { prefabsDict.Add(c.Value); var loadedObj = Resources.Load(c.Value); if (loadedObj is GameObject prefab) { prefabs.Add(prefab); Debug.Log($"Successfully loaded prefab from path: {c.Value}"); } else { Debug.LogError($"Failed to load GameObject from path: {c.Value}. Loaded object type: {loadedObj?.GetType().Name ?? "null"}"); } }通过错误日志可明确是路径错误,还是资源类型不匹配导致的加载失败。
清理缓存并重新导入资源
- 执行
Assets -> Reimport All重新导入所有资源,修复可能的资源导入异常 - 关闭Unity,删除项目根目录下的
Library文件夹,重新打开Unity让其重建缓存,解决缓存引发的加载异常
- 执行
检查是否使用了其他资源管理系统
如果项目使用了Addressables等插件,确认无法加载的预制体未被标记为Addressable资源(这类资源会被移出Resources目录,导致Resources.Load无法访问)。若已标记,要么移除标记,要么改用对应资源管理系统的API加载。
内容的提问来源于stack exchange,提问作者SleeplessCEO
相关产品推荐
相关产品推荐

