文章目录

  • 前言
  • 如何打包
  • 打包文件
  • AssetBundle资源加载介绍
    • 第一种
    • 第二种 从服务器加载
    • 存储文件到本地

前言

  • AssetBundle是unity中的一种资源打包方式
  • 在对资源进行打包后,会有一些相应的文件manifest

如何打包

  • 在对任何资源的inspector下面标注名字与后缀【名字可以多层嵌套,打包的时候会根据名字生成对应的文件夹结构】
  • 在BuildAssetBundleOptions.None中指定AssetBundle指定压缩方式,Unpressed不压缩,ChunkBasedCompression LZ4压缩算法,None使用LZMA算法
  • 在实际开发中使用None比较多
 string path = Application.dataPath + "/AssetBundles";BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

打包文件

  • 打包出来的文件分为两部分

    • Assetbundle文件
    • 配套的manifest文件
      • CRC校验码,类似于MD5,用于校验出该资源的一个特殊信息标识
      • classTypes列表,当前资源用到了unity中的哪些组件,以编号索引的形式存在,每个编号对应一个类文件
  • .meta文件属于unity环境的产物,对于每个资源都会生成这个文件存储该资源的一些信息
  • 在打包出来的根文件夹下有一个与文件夹同名的manifest文件,这个manifest文件可以称之为AssetBundle目录文件,存储了打包出来的所有的AssetBundle文件的索引信息
  • 通过它可以找到所有的AssetBundle文件
  • 还有一个与根文件夹同名的AssetBundle文件

AssetBundle资源加载介绍

  • 留在项目工程当中,当成普通的资源进行使用
  • 上传到服务器,第一次运行的时候从服务器下载这些文件,缓存到本地,然后进行使用
第一种
  • AssetBundle ab = AssetBundle.LoadFromFile("AB包完整路径")
  • 从完整的路径位置加载AB资源包到内存,返回一个AssetBundle对象
  • T resName = ab.LoadAsset<T>("游戏资源名称")
  • 通过获取的AssetBundle对象获取对应的游戏物体资源,并且返回该资源
  • 注意StreamingAssets文件夹内的资源,会在项目打包过程中直接把该文件夹及文件夹内部的所有资源一起原封不动的打包到最终项目成品中
  • Android直接打包到APK中
  • Windows直接打包到“XXX_Data”文件夹下
AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/music.re");
GameObject temp = ab.LoadAsset<GameObject>("Cube");
GameObject.Instantiate<GameObject>(temp, Vector3.zero, Quaternion.identity);
第二种 从服务器加载
  • 需要用到网络请求相关的API
using UnityEngine.Networking
//创建一个获取Assetbundle文件的web请求
UnityWebRequest request = UnityWebRequest.GetAssetBundle(url)
//发送这个web请求
yield return request.Send();
//从web请求中获取内容,返回一个AssetBundle类型的数据
AssetBundle ab = DownloadHanderAssetBundle.GetContent(request);
  • 下载主目录的AssetBundle文件
  private string AssetBundlePath = @"http://192.168.0.105/AssetBundles/AssetBundles";private string AllBundlePath = @"http://192.168.0.105/AssetBundles/";private void Start(){StartCoroutine("LoadAsset");}private IEnumerator LoadAsset(){UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(AssetBundlePath);yield return request.SendWebRequest();AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);//从主AssetBundle文件中获取manifest文件AssetBundleManifest manifest = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest");//获取所有AssetBundle文件的路径string[] names = manifest.GetAllAssetBundles();for (int i = 0; i < names.Length; i++){Debug.Log(names[i]);//开启下载单个AssetBundle文件的协程 通过组拼路径StartCoroutine("LoadSingleFileByWWW", AllBundlePath + names[i]);}}
  • 下载单个assetbundle文件
  • GetFileNameWithoutExtension()截取路径地址中的文件名,且无后缀名,需要引入System.IO命名空间
  private IEnumerator LoadSingleFile(string uri){UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(uri);yield return request.SendWebRequest();AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);//request.bytesstring[] names = ab.GetAllAssetNames();for (int i = 0; i < names.Length; i++){// Debug.Log(names[i]);string cons = Path.GetFileNameWithoutExtension(names[i]);GameObject asset = ab.LoadAsset<GameObject>(cons);GameObject.Instantiate<GameObject>(asset, Vector3.zero, Quaternion.identity);}}
