框架整理

框架职责

  • 新增一套美术风格
  • 删除一套美术风格
  • 新增某一美术风格一类动效
  • 删除某一美术风格的某一类动效
  • 新增某一美术风格某一类动效的新风格
  • 删除某一美术风格的某类动效的某一个风格
  • 新增某一美术风格下的宝石块的风格
  • 删除某一美术风格下的宝石块的某一风格
  • 新增一套运行时美术风格切换策略(美术风格承接策略)
  • 删除一套运行时美术风格切换策略(美术风格承接策略)
  • 新增某一美术风格下某一页面上的交互/表现组件
  • 删除某一美术风格下某一页面上的交互/表现组件
    实验字段分类
    风格管理框架是对以下六类实验的管理和组织:
  1. 美术风格实验字段,有些字段是单纯的控制美术风格的(美术风格实验字段), 应该要保证这些实验字段中只有一个是生效的(做保底和冲突检查) (约束管理初始美术风格的实验字段)
  2. 美术风格策略实验,某些实验字段天生会带一些逻辑(素材承接实验字段),在运行时会切换美术风格, 在风格管理框架中将这类实验字段映射为一套策略, 也许Session内会有多个可以生效的美术风格切换策略,只会有一个字段真正生效,所以要做保底和冲突检查 (约束Session内更新美术风格的实验字段)
  3. 特定风格特定动效实验字段,有一些实验字段是在某一美术风格上的某一动效上做实验 约束开发者使其知晓自己所做的这块会影响哪些风格 增加一个CareExperiment字段, 当要去判断GetABTestGroup的时候需要判这个实验字段在不在Care Experiment里面,如果不在的话 兜底+报错
  4. 特定风格特定页面实验字段,在某一美术风格的页面上增加新的功能模块or页面表现的
  5. 同一页面的不同样式实验字段, 同一美术风格下的多个隐私弹窗,这部分实验字段应该在向UIManager中注册UIInfo时组织一下逻辑
  6. 宝石块风格实验字段
    其中 3、4、5、6实验字段的生效是以特定美术风格实验字段生效为前提的,因此框架组要开发者手动维护美术风格字段与该美术风格字段下3、4、5、6实验字段的关系.
    框架结构
    暂时无法在飞书文档外展示此内容
  7. 解析所有代表运行时美术风格策略切换的实验字段(冲突检查),得到一个最终生效的运行时美术风格切换策略
  8. 框架首先解析所有代表美术风格的实验字段(冲突检查),得到一个最终生效的美术风格,进而得到该风格下关心的实验字段清单,下面的环节中如果需要访问ABTest,必须从该清单间接访问GameABTest,不可以直接访问
  9. 根据2中得到的美术风格得到各动效、宝石、页面块风格的解析策略(冲突检查,解析策略中组织实验逻辑),得到最终各个动效、宝石块生效美术风格和页面的UIInfo
  10. 根据3中得到的页面生效风格,找到该套页面风格的信息(预制体、Logic、UIElements、UIStg)向UIManager中注册
  11. 根据3中得到的各动效策略,向EffectManager中策各动效信息
  12. 根据3中得到的宝石块策略,向BlockGem Manager中注册各宝石块的风格信息
  13. 根据2中得到的美术风格策略,在特定时机执行美术风格切换逻辑(如果美术风格切换策略不是切换页面的美术风格而是要切换某个动效/宝石块的风格,需要做美术风格和要切换动效的风格一致性检查)
  14. 打开某一页面的时候,根据该页面的Stg(为每一个UILogic都实现一个Stg有点繁琐了,在特定美术风格特定UILogic中直接访问风格框架的AB测解耦模块也是可以的)做表现
  15. 音效风格也需要加入

框架设计

