已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深入理解资源(Asset)与AssetBundleAB包文件Assetbundle文件格式可以理解为,拥有一个列表头和压缩数据块列表。列表头定义了各数据块的起始位置和大小。数据块列表中存储压缩过的unity对象的序列化数据。AssetBundle对象加载并创建AssetBundle对象。 Assetbundle对象是一个轻量级对象,只包含一个资源(Asset)对象列表和指向实际AB包数据的文件对象。AB包文件加载完成后存放在内存中,注意只有LZ4能够以压缩格式存放在内存中。这段内存不能直接访问,由AssetBundle对象负责管理。AssetBundle.Unload()会释放这段内存。Asset资源实际上unity中并没有与资源(Asset)这个词对应的类。我们一般把从AssetBundle中LoadAsset()出来的对象称为资源 (Asset)。AssetBundle.LoadAsset()等接口从AssetBundle对象中解压数据反序列化构建Object。Unity完美的序列化机制可以使任何对象都可以直接序列化为连续内存块,同样任何对象都可以通过AssetBundle.LoadAsset()反序列化为结构化对象。AssetBundle.LoadAsset()接口返回类型是Object。此功能也暗示了可以将任何对象从ab包内存中反序列化出来构建。Prefab是什么?创建ab包时,一般会将prefab打入到包中。游戏中通过AssetBundle.LoadAsset()将prefab对象加载出来。代码1: 再通过加载出来的prefab构建GameObject:代码 2: 思考:代码1中m_Prefab是什么?是什么类型?如果是GameObject,那么这个GameObject为什么没有出现在场景中?如果是GameObject,为什么一定要通过Instantiate再次clone一个GameObject出来?Unity的C+代码分为两部分,Runtime和Editor。Runtime中包含引擎的所有核心功能,Editor包含编辑器所需核心功能。Prefab.h/cpp存放于Editor中,实现了编辑器中prefab的功能。Prefab继承于Object,包含一个指向GameObject的指针。其功能非常简单,仅仅只是维护编辑器中prefab之间的关联关系,用来实现编辑器中prefab修改编辑功能。Prefab只是对GameObject在编辑器中一个功能封装。上一段源码:从源码判断,Prefab功能非常简单,只是实现编辑器中各prefab关联编辑功能。结论:因此可以推断,在最终发布环境中,并无Prefab对象存在。代码1中 LoadAsset构建的对象是GameObject,此GameObject并不存在于当前场景(scene)中,而是被unity放到了一个空场景中。LoadAsset构建的GameObject对象,Unity希望我们把它当作资源(asset)使用。对比代码2中m_Prefab和m_GameObject的scene变量。思考?为什么不能需要构建GameObject时,直接从AssetBundle中反序列化构建呢?推测Unity希望开发者们遵循的工程实践是,将AssetBundle中反序列化构建的GameObject作为资源(asset)进行管理。当游戏中需要构建GameObject时,以资源(asset)为基础构建,而不是从连续内存上反序列化去构建。从而将对象构建与数据解压解耦。资源(Asset)资源(Asset)是unity希望开发者们遵循的一种工程实践规范。1. 所有AssetBundle中LoadAsset出来的对象称为资源(Asset)。2. 资源(Asset)与AssetBundle之间有强耦合关系。3. 资源(Asset)不要直接被使用在业务逻辑中。资源(Asset)和业务中创建的对象没有功能上不同。但在使用方法上有截然不同的区分。资源(Asset)可以由AssetBundle.Unload(true)统一强制销毁,也可以单个销毁。但是对于同一个AssetBundle,LoadAsset出的资源(Asset)只能被销毁一次,销毁后再重复LoadAsset()会失败。Instantiate()英文翻译为”实例化”,个人觉得这个接口用英文克隆”clone”描述更准确。Object.Instantiate()可以对任何对象clone。包括Texture、Shader、AudioClip,当然应该不会有人对这类内存占用大且不会被修改的对象clone。所以,遵循unity暗示的工程实践规范。所有占用大量内存且不会被修改的资源(Asset)不被clone,所有需要修改的逻辑对象会被clone出一个新的实例。如下图所示:Instantiate一个GameObject时,GameObject和Material会被clone出新的实例,而贴图(Texture)则保持引用。引用与非引用资源非引用资源类型:建议使用Instantiate构建新对象。GameObject被Instantiate时,GameObject包含的非引用资源也会自动被Instantiate。GameObjectMaterial引用资源类型:这些对象,在GameObject被Instantiate时会保持引用。MeshTextureShaderAudioClipBytes最佳工程实践(Best practice)所有资源(Asset)对象不再被引用时,AssetBundle才可以被销毁由于资源(Asset)对象被销毁后,无法重复从AssetBundle中Load出来。因此,必须所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高端私人影院建设公司物流运输管理制度
- 抑郁症常见症状及护理方法分析
- 类风湿性心脏病的症状识别及护理注意事项
- 2025-2026学年安徽省县中联盟高二上学期10月联考地理试题(解析版)
- 综合性应急消防救援队伍训词精神
- 2025-2026学年福建省泉州市高三上学期开学检测历史试题
- 2024-2025学年浙江省金砖联盟高一上学期期中联考地理试题(解析版)
- 钻孔操作方法规范
- 2026中水北方勘测设计研究有限责任公司校园招聘(第一批)终面笔试考试参考题库及答案解析
- 2025广东茂名市化州市司法局招聘镇(街道)专职人民调解员2人考试笔试参考题库附答案解析
- 保险专业代理机构高级管理人员任职资格申请表
- 法学概论(第七版) 课件全套 谷春德 第1-7章 我国社会主义法的基本理论 - 国际法
- 产业经济学第四版教学课件第十三章 行业自律
- 《网络空间安全概论》课件7-1-2人工智能安全
- 第八课+法治中国建设+高中政治统编版必修三
- 软件工程中的软件部署与运维指南
- 道路运输企业两类人员安全考核题库(含答案)
- 下肢深静脉血栓护理业务学习
- 房地产管理-华中科技大学中国大学mooc课后章节答案期末考试题库2023年
- 中华碑帖精粹:赵孟頫胆巴碑
- 教师职业道德与专业发展知到章节答案智慧树2023年山东师范大学
评论
0/150
提交评论