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

Resources.Load加载的Prefab无法显示:activeSelf为true但activeInHierarchy为false

问题分析与解决:Prefab加载后无法显示的原因及修复方案

嘿,你这问题其实是Unity新手很容易踩的小坑——你现在操作的根本不是场景里的游戏对象,而是Prefab的资源模板!

核心原因

Resources.Load<GameObject>("Enemy/Bullet")这行代码只是把Prefab从资源文件夹里加载到内存中,它本质上还是项目里的资源文件,并没有被实例化到当前游戏场景的层级结构里。所以哪怕你给它设置了位置,它也不属于场景的一部分,自然activeInHierarchy会是false,游戏运行时也看不到它。

正确的实现步骤

你需要在加载Prefab之后,用Instantiate()方法把它创建成场景中的实例,才能正常显示:

void Awake()
{
    // 1. 加载Prefab模板
    GameObject bulletPrefab = Resources.Load<GameObject>("Enemy/Bullet");
    if (bulletPrefab != null)
    {
        // 2. 实例化到场景中,得到场景内的对象实例
        GameObject bulletInstance = Instantiate(bulletPrefab);
        // 3. 给实例设置位置(注意是操作实例,不是原始Prefab)
        bulletInstance.transform.position = new Vector3(0, 0, 0);
    }
    else
    {
        Debug.LogError("找不到指定路径的Prefab,请检查Resources文件夹路径!");
    }
}

额外排查点(如果还是没显示)

  • 检查路径是否正确:你的Prefab必须放在Assets/Resources/Enemy文件夹下,文件名严格匹配Bullet(Unity路径区分大小写)。
  • 确认父物体状态:如果之后给实例设置了父物体,要确保父物体是激活状态——子物体的activeInHierarchy会受父物体状态影响,哪怕自身activeSelf是true。
  • 检查渲染组件:打开Prefab,确认MeshRenderer(3D物体)或Canvas Renderer(UI物体)是启用状态,没有被意外禁用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:34:17