风格解析模块设计

  • 页面美术风格枚举
  • 每个美术风格关心的实验清单
  • AB测解耦模块,传入美术风格关心的实验清单, 框架内所有要访问AB测的地方都是通过AB测解耦模块来访问的
  • 每个美术风格对应的每一类动效的解析逻辑(冲突检查)
  • 每个美术风格对应的宝石块的解析逻辑(冲突检查)
  • 每个美术风格对应的页面UIInfo的解析逻辑(冲突检查)
  • 每个美术风格与该风格可以播放的每一类动效风格的关系映射表
  • 每个美术风格与该风格可以表现的宝石块风格的关系映射表
  • 每个美术风格下的UIInfo预设表
    暂时无法在飞书文档外展示此内容
  1. 定义一套美术风格清单, 建立美术风格与每个动效之间囊括关系的映射表,来确保实验字段生效的动效和生效的美术风格是契合的.(美术风格动效的生效优先级是最高的)
  2. 美术风格解析逻辑 得到一组可以在当前美术风格下展示的动效映射表 得到当前美术风格关心的表现相关的实验字段组
  3. 解析在Session中更新美术风格的逻辑体只会有一个字段真正生效,所以要做保底和冲突检查)(约束Session内更新美术风格的实验字段)
  4. 解析各个动效和宝石块 会解决冲突
  5. 得到一组美术风格、动效、宝石块的风格清单 + 当前美术风格关心的其他表现上的实验字段组
  • 美术页面风格 消除动效风格 心动动效风格 加分动效风格 Combo动效风格 加分动效风格 鼓励语动效风格 破纪录动效风格 清盘动效风格 方块发光动效风格….
  • 宝石块风格
  • CareExperiments 当前这个风格关心的实验 如果不在里面就报错 需要所有配置层之外调用的ABTest的实验字段加入这里面 实验字段分类中的3 4 约束开发者使其知晓自己所做的这块会影响哪些风格兜底+报错

框架工作流梳理

  • 新增/删除美术风格
    • 在美术风格解析模块添加新风格的实验字段解析逻辑
    • 在UIManager模块添加一套风格页面的预设
    • 准备页面预制体资源、页面UIElements、页面Logic、页面运行时策略Stg
  • 新增/删除某一美术风格一类动效
    • 将该实验字段添加到美术风格关心的实验字段中
    • 新增一个表示该类动效的枚举类型
    • 在解析该动效枚举字段部分增加该实验字段的逻辑
    • 新增该动效播放需要实现的接口
    • 准备动效预制体、驱动预制体脚本
    • 在游戏流程中新增动效播放的时机(在对应风格的GameView上播,不会影响到其他风格,但是对于没有改动效的美术风格要做保底,这部分逻辑还不清楚,是否每一个美术风格对应一个GameView)
  • 新增/删除某一美术风格某一类动效的风格
    • 将该实验字段添加到美术风格关心的实验字段中
    • 新增动效风格枚举字段
    • 在解析该动效枚举字段部分增加该实验字段的逻辑
    • 准备动效预制体资源、准备驱动动效的脚本、实现动效定义的接口
  • 新增/删除某一美术风格下的宝石块的风格
    • 将该实验字段添加到美术风格关心的实验字段中
    • 新增表示该风格的宝石块枚举类型
    • 准备宝石块美术资源
    • 新增解析该宝石块实验字段的解析逻辑
    • 定义一套宝石块资源预设
    • 定义资源预设与枚举字段的映射关系
  • 新增/删除一套运行时美术风格切换策略(美术风格承接策略)
    • 定义新的美术风格切换策略枚举字段
    • 在切换策略解析处新增该实验字段的解析逻辑
    • 编写策略的切换逻辑,其中只能写美术风格、动效风格、宝石块风格的风格切换逻辑
  • 新增/删除某一美术风格下某一页面上的交互/表现组件
    • 将该实验字段添加到美术风格关心的实验字段中
    • 预制体上添加组件
    • 在特定页面的Stg中组织实验字段逻辑
    • 在特定页面的Logic中调用Stg的接口做相关的显示

要做的事情

  • 精细化AB测解析模块的设计实现
  • UIManager模块扩展支持多风格管理
  • 老UILogic重构 接入新UIManager模块
  • EffectManger实现
  • 动效管理模块实现
  • 动效Entity模块实现
  • 原来EffectEntity迁移
  • 宝石块管理模块的实现
  • 加分动效的重构
  • AniPlayer集成
  • Adventure关卡页面的颜色配置(低优先级)

注意事项

  • id 资源和脚本绑定
  • 动效模块去其他模块的交互逻辑 如果要交互的其他模块出了问题 要在动效模块上报 重力下落在卡通风格里没有这个逻辑, 但是调用播放重力下落的时候数据层传上来的要求播放重力下落动效,这时要在动效模块上报
  • 考虑在哪些方面会出问题
  • 动效管理模块 与重力下落的数据逻辑
  • 只在一个美术风格下做了一个组件的AB测试 影响到了其他风格同样的页面
  • 风格的解析抽到一处
  • UI变成了容器 接受外部各种组件的传入 组件自己保证不出问题 需要遇到业务场景 优先级不高