淘先锋技术网

首页 1 2 3 4 5 6 7

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

 

   这里我用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的内存情况