少年修仙传客户端代码仓库
编辑 | blame | 历史 | 原始文档

LogicProject

使用ILRuntiem 实现的热更工程

点击生成即可生成dll到unity项目中

项目结构
+ common 公共功能模块
+ config 表数据
+ manage 管理器
+ system 各系统模块
+ protocol 封包
+ utility 工具类

使用注意事项

  1. IL层开发不使用命名空间
  2. ILWindow 与 ILBehaviour 内不要定义空的生命周期函数,会造成额外的性能负担,同时尽量少用update。
  3. 不要在热更工程中使用foreach,请使用for。
  4. 在热更工程中常用到的主工程类,请在主工程的ILRuntimeCLRBinding中注册,可减少性能损耗。
  5. 如果主工程有生成绑定代码的类(未生成绑定代码的没区别),尽量不要使用泛型方法,可在ILExtension中写一个封装的泛型扩展方法,一般是方法名+Ex。
  6. 在热更工程中需要使用封包,如果主工程已存在,需要保证类名不一样,防止混淆,可在名称前加IL,例如:IL_DTC0102_tagCDBPlayer
  7. 数字类型尽量都用int,比如Action 没有做更多类型委托

不出新包的情况下, 功能开发可能碰到的问题

  1. 封包
    a).两边用到相同封包,各自注册
    b).底层封包字段变更可以使用字典 fields 更新
  2. 表格
    a).旧表格两边都使用到的情况, 表结构相同使用底层表代码即可
    b).新增字段往后添加,只在上层重导出表代码,各自使用
    c).若有更改字段当作新增添加一列,即表会有两列一样的值,只在上层重导出表代码,各自使用;底层逻辑根据实际情况商定
  3. 框架层调用IL参考
    ILRuntimeUtility.Instance.ModelInvoke("PetHorseAwakingModel", "RemoveFuncStateUpdate", this);

  4. 开发遇到奇怪的问题
    a) 不要用 Dictionary<int, int[][]> 基本用不了;但ILEquipShenEvolveConfig可以用就很奇怪
    b) 字典[列表[索引]] 获取值不要写一行,拆开写,不然也会发生奇怪的报错,用containkey也防不住
    如 Dictionary<int, int> aaa; List bbb; aaa[bbb[1]] 会报错,改成两行
    int c = bbb[1]
    aaa[c] 则不会报错