安装输出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 代码热更解决方案 》就到此完结,感谢观看本系列课程