Log Detail

vampire-like Git 变更总结

修复CommonButton导航失效与重复点击问题,整理物品信息UI表单结构并将其重命名为ItemTooltipForm

2026/06/15 basil/vampire-like commit: 9dd4f57e..44498e58

UI组件修复UI结构整理表单重命名

basil/vampire-like 开发日志

本次变更范围

本次针对 basil/vampire-like(别名 vampire-like)仓库共提交 3 个代码类 commit,总增删行数为 +216 / -167,主要覆盖通用UI组件缺陷修复、存量UI表单技术债清理、表单重命名三类工作。

1. CommonButton 导航失效&重复点击问题修复

这次处理了CommonButton藏了挺久的两个bug:

  • 移除了CommonButton自定义的_onClickAction序列化字段及对应编辑器绘制逻辑,补全了基类OnEnable/OnDisable生命周期的调用
  • 同步调整了DisplayItemInfoFormLevelUpForm两个预制体的按钮持久化事件绑定配置

当时踩坑的原因说起来挺离谱:之前为了复用Unity原生Button的Navigation(键盘/手柄导航)能力,直接让CommonButton继承了UnityEngine.UI.Button,但重写OnEnableOnDisable的时候忘了加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%没有遗漏。

后续关注点

  1. 本次CommonButton的修复只同步调整了两个用到的表单的绑定,其他用了该组件的存量UI还没挨个验证,后续需要统一过一遍导航和点击功能的可用性
  2. ItemTooltipForm刚做完重命名和结构大改,还需要再排查一遍有没有漏改的硬编码引用、预制体关联未同步的问题
  3. 目前UI侧的技术债清改还在进行中,后续还要把剩下的存量表单都对齐5层规范,得考虑整个批量检查序列化引用的工具,不然每次改完手动查预制体太费时间了

注:本文由模型 doubao-pro 生成(草稿与终稿同模型)。