unity assetBundle内存占用情况的总结

本文通过实际案例详细解析了Unity中使用AssetBundle.LoadFromFile方法加载资源的过程,包括内存占用变化及资源卸载的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近发现一个问题,就是解决问题先百度一下,找别人的博客寻找答案,但有些时候总觉得不亲自实践,总不够自在,所以,还是自己多动动手,自己实践的东西,记下来,以后翻回来查找,这,或许更能记忆深刻吧

 

   这里我用AssetBundle.LoadFromFile(path),来加载资源的情况,加载的资源是一个Gameobject,没有分开依赖,统一打包,选择不压缩打包

 

 


 
 private void OnGUI()
    {

        if (GUI.Button(new Rect(0, 0, 100, 100), "步骤1"))
        {
            /*加载进来并不耗费内存,猜,存的只是一个地址,该步骤应该还包括解压文件,但是我打包的时候是不压缩的,所以速度很快.emoto是自定义文件,打包的时候你想什么
             * 后缀都可以。*/
            string path = Application.streamingAssetsPath + "/CannotDelete/0000000000000000___astronauts_man/astronauts_man/astronauts_man.emoto";
            _ab = AssetBundle.LoadFromFile(path);

        }

        if (GUI.Button(new Rect(100, 0, 100, 100), "步骤2"))
        {  /*到这一步才算是把资源放到内存中来,我们导入的是Gameobject,包括了贴图,材质,网格,音频,动画片段,加载完成之后记得卸载掉,ab已经完成了他的使命了
            留着只会增加风险和出错*/
            _go = _ab.LoadAsset<GameObject>("astronauts_man");
            _ab.Unload(false);
            _ab = null;
        }
        if (GUI.Button(new Rect(200, 0, 100, 100), "步骤3"))
        {
            /*实例化基本上都是引用,除了材质资源外,贴图基本上是引用,还有网格,所以,复制一个Gameobject基本上没消耗多大内存*/
            _instsGo = Instantiate(_go);
        }
        if (GUI.Button(new Rect(300, 0, 100, 100), "步骤4"))
        {
            /*删除一个资源后,回收一些复制出来的资源,也不是很多*/
            Destroy(_instsGo);
            _instsGo = null;
        }
        if (GUI.Button(new Rect(400, 0, 100, 100), "步骤5"))
        {
            /*如果没有资源引用到源资源后,调用系统的卸载资源方法,系统将会卸载掉该资源,前提是源资源必须0引用*/
            _go = null;
            Resources.UnloadUnusedAssets();
        }
    }


这是没有执行步骤的内存情况

 

 

 

 

执行步骤1的内存情况,可以看到Assets数量从5271增加到5272,只是增加了一个对象,并没有增加内存

 

 

 

 

执行步骤2的内存情况

 

 

 

执行步骤3的内存情况,可以看到Assets数并没有增加,增加的是 Total Object Count 也就是复制的数据

 

 

执行步骤4的内存情况

 

 

 

执行步骤5的内存情况

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值