1,它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file(序列化文件) 和 resource files(源文件)。
serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件,通常主观上不可见的。
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载。
2,一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。
1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
2,AssetBundle自身保存着互相的依赖关系;
3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;
代码如下(示例):
[MenuItem("Tools/CreatAssetBundle for Win")]
static void CreatPCAssetBundleForwINDOWS()
{
string path = "Assets/StreamingAssets";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
这时所选目标就会构建AssetsBundle文件到StreamingAssets中。
2.读取数据读取方式1:异步加载
代码如下(示例):
IEnumerator LoadABPackage1(string path)
{
Vector3 vector3 = new Vector3(0, 0, 1);
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path+ "object"));
yield return request;
ab = request.assetBundle;
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}
读取方式2:同步加载
代码如下(示例):
void LoadABPackage2()
{
ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(_abPath + "cube.unity3d.assetbundle"));
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}
读取方式3:只能加载本地包(异步)
代码如下(示例):
IEnumerator LoadABPackage3(string path)
{
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path + "cube.unity3d.assetbundle");
yield return request;
ab = request.assetBundle;
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}
读取方式4:只能加载本地包(同步)
代码如下(示例):
void LoadABPackage4(string path)
{
ab = AssetBundle.LoadFromFile(path + "cube.unity3d.assetbundle");
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}
读取方式5:WWW加载(已过时)
代码如下(示例):
IEnumerator LoadABPackage5(string path)
{
WWW www = WWW.LoadFromCacheOrDownload(path + "cube.unity3d.assetbundle", 1);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield break;
}
ab = www.assetBundle;
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}
**读取方式6:UnityWebRequest **
代码如下(示例):
IEnumerator LoadABPackage6(string path)
{
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path + "cube.unity3d.assetbundle");
yield return request.Send();
ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
Object cube = ab.LoadAsset("Cube.prefab");
Instantiate(cube);
}



