unity之AssetBundle
来源:互联网 发布:分层匹配追踪算法 编辑:程序博客网 时间:2024/05/21 04:22
第一步:创建AssetBundle包
把预制件设置为AssetBundle格式,然后在Editor文件夹下新建CreatAssetBundles.cs文件。
using UnityEditor; //1.引入Editor和IO两个命名空间using System.IO;public class CreatAssetBundles{ //2.创建编辑器在Assets选项下建个AssetBundles [MenuItem("Assets/Build AssetBundles")] static void BuildAllBundles() { //判断AssetBundles文件夹是否存在,如果不存在,新建AssetBundles文件夹,文件夹在工程根目录下 string dir = "AssetBundles"; if (Directory.Exists(dir) == false) { Directory.CreateDirectory(dir); } //3.创建AssetBundle文件 BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); //生成四个文件 }}
第二步:加载AssetBundle包,有三种方法,从文件加载,从内存加载,从网络加载WWW加载,UnityWebRequest加载
(1)从本地加载AssetBundle包
新建LoadFromFileExample.cs文件,挂在主相机上。
void Start() { //从文件加载 AssetBundle ab = AssetBundle.LoadFromFile("Assetbundle/cube.unity3d"); //加载assetbundle包 GameObject cubeprefab = ab.LoadAsset<GameObject>("cube"); //加载assetbundle包里包含的预制件 Instantiate(cubeprefab); }
(2)从内存加载(引入System.IO命名空间)
void Start() { //同步内存加载 string path = "AssetBundles/cube.unity3d"; AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(path)); GameObject cubePrefab = ab.LoadAsset<GameObject>("Cube"); Instantiate(cubePrefab); }
IEnumerator Start() { //异步内存加载 string path = "AssetBundles/cube.unity3d"; AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path)); yield return request; AssetBundle ab = request.assetBundle; GameObject cubePrefab = ab.LoadAsset<GameObject>("Cube"); Instantiate(cubePrefab); }
(3)通过WWW.LoadFromCacheOrDownload加载(即将被弃用)
(4)通过UnityWebRequest加载
首先用netbox1.exe搭建简单的服务器。然后引入UnityEngine.Networking命名空间
IEnumerator Start() { //string uri = @"file:///D:\My Projects\SikiAssetBundleParctice\AssetBundles\cube.unity3d"; string uri = @"http://localhost/AssetBundles/cube.unity3d"; UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri); yield return request.Send(); AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); //AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle; GameObject cubePrefab = ab.LoadAsset<GameObject>("Cube"); Instantiate(cubePrefab); }
ps:保存 requset.downloadHandle.data...
保存文件 File.WriteAllbytes....
//使用AssetBundle来加载依赖的包 AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles"); AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); string[] strs = manifest.GetAllDependencies("cube.unity"); foreach(string name in strs) { print(name); AssetBundle.LoadFromFile("AssetBundles/" + name); }
第三步:AssetBundle的卸载
卸载有两个方面
1,减少内存使用
2,有可能导致丢失
所以什么时候去卸载资源
AssetBundle.Unload(true)卸载所有资源,即使有资源被使用着
(1,在关切切换、场景切换2,资源没被用的时候 调用)
AssetBundle.Unload(false)卸载所有没用被使用的资源
个别资源怎么卸载1,通过 Resources.UnloadUnusedAssets. 2,场景切换的时候
ps:AssetBundle浏览工具
下载地址:https://github.com/Unity-Technologies/AssetBundles-Browser
- Unity之AssetBundle资源管理
- UNITY之AssetBundle
- unity之AssetBundle
- Unity之 AssetBundle应用
- Unity资源打包之Assetbundle
- Unity之资源打包Assetbundle
- Unity 热更新之AssetBundle
- Unity资源解决方案之AssetBundle
- Unity资源打包之Assetbundle
- Unity 热更新之AssetBundle
- Unity 热更新之AssetBundle
- unity AssetBundle
- unity-AssetBundle
- <Unity> AssetBundle
- Unity AssetBundle
- unity动态加载之AssetBundle应用
- unity动态加载之AssetBundle原理
- 【进阶】Unity资源解决方案之AssetBundle
- 由c/C++编译的程序占用的内存
- 某安全浏览器竟然也被查出高危漏洞?开源安全问题不容忽视
- 13章 学习Shell Scripts
- React-native 常见问题及错误解决方案
- 我们从Jcenter和maven仓库同步下载的文件在哪里
- unity之AssetBundle
- andorid有关屏幕方面的工具
- 十八、mcg-helper业务系统单表业务模块自动化生成html页面
- 手机版网页设计html5元素meta name=”viewport”设置需要注意的地方
- js自己封装的开发使用工具方法总结
- 语言层次
- 大数的乘法
- SQL报错型盲注教程(原理全剖析)
- SpringInAction.4th.面向切面的Spring