[Unity热更新]04.卸载方式

参考链接:

https://www.jianshu.com/p/b37ee8cea04c

1.AssetBundle.Unload(false):释放AssetBundle文件的内存镜像,但不摧毁从包中Load出来的Asset对象(如下例子2)

2.AssetBundle.Unload(true):释放AssetBundle文件的内存镜像,同时摧毁从包中Load出来的Asset对象(如下例子3)

3.Resources.UnloadUnusedAssets():释放所有没有引用的Asset对象(如下例子4)

测试:

1.新建一个Cube和材质,将材质赋给Cube,然后打包,即Cube包依赖材质包

 1 using UnityEngine;
 2
 3 public class TestAB : MonoBehaviour
 4 {
 5     void Start()
 6     {
 7         AssetBundle matAB = AssetBundle.LoadFromFile("Assets/AB/new material");
 8         AssetBundle cubeAB = AssetBundle.LoadFromFile("Assets/AB/cube");
 9         if (cubeAB != null)
10         {
11             GameObject go = Instantiate(cubeAB.LoadAsset<GameObject>("cube"));
12             go.transform.localScale = Vector3.one * 2;
13         }
14     }
15 }

2.

在1的基础上增加一句:matAB.Unload(false);

3.

在1的基础上增加一句:matAB.Unload(true);

4.

AssetBundle.Unload(false),这种卸载方式比较温和,但会存在卸载不干净的情况

AssetBundle.Unload(true),这种卸载方式比较暴力,可能会导致错误的情况

对于AssetBundle.Unload(false),可以配合Resources.UnloadUnusedAssets(),在清掉资源的所有引用后调用,即可清掉残留的资源

如下,两个包产生的资源都会被正确地回收了

 1 using UnityEngine;
 2
 3 public class TestAB : MonoBehaviour
 4 {
 5     void Start()
 6     {
 7         AssetBundle matAB = AssetBundle.LoadFromFile("Assets/AB/new material");
 8         AssetBundle cubeAB = AssetBundle.LoadFromFile("Assets/AB/cube");
 9         GameObject go = null;
10         if (cubeAB != null)
11         {
12             go = Instantiate(cubeAB.LoadAsset<GameObject>("cube"));
13             go.transform.localScale = Vector3.one * 2;
14         }
15         matAB.Unload(false);
16         cubeAB.Unload(false);
17         Destroy(go);
18         Resources.UnloadUnusedAssets();
19     }
20 }

posted on 2019-05-26 23:14 艰苦奋斗中 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lyh916/p/10928270.html

[Unity热更新]04.卸载方式相关推荐

  1. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  2. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子

    通过Xlua实现unity热更新的一个小例子 一.介绍 ​ 热更新是指在更新游戏资源或者逻辑的时候不需要开发者将游戏再打包.发布.玩家重新下载安装包,而是可以通过将需要更新的资源打包成AssetBun ...

  3. Nacos配置热更新两种方式。

    1:目的: 修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新 2:方式 (1)在@Value注入的变量所在类上添加注解@RefreshScope:(在这里呢应该辉出现空指针异 ...

  4. Unity热更新机制

    前言 游戏上线后,难免会有一些测试阶段没发现的bug,bug这东西,可大可小. 如果出现重大bug,而又没有热更技术,那么我们为了修复bug就只能强制玩家去商店下载新包,那造成的玩家流失是非常可怕的. ...

  5. Unity热更新技术整理

    一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...

  6. unity热更新json_Unity3D热更新 CSHotFix入门教程之HelloWorld

    一.了解工程. "Assets"主工程相关:"HotFix"热更新Vs工程:"UnityEngineLibaray"是Unity对应版本的d ...

  7. unity热更新json_unity3d热更新插件uLua学习整理

    前言IOS不能热更新,不是因为不能用反射,是因为 System.Reflection.Assembly.Load 无法使用 System.Reflection.Emit 无法使用 System.Cod ...

  8. Unity热更新ToLua框架学习

    一.Lua语言学习 二.ToLua框架 三.使用ToLua框架对Lua&C#进行交互 四.使用Lua对GameObj进行操作 五.将游戏对象打包&解包 六.将Lua脚本文件进行打包&a ...

  9. Unity热更新技术学习——AssetsBundle详解

    文章目录 热更新 AssetsBundle Resources AssetsBundle 存储目录 目录实例 构建AssetsBundle 清单文件 AB包 AssetBundle依赖 AssetBu ...

最新文章

  1. android混淆和反编译
  2. java之Thread.sleep(long)与object.wait()/object.wait(long)的区别及相关概念梳理(good)
  3. #地形剖面图_高中地理——每日讲1题(地形剖面图)
  4. 工业用微型计算机(23)-汇编语言基本结构
  5. 程序崩溃 分析工具_程序分析工具| 软件工程
  6. 神经网络与深度学习——TensorFlow2.0实战(笔记)(四)(python文件)
  7. (三)C语言之九条语句
  8. OJ1001: 植树问题
  9. python 学习笔记7(装饰器)
  10. @RequestParam和@RequestBody和@PathVariable用法小结
  11. iOS底层:PAGEZERO的作用
  12. c语言程序电子词典,C语言实现小型电子词典
  13. MSDN 离线版 支持VS2015 VS2017 VS2019 (镜像本地安装,非目录替换法)
  14. LSM303D磁力计数据读取实验
  15. android 语音自动播报,Android语音播报的两种简单实现
  16. 破解WMV格式电影的许可证
  17. pyltp依存句法分析_pyltp的简单使用
  18. php 银行卡二要素验证
  19. activeMQ初识到使用(二)
  20. C++禁止键盘和鼠标事件

热门文章

  1. sql语句遇到错误: The used SELECT statements have a different number of columns :
  2. Atitit.eclipse 4.3 4.4  4.5 4.6新特性
  3. 重构第15天 移除重复的代码(Remove Duplication)
  4. Hadoop集群系列(目录)
  5. php代码审计之MetInfo5.3盲注
  6. Kubernetes源码阅读笔记——Controller Manager(之三)
  7. 二分算法,选择,冒泡排序算法
  8. 使用 pm2-web 监控 pm2 服务运行状态
  9. FastReport 使用入门
  10. QThreadPool类和QtConcurrent命名空间