basil/vampire-like 开发日志
本次变更范围
本次针对 basil/vampire-like(别名 vampire-like)仓库共提交 3 个代码类 commit,总增删行数为 +216 / -167,主要覆盖通用UI组件缺陷修复、存量UI表单技术债清理、表单重命名三类工作。
1. CommonButton 导航失效&重复点击问题修复
这次处理了CommonButton藏了挺久的两个bug:
- 移除了
CommonButton自定义的_onClickAction序列化字段及对应编辑器绘制逻辑,补全了基类OnEnable/OnDisable生命周期的调用 - 同步调整了
DisplayItemInfoForm、LevelUpForm两个预制体的按钮持久化事件绑定配置
当时踩坑的原因说起来挺离谱:之前为了复用Unity原生Button的Navigation(键盘/手柄导航)能力,直接让CommonButton继承了
UnityEngine.UI.Button,但重写OnEnable、OnDisable的时候忘了加base调用——而原生Button的导航逻辑刚好是在OnEnable里注册初始化的,直接导致所有用CommonButton的地方导航全失效了。 另外原来自定义的_onClickAction还有重复触发的问题:原生Button自己会抛一次点击事件,CommonButton的自定义事件又抛一次,等于点一次按钮跑两遍逻辑。权衡下来干脆把自定义的点击事件实现全删了,完全复用基类的生命周期和事件逻辑,一次性把两个问题都解决了。
2. DisplayItemInfoForm 5层UI规范结构整理
按照5层UI架构规范完成了该表单的结构改造:
- 新增
DisplayItemInfoRecycleEventArgs事件参数类,顺带着清理了冗余的ShopWeaponRecycleEventArgs等旧事件定义,收敛事件体系减少重复代码 - 调整
DisplayItemInfoContext上下文结构,新增ShowRecycleButton字段,通过回收回调是否存在自动控制按钮显隐 - 同步调整相关UI脚本的目录结构,适配5层UI规范的分层要求
这次做结构改造主要是这阶段的核心任务就是清之前UI侧堆的技术债,把之前临时写的、结构混乱的存量表单全部对齐统一的5层架构要求。 改的时候踩了个C#的特性坑:给Context加构造逻辑的时候,发现带Sprite类型参数的Context需要异步加载资源,但C#的构造函数不支持异步操作,最后只能在Controller层补了单独的异步初始化方法绕过去。
3. DisplayItemInfoForm 重命名为 ItemTooltipForm
完成了该表单的全量重命名及引用同步:
- 同步更新了UI表单配置表、
UIFormType枚举的表单定义 - 批量重命名该表单对应的所有事件参数类(比如原
DisplayItemInfoHideEventArgs改为ItemTooltipHideEventArgs)、目录及所有关联引用
改名字没啥特别的业务或者规范要求,纯纯是原来
DisplayItemInfoForm这个名字太长了,看着太费劲,写代码的时候敲起来也麻烦,就改成了更短的通用命名,省得每次打名字都要敲一堆字母。
本次踩坑记录&待验证风险
这次改的都是比较底层的UI组件和基础表单,踩了个Unity开发的经典坑:改了基础组件的方法名之后,C#代码里的引用IDE会直接标红提醒,但是Editor里预制体上序列化绑定的事件引用不会有任何报错提示,只会在运行的时候出问题。这次改完特意把从底层Item组件到顶层用到这些组件的Form全查了一遍,但还是不敢保证100%没有遗漏。
后续关注点
- 本次CommonButton的修复只同步调整了两个用到的表单的绑定,其他用了该组件的存量UI还没挨个验证,后续需要统一过一遍导航和点击功能的可用性
- ItemTooltipForm刚做完重命名和结构大改,还需要再排查一遍有没有漏改的硬编码引用、预制体关联未同步的问题
- 目前UI侧的技术债清改还在进行中,后续还要把剩下的存量表单都对齐5层规范,得考虑整个批量检查序列化引用的工具,不然每次改完手动查预制体太费时间了
注:本文由模型
doubao-pro生成(草稿与终稿同模型)。