热更新基础
AssetBundle定义和作用:
Unity菜单的Help-->Unity manual /Scriptting Reference 可以打开Unity手册或者脚本参考;
手册里找到AssetBundles: Working In Unity-->Advanced Development-->AssetBundles
把资源打包用处?
1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
2,AssetBundle自身保存着互相的依赖关系;
3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;
什么是AssetBundle ?
- 它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件)
serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载
- 一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。
AssetBundle使用流程(简称AB)
1,指定资源的AssetBundle属性
(xxxa/xxx)这里xxxa会生成目录,名字为xxx
2,构建AssetBundle包
3,上传AB包
4,加载AB包和包里面的资源
对要打包的预制件或文件需要进行标记,右下脚处设置
代码需要放在Assets里的Editor文件夹下:
using UnityEditor;
using System.IO;
public class AssetBundleCreate
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAddAssetBundles() {
string dir = "Assetbundles";//相对路径
if (Directory.Exists(dir)==false)
{
Directory.CreateDirectory(dir);//创建路径
}
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);//路径 目标
}
}
这时保存代码,菜单Assets-->Build AssetBundles 点击就进行打包,打包结束后可以找到如下路径下文件:
本地加载
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadFromFileExample : MonoBehaviour
{
void Start()
{
AssetBundle ab = AssetBundle.LoadFromFile("Assetbundles/scene/cube.u3d");
//GameObject cubePrefab= ab.LoadAsset<GameObject>("Cube");
//Instantiate(cubePrefab);
Object[] objs = ab.LoadAllAssets();
foreach (Object o in objs)
{
Instantiate(o);
}
AssetBundle ab2 = AssetBundle.LoadFromFile("Assetbundles/scene/sphere");
GameObject spherePrefab = ab2.LoadAsset<GameObject>("Sphere");
Instantiate(spherePrefab);
}
}