Unity热更新基础

Unity热更新基础

资源的概念:

Assets目录下,除StreamingAssets中的东西以外,可以看到的文件,都是资源,每种资源,在Unity中,都有下个类,去映射 对应。
​ 例如:Material,AudioClip,Animation,GameObject(预制件)....

AssetBundle:

​ 资源可以被压缩成AB包,和zip道理一样;
​ 运行时,可以序列化到内存中,AssetBundle的对象,对应一个AB包的管理;
​ 使用AssetBundle的API,可以从AB对象中,提取资源的对象
​ 从而,代替原先的Resources中的加载API

定义AB包:

​ 在资源下方标记一个AB包的名字即可,内存中就会定义这个AB包

生成AB包:

​ 使用编辑器脚本,必须在Editor目录下脚本,是编辑器脚本
​ 静态方法上,标记[MenuItem("Day1/BuildAB")],菜单编辑器工具

BuildPipeline.BuildAssetBundles("Assets/AssetBundles",BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);

​ 不同平台的AB包不通用
​ 生成的每个AB包,都会有一个清单文件.menifest,这个没用,开发时做观察用的;
​ 会根据目标目录的名字,生成一个总清单AB包;这个AB包中,放了一个总清单资源

依赖关系:

​ 资源 之间有依赖关系,如材质,依赖一个Texture, 预制体依赖材质
​ AB包之间也有依赖关系
​ 如,材质1在A AB包中,预制体在B AB包中,预制体,依赖材质1,那么,B AB包,会依赖 A AB包,否则 会出现资源丢失
​ 清单文件,可以描述,AB包的依赖关系,和该AB,显示包含的资源

冗余:

​ 显示包含的资源,不会出现冗余,只有隐式包含的资源才会冗余,被标记的资源,会被显示包含;未标记的资源,被依赖时,会被隐式包含(即不会显示在清单中)
​ 多个AB包中,隐式包含了相同的资源,就会冗余
​ 打包AB时,会把资源及其依赖的所有资源打包到这个AB包中,如果依赖的资源,被其它AB包显示包含,那么就不会再次包含到本包中

从AB中提取资源

var cubeABPath = GetABPackage()+"cube";//通过方法获得根路径
print(cubeABPath);
//加载ab包的api
var ab = AssetBundle.LoadFromFile(cubeABPath);
var preCube = ab.LoadAsset<GameObject>("Assets/AssetPackage/Prefabs/Cube.prefab");

AB依赖解决资源丢失

​ 加载AB时,必须加载它依赖的Ab,否则提取资源时,资源依赖的资源,会出现丢失
​ 只要将依赖的AB加载到内存中即可,不需要提取依赖的AB中的资源,Unity会自动帮我们提取依赖的资源

Http服务器

​ 可以使用http协议,让我们下载资源
​ 1 修改ip,查询自己的局域网ip: 控制台 ,命令:ipconfig;
​ 2 将AB根目录,拖到http服务器上,选择真实目录

Unity中使用http下载资源

​ 在协程中使用相关API
UnityWebRequest.Get()获得

相关API

​ 清单资源对象的使用

关于AssetBundleName

​ 是相对AB根目录下的路径

使用UnityWebRequestAssetBundleDownloadHandlerAssetBundle远程获取更新的AB包

posted @ 2023-03-23 09:28  瞌睡的小牛  阅读(51)  评论(0编辑  收藏  举报