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

Unity Addressable实例化预制体后Window类request变量为空问题

问题根因

你代码中获取Window组件的对象来源完全错误:

  • loadOp.Result是LoadAssetAsync加载到的原始预制体资源,预制体本身不会执行Awake生命周期函数,它的request字段自然保持初始空值
  • 你调试时看到的Awake执行、request被赋值,是InstantiateAsync生成的实例化GameObject触发的,这个实例对象存储在op.Result中,和你加载的预制体资源是完全独立的两个对象

修复代码

将获取组件的来源替换为实例化操作返回的结果即可,同时你原有代码还存在实例化异步操作未等待的逻辑问题,完整修复后的代码如下:

AsyncOperationHandle<GameObject> loadOp = Addressables.LoadAssetAsync<GameObject>(address);
yield return loadOp;
   
if (loadOp.Status == AsyncOperationStatus.Succeeded){          
        var op = Addressables.InstantiateAsync(address);
        // 等待实例化操作完成,不要直接判断IsDone避免异步未完成问题
        yield return op;
        if (op.Status == AsyncOperationStatus.Succeeded)
        {
            // 从实例化生成的GameObject上获取组件,而非从原始预制体上获取
            Window window = op.Result.GetComponent<Window>();
            var data = window.request; // 此时可正常读取到"load_data"
        }
    }
}

额外注意事项

  • 无特殊需求的情况下不需要提前调用LoadAssetAsync,直接调用InstantiateAsync即可,Addressables内部会自动处理资源加载逻辑
  • 所有Addressables异步操作都建议用yield return等待完成,不要直接判断IsDone,避免异步操作未完成导致的空引用问题
  • 使用完毕的资源记得调用Addressables.Release释放,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:36:04