Unity AssetBundle -- 加载本地AssetBundle

关于Unity AssetBundle – 加载本地AssetBundle
一、前提知识:
1、导出的AssetBundle主要包含两类文件:各类资源的assetbundle文件和对应的manifest文件
2、assetbundle文件是需要下载或者加载的文件,manifest文件是用于展示的各项资源的依赖关系文件
3、加载资源时需要的依赖关系文件包含在不带后缀名的、由用户自定义的assetbundle文件。manifest文件只是用于本地的增量打包

二、加载本地AssetBundle
//检测平台
#if UNITY_STANDALONE_WIN
string localPath = “LOCAL_PATH”;
string wwwPath = “WEB_PATH”;
#endif

可以使用协程

    void Start () {
            ...
            StartCoroutine(DownloadAssetBundle());
    }

    IEnumerator LoadAssetBundleFromFile()
    {
		...
    }

在协程中可以进行资源的加载
首先需要加载没有后缀名的那个由用户定义名称的assetbundle文件,它存储了所有资源依赖关系
加载的assetbundle文件中包含一个名为"assetbundlemanifest"的AssetBundleManifest 类型文件,利用LoadAsset加载

	string manifestName = "assetbundlemanifest";
	AssetBundle assetBundle = AssetBundle.LoadFromFile(localPath + assetBundleName);
	AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>(manifestName);

通过得到的manifest文件,获取各类资源的依赖关系

	string[] dps = manifest.GetAllDependencies(assetName);

根据所得的依赖关系加载其它相关资源,加载的assetbundle资源中包含了所需的Asset资源

	for (int i = 0; i < nameArray.Length; i++)
	{
		assetBundleList.Add(AssetBundle.LoadFromFile(localPath + nameArray[i]));
	}

加载你的目标assetbundle

	goalBundle = AssetBundle.LoadFromFile(path);

目前加载assetbundle获取的资源在内存中以镜像包的形式存在,需要使用LoadAsset获取到真正可用的资源,并实例化

	GameObject redSphere = goalBundle.LoadAsset<GameObject>("Assets/Prefabs/Sphere.prefab");
	Instantiate(redSphere);

资源中并没有相关红色球体的assets

利用之前加载的assetbundle中的assets生成一个红色的球体

猜你喜欢

转载自blog.csdn.net/weixin_44158418/article/details/85071249