AssetBundles打完包的目录结构
源代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class LoadFromFileExample : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
string assetpath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/")) + "/AssetBundles/StandaloneWindows";
string cudepath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/")) + "/AssetBundles/StandaloneWindows/cude.unity3d";
string manifestpath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("/")) + "/AssetBundles/StandaloneWindows/StandaloneWindows";
AssetBundle ab= AssetBundle.LoadFromFile(cudepath);
GameObject cubePrefab = ab.LoadAsset<GameObject>("GameObject");
//----通过manifest文件查找依赖的包
AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestpath);
//获取AssetBundle文件的AssetBundleManifest的信息
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
foreach (var item in manifest.GetAllAssetBundles())
{
Debug.Log(item);
}
string[] dependencies = manifest.GetAllDependencies("cude.unity3d");
foreach (var dependency in dependencies)
{
Debug.Log(dependency);
AssetBundle.LoadFromFile(Path.Combine(assetpath, dependency));
}
Instantiate(cubePrefab);
}
}
蹲坑分析:
-
manifestpath中最后StandaloneWindows为StandaloneWindows.manifest文件
-
StandaloneWindows.manifest文件中
AssetBundleManifest
的信息
AssetBundleManifest manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
-
Instantiate(cubePrefab);在资源加载之后在进行实例化,否则会有意料之外的后果。像材质写在前后无所谓,但是像动画就要注意这个实例化位置的问题。
Instantiate(cubePrefab);写在加载包依赖之前。