Unity中的AssetBundle笔记

# Unity中的AssetBundle笔记
## 什么是AssetBundle
AssetBundle是Unity pro提供的一种用来存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,如Scene、Mesh、Material、Texture、Audio等。同时,AssetBundle也可以包含开发者自定义的二进制文件,只需要将自定义文件的扩展名改为.bytes,Unity就可以把它识别为TextAsset,进而就可以被打包到AssetBundle中。
## AssetBundle的特点
- 压缩(缺省)
- 动态载入
- 本地缓存
## AssetBundle VS Resource
AssetBundle作为Unity官方推崇的资源更新方案,与传统的Resource差异如下:
- Resource放在Resources目录下,resources.assets文件,单个文件有2GB限制,首次必须全部下载。
- AssetBundle创建需要通过Editor脚本创建,支持动态下载,是Unity中唯一支持热更新的资源格式。
## 创建AssetBundle
1. **创建预制体**:在Unity中创建一个预制体(例如Cube)。
2. **编写脚本**:
```csharp
using System.Collections;
using UnityEngine;
public class BuildAssetBundles : MonoBehaviour
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
}
- 运行脚本:在Unity中运行上述脚本,将会生成AssetBundle文件。
加载AssetBundle
- 编写脚本:
using System.Collections;
using UnityEngine;
public class LoadAssetBundles : MonoBehaviour
{
public string url;
public string playerName;
void Start()
{
StartCoroutine(Load());
}
IEnumerator Load()
{
using (WWW www = new WWW(url))
{
yield return www;
if (www.error == null)
{
AssetBundle assetbundle = www.assetBundle;
UnityEngine.Object obj = assetbundle.LoadAsset(playerName);
Instantiate(obj);
assetbundle.Unload(false); // 把用完后的资源删除,不会把全部的AssetBundle都删除了
}
else
{
Debug.Log("资源加载失败");
}
}
}
}
- 挂载脚本:将上述脚本挂载到游戏对象上。
- 填写基本信息:
- url = file:///E:/Users/Unity Projects/Learning20180708/Assets/AssetBundles/capsule.assetbundle
- playerName = capsule
此时,便能实例化出游戏对象了。