unity的动态加载2 AssetBundle(1)

前几天写了一篇关于unity动态加载的Resource的博客
动态加载Resource的博客
然后今天介绍一下AssetBundle的动态加载

AssetBundle的动态加载实质上是导出包 在加载回来的过程

导出过程

首先我们创建一个Editor的文件夹 然后我们随便弄一个预制体(在Editor下)
在这里插入图片描述
之后我们可以修改导出的类型(像我这样)
在这里插入图片描述
之后导出的名称wall 后缀就是as(都是可以自定义的)

然后我们通过代码来实现导出
在之后的代码可能用到编译器扩展的知识 我之前也写过一些 在这里给出一篇 如果有兴趣可以自己去翻看
编译器扩展博客链接

using System.IO;
using UnityEditor;

public class CreateBundles
{ 
    [MenuItem("Assets/Build a AssetBundles")]//编译器扩展
    static void BuildBundles()
    {
        string dir = "AssetBundles";//设置路径(在根目录之下)
        if (Directory.Exists(dir)==false)
        {
            //不存在路径 创建
            Directory.CreateDirectory(dir);//创建路径
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);//导出配置
    }
}

注意:这个代码也是要在Editor文件夹下的

然后我们在unity中的Asset找到我们创建的Build a AssetBundles
在这里插入图片描述
点击即可导出包
在这里插入图片描述
我们可以看到我们导出的文件的名称和格式(修改格式是为了不让外界太容易知道文件的类型)

实现加载

前边说了导出 然后我们来实行一下加载
我们现在做的是本机上的加载 并没有上传到服务器上

 void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/wall.as");//读取到路径
        //只加载cube
        GameObject wallprefebs = ab.LoadAsset<GameObject>("Cube");
        Instantiate(wallprefebs);
       //遍历上传的所有的 全部加载
        //Object[] objs = ab.LoadAllAssets();
        //foreach(var t in objs)
        //{
        //    Instantiate(t);
        //}
    }

然后我们把在unity中的所有都删除
包括editor的预制体
只有运行即可
在这里插入图片描述
注意上边的代码中的读取单个的时必须把名字写对 不然会报空(名字是原来在unity预制体的名字不是导出之后文件的名字)

这篇博客就这么多了 之后我会持续更新动态加载的有关知识
如果对大家有帮助 欢迎大家关注我

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/107504964