LogicProject
使用ILRuntiem 实现的热更工程
点击生成即可生成dll到unity项目中
项目结构
+ common 公共功能模块
+ config 表数据
+ manage 管理器
+ system 各系统模块
+ protocol 封包
+ utility 工具类
使用注意事项
- IL层开发不使用命名空间
- ILWindow 与 ILBehaviour 内不要定义空的生命周期函数,会造成额外的性能负担,同时尽量少用update。
- 不要在热更工程中使用foreach,请使用for。
- 在热更工程中常用到的主工程类,请在主工程的ILRuntimeCLRBinding中注册,可减少性能损耗。
- 如果主工程有生成绑定代码的类(未生成绑定代码的没区别),尽量不要使用泛型方法,可在ILExtension中写一个封装的泛型扩展方法,一般是方法名+Ex。
- 在热更工程中需要使用封包,如果主工程已存在,需要保证类名不一样,防止混淆,可在名称前加IL,例如:IL_DTC0102_tagCDBPlayer
- 数字类型尽量都用int,比如Action 没有做更多类型委托
不出新包的情况下, 功能开发可能碰到的问题
- 封包
a).两边用到相同封包,各自注册
b).底层封包字段变更可以使用字典 fields 更新
- 表格
a).旧表格两边都使用到的情况, 表结构相同使用底层表代码即可
b).新增字段往后添加,只在上层重导出表代码,各自使用
c).若有更改字段当作新增添加一列,即表会有两列一样的值,只在上层重导出表代码,各自使用;底层逻辑根据实际情况商定
框架层调用IL参考
ILRuntimeUtility.Instance.ModelInvoke("PetHorseAwakingModel", "RemoveFuncStateUpdate", this);
开发遇到奇怪的问题
a) 不要用 Dictionary<int, int[][]> 基本用不了;但ILEquipShenEvolveConfig可以用就很奇怪
b) 字典[列表[索引]] 获取值不要写一行,拆开写,不然也会发生奇怪的报错,用containkey也防不住
如 Dictionary<int, int> aaa; List bbb; aaa[bbb[1]] 会报错,改成两行
int c = bbb[1]
aaa[c] 则不会报错