unity热更新json_Unity热更新之AssetBundle打包篇
unity3d在5.0之后打包Assetbundle变得比之前简单多了,最简单的办法就是把所有资源都标记Assetbundle的Flag,然后直接调用unity3d的打包Assetbundle即可,详情可参见官方文档。
通过标记打包方式的优缺点
这种打包方式的优点在于简单,缺点在于不好管理需要需要打包的资源。举例来说就是你必须把所有需要打包的资源都标记上Assetbundle的Flag,(包括prefab,texture,material,fbx,animation等),最后容易把资源打得特别散,造成每一个文件都是一个assetbundle。这样其实对于加载是特别不友好的,每一个assetbundle的引用都至少会有大约4kb的内存。如果不这样做,只对prefab做标记的话,容易造成资源的重复打包,一些texture,fbx可能会多次打进不同的assetbundle里。
通过buildmap方式打包的优缺点
unity还提供了一种buildmap的打包方式,可以自己管理需要打包的资源,优点在于自己管理依赖关系,可以最大程度的控制打包粒度,缺点就是需要写点代码,大约500行。
使用buildmap打包的流程
1.目录管理
管理好你的资源目录,把需要单独打包和不需要单独打包的文件放在不同的目录下,默认需要单独打包的只有预制件目录,其他的目录一般可以根据依赖自动打进包里,可以参考下面的目录结构:
Assets
|--Prefabs
|--a.prefab
|--b.prefab
|--Textures
|--a.tex
|--b.tex
|--c.tex
|--Materials
|--Aniamations
|--Models
|--Other
我们打包前会遍历Prefabs目录,得到每一个prefab的依赖,构建一棵依赖树,根据依赖树进行打包。
2.构建依赖树
unity3d提供了 AssetDatabase.GetDependencies的方法来获取一个文件的依赖关系,我们假设遍历完预制件文件夹后得到的依赖关系如下:
a.prefab依赖于a.mat,a.fbx,common.animator;
b.prefab依赖于b.mat,b.fbx,common.animator;
a.mat依赖于a.tex,b.tex
b.mat依赖于b.tex,c.tex,d.tex
最终形成的依赖关系树如下:
buildtree.png
注意:unity提供了获取预制件的直接依赖和所有依赖(包括间接依赖),构建依赖树时需要获取预制件的直接依赖,再依次获取每一个依赖文件的直接依赖,直到获取到最底层的依赖,由此构建出所有预制件形成的依赖树。
3.根据依赖树打包Assetbundle
如果树的一个节点有2个或以上的父节点,则该资源被2个或多个其他资源所依赖,该节点需要打包成独立的Assetbundle。
如果树的一个节点没有父节点,则该资源是最顶层的预制件,需要打包成独立的Assetbundle。
打包时应该从最底层开始逐层向上遍历,在每一层寻找是否有节点的父节点数量大于1或者等于0,将满足条件的节点打成Assetbundle,直到遍历完整棵树。因为打包Assetbundle的时候是会将所有被依赖到的文件都自动打进Assetbundle里,所以从底层往上打包可以让上层的Assetbundle直接依赖到底层的Assetbundle,避免了资源被重复打进不同的Assetbundle里。
根据上面的树,最终打出来的Assetbundle如下:
b.tex.assetbundle
common.animator.assetbundle
a.prefab.assetbundle
b.prefab.assetbundle
这样既不会每一个文件都打出一个assetbundle,也省去了手动管理依赖关系的繁琐。
关于场景的打包
因为unity3d 5.x之后的版本不再将光照贴图的信息存放在预制件中,因此如果做过光照烘焙的场景,就必须把预制件直接摆放在场景中,动态加载预制件将丢失光照贴图的信息。对于这种情况,摆放在场景中的预制件可以不放在最终打包的预制件目录中,因为打包场景的时候会将场景的资源都统一打包,不会依赖到你所打包的预制件,因此场景中的预制件建议单独存放目录。
关于其他文本文件
其他的文本文件例如json,lua或者其他配置文件,可以直接在打包的时候复制一份到StreamingAssets,保证最后我们所有的资源在手机上都通过StreamingAssets来加载。
unity热更新json_Unity热更新之AssetBundle打包篇相关推荐
- unity python热更新_Unity热更新介绍和测试方法
最近项目中增加了热更新了功能,程序也完成了相应的开发,接下来就需要对这个模块进行相应的测试工作了,在测试开始之前,了解下其原理总是很有好处的. 1:什么是热更新 简单的理解就是:用户重启客户端就能实现 ...
- Unity应用的iOS热更新
Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ? 什么是热更新 ? 为何要热更新 ? 如何在iOS 上对Unity 应用进行热更新 ? 支持 ...
- 【游戏开发高阶】从零到一教你Unity使用ToLua实现热更新(含Demo工程 | LuaFramework | 增量 | HotUpdate)
文章目录 零.前言 一.我做的热更新Demo 1.效果演示 2.流程图 3.工程源码 二.为什么要有热更新 三.Unity如何支持热更新 1.热更C#代码 2.热更lua代码与资源 四.Unity中集 ...
- Unity游戏开发-游戏热更新以及登录流程
本篇主要分享基于热更新的游戏初始化方案. 整体初始化的流程大致为:检查是否需要解压资需要则解压,之后再检查是否存在需要热更新的资源文件需要则更新,更新完成后则初始化结束可进入登录界面. 关于登录这块的 ...
- 游戏资源差异化热更新及加密全攻略(Assetbundle 打包 AssetBundle 加载 AssetBundle 加密)
游戏热更新资源加密的必要性 unity中资源热更新还是Assetbundle为主,资源使用越来越广泛,ab包里可以包含图片.视频或者脚本,都是游戏的知识财产,如果被破解者或者竞争对手解开,拿到里面的内 ...
- untiy3d 热更新 脚本 动态更新 c#lite 图形学
以下文章转载自图形学大神李总老师的博客. C#Lite是李总自己做的一个开源项目,旨在解决因u3d在ios平台不能动态更新以及lua脚本在u3d上效率低下的问题.作为4年前就给李总当小弟,被李总狂虐的 ...
- 游戏热加载、即时加载、热更新、热补丁原理流程图
本文主要描述游戏及软件工程中的更新原理及流程,具体代码会在一周内追加. 看什么看 你怎么又复制 一.热加载实现流程 所谓热加载,就是将资源放在服务器端,当客户端运行时,先运行资源加载程序,待所有资源加 ...
- idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...
在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果.那么有没有一种方式能够快速的.自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能 ...
- less webpack 热更新_webpack---less+热更新 使用
最近尝试用less写界面,webpack进行打包,然后发现每次修改less时都需要重新执行webpack打包一下,于是就想到了webpack热更新这个功能. 一.使用less less是一门css预处 ...
最新文章
- 从自监督学习主流方法、最新工作进展,看未来前景研究方向
- [算法]华为笔试题——拼音与英文转换
- 苏教版四下用计算机计算,苏教版四年级下册数学单元测试-4.用计算器计算 (含答案)...
- lists and Variables supported as JIT inputs/outputs. Dictionaries and strings are also accepted but
- Android IOS WebRTC 音视频开发总结(四二)-- webrtc开发者大会
- 特定于数据中心的人工智能完成任务的速度可以提高两倍
- MYSQL交通系统查询,城市公交查询系统的设计与实现(SSH,MySQL)(含录像)
- 在vs2005中使用Com连接SAP系统(二)
- 解决yarn build时报错:内存溢出FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed
- linux 查当前pid_杀死僵尸进程,你需要这些神奇高效的Linux命令行
- 【LeetCode1046】最后一块石头的重量(堆heap)
- HDU多校联合赛(1007 Magical Forest)模拟题
- jsp 动态添加一行数据_大数据从入门到深入:JavaEE 之 动态网页开发基础 JSP的数据交互(3)...
- 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的大学生健康档案管理系统
- .net|dotnet应聘人员应该掌握的知识点
- oracle热点表online rename
- laravel安装说明
- qu32调音台说明书_Qu-32 数字调音台
- python双星号什么运算_Python中的*(星号)和**(双星号)完全详解
- group by 为什么 distinct 效率高
热门文章
- 【数据结构与算法】二叉树遍历
- exe解包和重新打包_pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇
- 类的加载顺序和静态代码块和匿名代码块的区别
- html传输php连接mysql数据库_解析HTML、JS与PHP之间的数据传输
- matlab保存变量的值,怎么不能保存之前的变量值?求解
- HTML字体怎么显示,教你如何用CSS来控制网页字体的显示样式
- 左外连接的sql语句_Django数据库连接和使用原生sql语句
- 富文本编辑器中空格转化为a_如何对富文本编辑器(FCK Html Editor)的工具栏进行扩展?...
- 【小白学习C++ 教程】二十、C++ 中的auto关键字
- 深度学习作业(一)手写字体