赞
踩
需要源码及依赖请点赞关注收藏后评论区留言私信~~~
AssetBundle最重要的操作就是AssetBundle打包 下载 加载以及卸载 下面就来了解一下AssetBundle的常用操作
AssetBundle打包主要用到下面两个API
BuildAssetBundles(string outputPath,AssetBundleBuild[] builds,
BuildAssetBundleOptions assetBundleOptions,BuildTarget targetPlatform);
BuildAssetBundles(string outputPath,BuildAssetBundleOptions assetBundleOptions,BuildTatget targetPlarform);
下面新建一个PackBundles.cs脚本 放入Editor文件夹中 代码如下
- using System.Collections.Generic;
- using System.IO;
- using UnityEditor;
-
- public class PackBundles : Editor
- {
- //选定资源打包
- [MenuItem("PackBundles/PackBundles")]
- static void PutBundleAssetes()
- {
- //初始化一个AssetBundleBuild表
- List<AssetBundleBuild> buildMap = new List<AssetBundleBuild>();
- AssetBundleBuild build = new AssetBundleBuild();
- //设置AssetBundleBuild的名字和资源路径
- build.assetBundleName = "tempImg.unity3d";
- build.assetNames = new[] { "Assets/Textures/tempImg.jpg" };
- //添加进表
- buildMap.Add(build);
-
- //将这些资源包放在一个名为ABs的目录下
- string assetBundleDirectory = "Assets/ABs";
- //如果目录不存在,就创建一个目录
- if (!Directory.Exists(assetBundleDirectory))
- {
- Directory.CreateDirectory(assetBundleDirectory);
- }
- //资源打包
- BuildPipeline.BuildAssetBundles(assetBundleDirectory, buildMap.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
- }
- }
全部资源打包
进行全部资源打包前需要先设置每个需要打包的资源的属性 然后我们修改PackBundles.cs脚本 实现添加选定资源打包盒全部资源打包功能
- using System.Collections.Generic;
- using System.IO;
- using UnityEditor;
-
- public class PackBundles : Editor
- {
- //选定资源打包
- [MenuItem("PackBundles/PackBundles")]
- static void PutBundleAssetes()
- {
- //初始化一个AssetBundleBuild表
- List<AssetBundleBuild> buildMap = new List<AssetBundleBuild>();
- AssetBundleBuild build = new AssetBundleBuild();
- //设置AssetBundleBuild的名字和资源路径
- build.assetBundleName = "tempImg.unity3d";
- build.assetNames = new[] { "Assets/Textures/tempImg.jpg" };
- //添加进表
- buildMap.Add(build);
-
- //将这些资源包放在一个名为ABs的目录下
- string assetBundleDirectory = "Assets/ABs";
- //如果目录不存在,就创建一个目录
- if (!Directory.Exists(assetBundleDirectory))
- {
- Directory.CreateDirectory(assetBundleDirectory);
- }
- //资源打包
- BuildPipeline.BuildAssetBundles(assetBundleDirectory, buildMap.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
- }
- //全部打包
- [MenuItem("PackBundles/AllPackBundles")]
- static void PutBundleAssetesAll()
- {
- //将这些资源包放在一个名为ABs的目录下
- string assetBundleDirectory = "Assets/ABs";
- //如果目录不存在,就创建一个目录
- if (!Directory.Exists(assetBundleDirectory))
- {
- Directory.CreateDirectory(assetBundleDirectory);
- }
- BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
- }
- }
在菜单栏中选择PackBundles->AllPachBundles命令 可以在Project视图中看到ABs文件夹中生成的AssetBundle文件 可以看到打包出来的文件有一个特点,就是每个AssetBundle资源包都会有一个后缀名为.manifest的文件
Manifest文件其实是AssetBundle资源文件的依赖关系以及对包的信息的记录文件,根据这个文件可以获取某个包的依赖关系,或者判断所获取包的大小,效验码是否是正常的 将这个文件使用文本编辑器打开后 可以看到文件内容
CRC: 效验码 通过其检查包是否完整
Assets:表示包里包含多少资源
Dependencies:表示包有哪些依赖
接下来使用IIS搭建本地服务器
1:在Windows中打开如下界面
2:打开IIS 新建网站 设置网站名称 端口号以及物理路径 将物理路径设置为存放AssetBundle资源文件的路径
3:设置IIS属性
4:将生成的AssetBundle文件放入设置的物理路径的文件夹中 然后删除后缀名为.meta的文件
AssetBundle的加载方式有以下四种
AssetBundle.LoadFromFile:从本地加载
AssetBundle.LoadFromMemory 从内存加载
WWW.LoadFromCacheOrDownload 加载后放在缓存备用
UnityWebRequest 从服务器加载
下面新建一个脚本用于加载AssetBundle文件
- using System.Collections;
- using UnityEngine;
- using UnityEngine.Networking;
-
- public class LoadBundles : MonoBehaviour
- {
- void Start()
- {
- StartCoroutine(Load());
- }
-
- IEnumerator Load()
- {
- //从远程服务器上进行下载和加载
- string url = "http://localhost:8090/cube.unity3d";
- UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
- //等待文件下载完毕
- yield return request.SendWebRequest();
- AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
- //加载AssetBundle资源
- AssetBundleRequest ABrequest = bundle.LoadAssetAsync("Cube.prefab", typeof(GameObject));
- //根据资源生成文件
- Instantiate(ABrequest.asset as GameObject, new Vector3(0f, 0f, 0f), Quaternion.identity);
- yield return ABrequest;
- //释放资源
- request.Dispose();
- }
- }
AssetBundle的卸载方式同样有四种 新建测试脚本代码如下
- using System.Collections;
- using UnityEngine;
- using UnityEngine.Networking;
-
- public class LoadBundles : MonoBehaviour
- {
- void Start()
- {
- StartCoroutine(Load());
- }
-
- IEnumerator Load()
- {
- //从远程服务器上进行下载和加载
- string url = "http://localhost:8090/cube.unity3d";
- UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
- //等待文件下载完毕
- yield return request.SendWebRequest();
- AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
- //加载AssetBundle资源
- AssetBundleRequest ABrequest = bundle.LoadAssetAsync("Cube.prefab", typeof(GameObject));
- //根据资源生成文件
- GameObject go = Instantiate(ABrequest.asset as GameObject, new Vector3(0f, 0f, 0f), Quaternion.identity);
- yield return ABrequest;
- //释放资源
- request.Dispose();
-
- //卸载资源 包含所有Load创建出来的对象
- bundle.Unload(true);
- //卸载资源 除了Load创建出来的对象
- bundle.Unload(false);
- //释放已加载的资源Object
- Resources.UnloadAsset(go);
- //卸载所有没有被场景引用的资源对象
- Resources.UnloadUnusedAssets();
- }
- }
我们可以使用Unity AssetBundle Browser Tool插件 来查看AssetBundle 帮助打包AssetBundle和查看AssetBundle内容
创作不易 觉得有帮助请点赞关注收藏~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。