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

Unity技术问题:实例化资源时对象为空,如何排查路径问题?

解决Resources.Load返回null的实例化问题

咱们先拆解你遇到的核心问题:Resources.Load返回null导致实例化失败,结合你的场景,主要有几个关键坑需要修正,我一步步给你理清楚:

1. 资源必须放在Resources专属文件夹里

这是最容易忽略的规则!Unity的Resources.Load只能加载**直接放在Resources文件夹(或其子文件夹)**内的资源。你现在把Level.obj放在Assets/Objects下,这个路径不在Resources目录的检索范围内,Unity根本找不到它。

解决步骤:

  • 在Assets目录下新建一个名为Resources的文件夹(注意大小写必须完全匹配)
  • 把你的Objects文件夹(或直接把Level.obj)移动到Resources文件夹中,最终路径变为Assets/Resources/Objects/Level.obj

2. .obj文件不能直接实例化,要先转成预制体(Prefab)

.obj是静态模型文件,直接用Instantiate实例化会出问题,而且Resources.Load加载原始模型的逻辑也不对。你需要先把它做成预制体:

  • 把Level.obj从Project窗口拖到Hierarchy窗口,生成一个场景临时对象
  • 再把这个临时对象从Hierarchy拖回Project窗口的Resources/Objects文件夹里,生成Level预制体
  • 最后删除Hierarchy里的临时对象即可

3. 修正Resources.Load的路径参数

当预制体在Resources/Objects/Level路径下时,你需要写相对于Resources文件夹的相对路径,不需要加扩展名,也不能加Assets/前缀。另外你之前写的Object/Level少了一个s,这也是可能导致找不到的细节问题!

正确的路径写法是:Objects/Level

修正后的完整代码

我给你加了空值判断,方便你排查后续问题:

void Update() 
{ 
    if (Input.GetKeyDown(KeyCode.Space)) 
    { 
        GameObject levelPrefab = Resources.Load<GameObject>("Objects/Level");
        if (levelPrefab != null)
        {
            Instantiate(levelPrefab, transform.position, Quaternion.identity);
        }
        else
        {
            Debug.LogError("找不到Level预制体,请检查路径和资源位置!");
        }
    } 
}

调整完这些步骤,按下空格键应该就能正常生成对象了。另外提一句,Unity现在更推荐用Addressables或AssetBundles管理资源,不过小项目用Resources也完全够用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:43:40