Unity热更新——AssetBundle(AB包)+管理器

什么是热更新?

游戏或者软件更新时,无需重新下周客户端进行安装,而是在应用程序启动的情况下,在内部进行的资源或者代码更新

1、了解AB包是什么:

特定于平台的资产压缩包,有点类似压缩文件,资产包括:模型、贴图、预设体、音效、材质球等等

2、AB包有什么作用:

相对Resources下的资源,AB包更好管理资源,区别是:

AssetBundle Resources
可以从网络下载,也可以本地自己打包,资源可以分布在多个包 在打包的时候会压缩一起打包,包括许多无用文件
存储位置可自定义 Resouces文件夹下
压缩方式可定义 只能压缩为二进制
后续可以动态更新 只读(只能通过Resouces.Load加载),无法修改

作用是:

(1)减少包体大小:压缩资源(节约硬盘空间),减少初始包大小

(2)热更新:

资源热更新:对模型、贴图等进行更新

脚本热更新:版本更新添加活动等

热更新基本规则:

3、生成AB包资源文件

(1)Unity编辑器开发,自定义打包工具

(2)官方提供好的打包工具:Asset Bundle Browser

路径:Window->Package Manager->搜索Asset Bundle Browser,加载成功后在Window窗口会有AssetBundles

注意:高版本Unity用Addressables(以后会学习)功能封装了AB包功能,在Package Manager中可能搜不到Asset Bundle Browser,如果要使用在github上下载压缩包后解压到Packages文件夹下即可

注意:U3D中的C#脚本不能被打包为AB包,所以采用Lua热更新(注意:物体的组件本质是根据反射来对数据进行解析,因此真正打包的不是C#代码本身,而是组件关联的数据)

在资源的Inspector窗口最下方有一个AssetBundle窗口,第一个窗口是包名,第二个窗口是后缀名(一般不修改),注意是针对预设体而言,如果是Heirachy中的对象在Inpector窗口是不会有此选项的!

在AssetBundles面板中:

Configure 会出现关联的AB包
Build 进行AB包的生成 Build Target:构建的平台目标(IOS,Android,windows)
Output Path:输出路径
Clear Floders:是否清空文件夹,一般会选择,即在多次打包时,将原文件夹清空(即原来所有的包清空重新构建),但是资源很大时
### Unity 游戏引擎中的热更新实现 #### 方法与步骤 在Unity游戏开发过程中,为了实现在不重新发布整个应用的情况下修复错误或增加新功能的能力,通常会采用热更新机制。对于基于HybridCLR框架的游戏而言,这一过程涉及多个方面的工作。 针对需要频繁内容更新的应用场景,建议采取如下措施: - **明确区分静态和动态代码**:确保应用程序的核心部分编译成AOT(Ahead Of Time),即提前编译的形式运行于目标平台上;而对于那些可能经常变动的部分,则应设计为可通过网络下载并即时加载执行的IL(Intermediate Language)字节码文件[^1]。 - **利用DHE(Dynamic Hotfix Engine)**优化策略:当有新的版本可用时,能够自动检测差异并将修改过的模块同步至客户端内存空间内完成替换操作,从而不影响正在进行中的玩家体验。 具体来说,在实际编码层面,可以通过定义特定接口来支持这种灵活性。例如,处理UI交互逻辑时可以参照`IPointerClickHandler`接口的方式编写响应函数,以便更好地适应未来可能出现的变化需求[^2]。 此外,还应当建立一套完善的测试体系用于验证每次部署之后系统的稳定性和功能性,括但不限于单元测试以及模拟真实环境下的压力测试等环节。 最后值得注意的是,虽然上述方案主要围绕着C#脚本展开讨论,但对于涉及到图形渲染效率等问题同样不可忽视。比如过度绘制(Overdraw),它是指同一像素在同一帧里被多次写入颜色值的现象,这无疑会给GPU带来额外负担。因此开发者们也需关注此类性能指标并通过调整资源布局等方式加以改善[^4]。 综上所述,通过合理规划架构、选用合适的工具链再加上严谨的质量控制手段,便可以在Unity平台之上构建起高效可靠的热更能力。 ```csharp // 示例:创建一个可扩展的基础类作为插件化组件的一部分 public abstract class BaseComponent : MonoBehaviour { protected virtual void Start() {} } // 动态加载的内容继承自该基底,并实现了具体的业务逻辑 public class DynamicFeature : BaseComponent { private void Awake(){ // 初始化工作... } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值