【学习笔记】AssetBundle、xLua、热更新(使用步骤)

一、AssetBundle

1、打包AssetBundle包

①以模型为例,将模型拖为预制体

②设置预制资源的ab包名称和后缀(后缀自定义有混淆视听的作用);文件名加“/”可以直接作为文件夹管理,比如scene/sphere,这样在打包后就会生成一个文件夹scene里面存着sphere包

③创建打包ab包的Editor脚本(此脚本必须放在Editor文件夹内)

using UnityEditor;
using System.IO;

public class CaretAssetBundle {

    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAssetBundles()
    {
        string dir = "AssetBundles";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

 

④然后在菜单栏Assets/Build AssetBundles下点击即可生成ab包。

2、加载AssetBundle包

本地加载方式:在场景中创建一个脚本,运行时加载以下代码,则可以本地加载ab包资源,可异步

	void Start () {
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/cube.unity3d");
        GameObject obj = ab.LoadAsset<GameObject>("Plane");//Plane为cube.unity3d里面的一个对象
        Instantiate(obj);

        //记载包里面的所有对象
        //object[] objs = ab.LoadAllAssets();
        //foreach (Object item in objs)
        //{
        //    Instantiate(item);
        //}
    }

 

服务器加载方式:UnityWebRequest方式适用于5.x以后的版本,是WWW方式的升级版

IEnumerator WebLoadAB(){
        //服务器加载:使用UnityWebRequest
        string url = @"http://localhost/AssetBundles/cube.unity3d"; 
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(url);
        yield return request.Send();
        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

        //GameObject obj = ab.LoadAsset<GameObject>("Plane");
        //Instantiate(obj);
        object[] objs = ab.LoadAllAssets();
        foreach (Object item in objs)
        {
            Instantiate(item);
        }
}

 

manifest文件加载方式:可以加载所有所有包,也可以得到包的依赖

manifest文件中的CRC,是对应网络出现异常的时候作为判断的,如果CRC码对不上则没有下载完成,文件缺失需要重新下载。

3、AssetBundle分组打包策略

①依赖打包:对于多个模型共用贴图、材质资源的,减小ab包的大小非常有效;做法为分别将模型、材质贴图各自打包,比如有A模型、B模型,共用了C材质贴图,那么分别给ABC各自打包,总共打包了3个assetbundle包,在加载运行后,AB模型会自动关联C资源。如下图,右侧的底下三个为依赖打包,左侧的没有共享到贴图材质打出来的包累计大小将更大。

4、AssetBundle的卸载

资源不使用时需要卸载掉,以释放内存

二、xLua

待更。。。

三、热更新

待更。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章