存储文件到本地
  • 我暂时还没有找到unitywebrequest里面的api将Assetbundle转换为字节数组
  private IEnumerator LoadSingleFileByWWW(string uri){WWW request = new WWW(uri);yield return request;if (request.isDone){SaveAssetsBundle(Path.GetFileName(uri), request.bytes, request.bytes.Length);}}//存储AssetBundle为本地文件private void SaveAssetsBundle(string name, byte[] bytes, int count){FileInfo fileInfo = new FileInfo(Application.streamingAssetsPath + "//" + name);FileStream fs = fileInfo.Create();fs.Write(bytes, 0, count);fs.Flush();fs.Close();fs.Dispose();}

AssetBundle的一些笔记相关推荐

  1. Unity AssetBundle学习笔记

    文章目录 前言 一.AssetBundle是什么? 1.定义 2.为什么需要AssetBundle 3.AssetBundle内部格式 二.AssetBundle打包 1.设置资源AB名称 2.资源打 ...

  2. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    U3D笔记11:47 2016/11/30-15:15 2016/12/19 技术BLOG:http://www.unity.5helpyou.com/2373.html#comment-43108 ...

  3. Unity3D 学习笔记4 —— UGUI+uLua游戏框架

    Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...

  4. 正确使用AssetBundle加载和卸载

    在使用Unity开发项目时,AssetBundle是必须使用的,对资源进行打包加载,因为移动端游戏包体的大小对用户体验非常重要,对内存的使用更加重要,下面我们就介绍一下关于AssetBundlle的使 ...

  5. Unity3D音乐音效学习笔记

    对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下. 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击, ...

  6. ET学习笔记之五星麻将0

    五星麻将0客户端登录界面 前言 准备工作 配置报错 热更新模式 热更新程序集HotfixAssembly 热更新启动GotoHotfix 登录Login 登录通道LoginAisle 登录界面Logi ...

  7. 台北Unity开发者研讨会 笔记

    文章目录[点击展开](?)[+] 说明 相关参考连结 总论 你不可不知的Unity開發技巧 移动平台优化要点 资产包 统一着色器系统 本文转自:http://ndark.wordpress.com/2 ...

  8. unity 如何运行demo_Unity手游开发札记——Unity线性空间下移动设备上烘焙变暗问题处理笔记...

    说明:该问题只适用于unity 5.x的版本,在2017+的版本中官方已经修复. 0. 写在之前 其实针对这个问题已经写了一篇很简单的填坑笔记了,但是UWA说希望那篇文章稍微扩充一下放到USpark系 ...

  9. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  10. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

最新文章

  1. Powershell Module for Netapp Data Ontap
  2. mysql 表中添加唯一约束
  3. 记了老是忘记那就写下来吧宏任务微任务
  4. mvc路由 html,asp.net-mvc – ASP.NET MVC路由从html页面开始
  5. 在windows的某个文件夹下运行WSL中的docker容器
  6. 【今日CV 视觉论文速览】30 Nov 2018
  7. by group 累加中文字段_EF 求和 GroupBy多个字段
  8. Golang入门第一天-工具准备
  9. 201509-2-日期计算
  10. bzoj:1828: [Usaco2010 Mar]balloc 农场分配
  11. BCB 第三方组件/控件 ZZ
  12. 什么是Alpha通道?
  13. [转] 怎样写好作文批语
  14. 关于verilog中综合的过程,可综合与不可综合的理解
  15. android 服务开机启动慢,Android App启动慢原因
  16. 程序员除了代码还应该有什么
  17. Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)
  18. 骨传导耳机推荐,列举几款骨传导主流的耳机分享
  19. 机器学习笔记 - 特征向量和特征值
  20. 对话哈希未来贾英昊:资产上链的第一性原理 |链捕手

热门文章

  1. 7-7 找出总分最高的学生 (15 分)
  2. 【推荐】 Neutralizer 安卓上特殊的均衡器
  3. Perl语言入门14-17
  4. bzoj4006 [JLOI2015]管道连接
  5. Cron表达式 定时执行说明
  6. 前端----表格的具体使用(jquery)
  7. 中文编程对中文编程是否是一枚银弹
  8. iOS 对象数组生成jsonarray
  9. HCIE-Security Day10:6个实验理解VRRP与可靠性
  10. ajax 网络延迟 异步,利用 jQuery 的 Ajax 来实现检查网络延迟多少秒