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
此时,便能实例化出游戏对象了。