u3d 代码热更解决方案 ILruntime

在这里插入图片描述

安装输出helloWorld
点击观看视频

基于ilruntime实现MonoBehaviour 行为

视频观看地址

热更程序集里拥有MonoBehaviour 能力

方法一: 继承MonoBehaviour
因为MonoBehaviour隶属主程序集,热更程序集 继承 主程序集 属于 跨域继承.
缺点:
运行性能低,而且需要编写接口适配,无论是性能和开发效率都不具备优势,且官方也不推荐这么做。所以不采用

方法二:自行架构
主工程 适配器
HotFixMonoBehaviourAdapter(通过字符串实例化热更对象,并且调用生命周期的方法 例如 Awake Start…)
热更工程
HotFixMonoBehaviour(实现生命周期函数)

案例:跑马灯

功能描述:点击UI按钮,文字移动

注册 自定义委托 ,注册 CLR绑定(性能优化)

U3D热更组件可视化编辑

主工程
定义序列化模型 ClassData

编辑器工具
读取热更程序集,通过反射获取 类型的所有字段和成员,根据U3D的序列化流程 绘制到 组件面板

热更工程
反序列化方法,通过ClassData 设置成员属性

运行时
主工程 调用 热更工程 的反序列化方法,设置成员属性

在这里插入图片描述

ILruntime 实战

本节的主题:热更代码划分
采用《天地劫》框架作为讲解素材
因为它包含了商业游戏的常见业务,比如
(战斗,技能,AI,UI,资源管理,寻路系统等常用功能)

第一个问题:哪些业务需要热更?

根据业务需求变化频率,一般可分为2个部分
变化频率低的通用业务
变化频率高的游戏业务

通用业务
资源管理模块(JAssetBundleMgr),负责资源的加载和下载更新,加解密
(具体可以查阅往期的视频)

A星寻路库(AStarPathFinding),负责游戏路径的计算

基本可以认为这些模块是不会改动的,是稳定的

游戏业务-战斗,技能,UI,AI,流程控制。所属目录(slgkit/scripts)
稳定的通用业务保留在主工程
对变化频繁的游戏业务放到热更工程
HotFix_Project~

热更代码的语法编写规则

本节的目标,角色显示移动范围
整个过程
调用A星插件计算路径
对路径集合进行数据筛选
把最终的数据显示出来

在这里插入图片描述
List().FindAll();

因为热更工程的委托默认只支持Action和Func
List.FindALL(Predicate match)表达式签名不被支持

解决该问题有两种办法
在主工程里写转换接口
在这里插入图片描述
或者 在热更工程编写符合签名的FindAll(Func<T,bool>)

在这里插入图片描述

战棋游戏热更代码修改过程
在这里插入图片描述

热更项目不支持 可空类型
比如Vector3? MouseRaycast() 改成 Vector3 MouseRaycast()

forech 最好不要用 有gc,改成for

(热更程序集里的)组件添加和获取

要做的事情:在热更程序集里添加 声音,特效,AI,UI组件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
示例代码
在这里插入图片描述

携程的使用

我们要做的事情:开启AI托管系统

因为AI托管用到了携程,所以热更代码需要适配

在热更里使用携程,需要在主工程里注册携程适配器,ilruntime例子有提供CoroutineAdapter
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

事件管理器

要做的内容:现UI飘字,打击特效,音效
在这里插入图片描述
原本的事件管理模块(不支持热更运行)
在这里插入图片描述

更改后的(支持热更)
在这里插入图片描述

使用代码:

在这里插入图片描述

代码热更应用

通过热更的方式:为战斗系统添加帮助说明

第一个问题是:如何让HotFix_Project.dll更新?
可以回顾我们之前编写的资源管理模块
视频专题《unity3d AssetBundle 资源管理和更新》
具体操作
把程序集文件拷贝到资源生成目录,生成资源清单和资源文件

得到资源1.0版本,并且 部署到服务器

发布游戏-客户端1.0版本,运行测试

2.0版本开发需求-为战斗系统添加帮助说明

编写业务逻辑

重复 生成资源和部署服务器 步骤,得到2.0 版本

运行客户端 ,可以看到,在没有重新发布客户端的情况下

战斗场景多了帮助说明

完结

《ILruntime 代码热更解决方案 》就到此完结,感谢观看本系列课程

猜你喜欢

转载自blog.csdn.net/koljy111/article/details/119511764