目录
1.加载文件有三种方式: 同步加载本地文件,异步加载本地文件,从web加载文件
2.加载依赖的包:AssetBundle-AssetBundleManifest
1.加载文件有三种方式: 同步加载本地文件,异步加载本地文件,从web加载文件
- 同步加载本地文件:
void Start()
{
string path = "AssetBundles/scene/cube.unity3d";
AssetBundle ab = AssetBundle.LoadFromFile(path);
AssetBundle.LoadFromFile("AssetBundles/share.unity3d");
GameObject wallPrefab = ab.LoadAsset<GameObject>("Cube");
Instantiate(wallPrefab);
}
- 异步加载本地文件:
IEnumerator Start()
{
string path = "AssetBundles/scene/cube.unity3d";
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
yield return request;
AssetBundle ab = request.assetBundle;
AssetBundle.LoadFromFile("AssetBundles/share.unity3d");
GameObject wallPrefab = ab.LoadAsset<GameObject>("Cube");
Instantiate(wallPrefab);
}
- 从web加载文件:
IEnumerator Start()
{
string path = "AssetBundles/scene/cube.unity3d";
string uri = @"file:///E:\unityPractice\AssetBuddleProject\AssetBundles\scene\cube.unity3d";
UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
yield return request.SendWebRequest ();
//AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
AssetBundle.LoadFromFile("AssetBundles/share.unity3d");
GameObject wallPrefab = ab.LoadAsset<GameObject>("Cube");
Instantiate(wallPrefab);
}
2.加载依赖的包:AssetBundle-AssetBundleManifest
- 加载所有的ab包(manifest.GetAllAssetBundles())
void Start()
{
AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
foreach (string name in manifest.GetAllAssetBundles())
{
print(name);
}
}
- 加载方块所有依赖的物体(manifest.GetAllDependencies())
void Start()
{
string path = "AssetBundles/scene/cube.unity3d";
AssetBundle ab = AssetBundle.LoadFromFile(path);
GameObject cubePrefab = ab.LoadAsset<GameObject>("Cube");
Instantiate(cubePrefab);//此时实例化出来的方块没有材质
AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
string[] strs = manifest.GetAllDependencies ("scene/cube.unity3d");//取得方块所有依赖的物体
foreach (string name in strs)
{
print(name); //share.unity3d
AssetBundle.LoadFromFile("AssetBundles/" + name);//此时加载出来了材质
}
}
3.编辑器
using UnityEditor;
using System.IO;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string dir = "AssetBundles";
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
}
}