XtGameKit/Doc/ET-Packages-Audit.md

12 KiB
Raw Permalink Blame History

ET 框架包能力清单38 个)

目的:避免重复造轮子。每次设计新功能前先查这份清单,确认是否有现成包可用。 更新时间2026-05-27 范围My project/Packages/ 下所有 cn.etetet.* + com.etetet.*


速查表

类别 状态 关键 API/类
核心运行时 cn.etetet.core 自带可用 Log / MongoHelper / World / Entry / Fiber / TimerComponent
cn.etetet.loader 自带可用 CodeLoader / Init / NLogger / BuildHelper
cn.etetet.sourcegenerator 自带可用 [EntitySystemOf] / [ComponentOf] 等属性
cn.etetet.memorypack 自带可用 MemoryPack 序列化
cn.etetet.mathematics 自带可用 float3/quaternion 等
com.etetet.init 自带可用 MongoDB.Driver 原生 DLL + 包依赖解析
UI 框架 cn.etetet.yiuiframework 自带可用 YIUIMgrComponent / PanelInfo / YIUILoadHelper
cn.etetet.yiui 需扩展 项目级业务 UI目前仅 CommonHeader
cn.etetet.yiuiinvoke 自带可用 [YIUIInvoke] 跨模块解耦调用
cn.etetet.yiuigm 完全现成 [GM] 属性 + IGMCommand 接口 + GMPanel 面板
cn.etetet.yiuitips 自带可用 TipsHelper 弹窗
cn.etetet.yiuireddot 自带可用 红点树 + DAG
cn.etetet.yiuiloopscrollrectasync 自带可用 异步无限滚动列表
cn.etetet.yiui3ddisplay 自带可用 UI 内嵌 3D 模型
cn.etetet.yiuieffect 自带可用 UI 特效(粒子/灰度)
cn.etetet.yiuiyooassets 自带可用 YIUI ↔ YooAssets 桥接
业务样板 cn.etetet.login 需扩展 C2R_LoginHandler / C2G_LoginGateHandler / Player(仅 Account 字段)
cn.etetet.statesync 仅参考 MMO DemoUnit 同步/跨 Map
cn.etetet.yiuistatesync 仅参考 YIUI Login/Lobby/Main Panel 集成样板
MMO 战斗(与本次无关) cn.etetet.unit 不复用 MMO 单位 Entity
cn.etetet.numeric 可借鉴 KV 数值 + Buff 五段公式 + Watcher
cn.etetet.move 不复用 MMO 寻路点移动
cn.etetet.ai 不复用 行为机 AI
cn.etetet.aoi 不复用 九宫格视野同步
cn.etetet.recast 不复用 3D 寻路
cn.etetet.ui 已废弃 ET 原生 UI被 YIUI 替代)
cn.etetet.demores 不复用 StateSync Demo 资源
网络 cn.etetet.router 自带可用 KCP 软路由
cn.etetet.netinner 自带可用 进程间内网消息
cn.etetet.http 自带可用 轻量 HTTP Server
cn.etetet.actorlocation 可选 分布式 Actor Location
协议 cn.etetet.proto 自带可用 ET/Proto/Proto2CS 工具链 + 自动 Opcode + MemoryPack
配置 cn.etetet.excel 不够用 Excel→C#+JSON+BSON不支持外键/嵌套 struct
cn.etetet.startconfig 自带可用 服务器拓扑配置Process/Zone/Scene/Machine
资源/热更 cn.etetet.yooassets 自带可用 YooAsset 资源管理(打包/热更/下载)
cn.etetet.hybridclr 自带可用 HybridCLR C# 全平台热更
cn.etetet.referencecollector 自带可用 Prefab 引用收集器
工具/运维 cn.etetet.console 完全现成 [ConsoleHandler] 属性 + IConsoleHandler 接口 + stdin 命令循环
cn.etetet.watcher 可选 多进程保活

关键能力GM/日志/DB/配置/协议)

GM 命令(完全现成,双轨

维度 cn.etetet.console cn.etetet.yiuigm
运行端 服务端 stdin REPL 客户端 YIUI 面板
扩展方式 [ConsoleHandler("AddItem")] + IConsoleHandler.Run(fiber, contex, content) [GM(EGMType.Test, 1, "发放道具", "...")] + IGMCommand.GetParams + Run(scene, paramVo)
参数类型 字符串自由切分 Enum / String / Bool / Float / Int / Long 6 种
内置命令 R 热更 DLL、C ConfigName 热更 Reload 配置、Robot 压测 示例 GM_Test
业务 GM 接入 新增 [ConsoleHandler] 新增 [GM]

结论不需要新建 GM 框架。每个新业务命令只需写一个 [GM] 类(客户端)或 [ConsoleHandler] 类(服务端)。

日志(自带 Log 类,需扩展)

// 已有:
Log.Debug(msg); Log.Info(msg); Log.Warning(msg); Log.Error(msg);
Log.Trace(msg); Log.Console(msg);

// 已有Fiber 级 ILog 接口可替换底层(默认 NLog 服务端 + UnityLogger 客户端)

缺失能力(要在 ET Log 基础上扩展):

  • jsonl 审计日志(无)
  • 模块标签前缀(无,需约定 [Hero]/[Bag]/[Gacha] 写法)
  • 按天分目录NLog 支持,需配置)
  • 慢操作告警(无,需自加 AOP/手动埋点)
  • reqId 全链路透传(无,需在 Handler 基类透传)
  • 敏感字段脱敏(无)
  • 客户端日志桥接到服务端(无)

结论扩展非重写。新建 cn.etetet.audit 或在 cn.etetet.logging 加扩展方法 Log.Audit(module, action, payload),底层调 NLog 输出 jsonl 到 Logs/Audit/{module}/{date}.jsonl

DBComponent / 玩家持久化(基础设施现成,业务层缺)

已有 缺失
MongoHelper.ToJson/FromJson/Clone/CloneBytesBSON 序列化) IDBComponent.Save<T>/Query<T>/Update<T>/Delete<T> 业务封装
com.etetet.init/Plugins/MongoDB/* 原生 DLL 连接池/重试/慢查询
MongoRegister 注册类型映射 Entity 与 MongoDB Collection 的映射约定

结论新建业务包 cn.etetet.db 包装这层。不需要重写 BSON

协议生成(完全现成)

1. 在业务包下建 Proto/*.proto
2. Unity 菜单 ET/Proto/Proto2CS
3. 自动扫描所有 cn.etetet.* 包的 Proto/ 目录
4. 生成带 [MemoryPackable] + Opcode 的 C# 到 cn.etetet.proto/CodeMode/Model/{Client,Server,ClientServer}

现有协议组占用1000-1099 Login / 1100-1199 Router / 11001-11099 StateSync C2C / 20100-20199 ActorLocation / 21001-21099 StateSync M2C / 21100-21199 StateSync M2M。

ROK 占用建议3000-3099 Hero / 3100-3199 Bag/Equip / 3200-3299 Gacha。

YIUI 框架(深度复用UI 几乎零造轮

核心认知

  • 标准面板入口:scene.YIUIRoot().OpenPanelAsync<T>() / OpenPanelParamAsync<T>(...) / OpenPanelWaitAsync<T>(...)(模态等待)
  • 数据驱动Prefab 挂 UIDataBind* 组件,代码改 u_DataXxx.SetValue(...) 自动刷新 UI
  • 事件驱动Prefab 挂 UIEventBind* + [YIUIInvoke(const)] 静态方法接线,无需 Button.onClick.AddListener
  • 跨模块解耦:[YIUIInvokeSystem("Key")] + YIUIInvokeHandler<T> + YIUIInvokeSystem.Instance.Invoke(...)
  • CDETable = Component + Data + Event 三张表YIUI 自动化工具一键生成 Component/System

15 条「YIUI 已经做了的事」速查

# 不要自己做 用 YIUI 什么
1 面板打开/关闭/栈/Home 管理 scene.YIUIRoot().Open/ClosePanelAsync
2 按钮点击接线 UIEventBind* + [YIUIInvoke]
3 Item/面板字段刷新样板 u_Data* + UIDataBind*
4 图标/贴图异步加载 UIDataBindImage(内部走 YooAsset
5 Prefab 从 AB 加载 打开 Panel 即可(cn.etetet.yiuiyooassets 桥接)
6 确认框 / 飘字 / 模态等待 TipsHelper.OpenWait/OpenSync + TipsMessageView/TipsTextView
7 红点树与父子传播 RedDotMgr.Inst.SetCount(key, count) + RedDotBind只写叶子,父节点自动汇总
8 长列表虚拟化与池化 YIUILoopScrollChild.SetDataRefresh(IList) + ReRenderer()
9 GM/模块间零引用调用 YIUIInvokeSystem + invoke 契约包
10 顶栏/关闭按钮 现成 CommonHeader + YIUICloseCommon
11 英雄详情 3D 模型 YIUI3DDisplayChild.ShowAsync(resName),自带 RT/Camera/RawImage 池
12 按钮灰显/抽卡 UI 特效 UIDataBindGray / UIEffect / UIParticle
13 异步操作全屏挡点击 scene.YIUIMgr().BanLayerOptionForever()
14 UI 倒计时文本 CountDownMgr(在 framework
15 列表数据变长度不变 Loop.ReRenderer() 增量刷新

仍需自己做YIUI 未覆盖)

原因
BagItemTooltip 道具浮层 tips 包无现成 Tooltip View但容器可用 TipsHelper.Open 承载
BagItemUICommon 通用道具组件 业务复合组件,用 YIUI 生成 + 上述绑定拼装
英雄列表三段分组 Loop 只负责虚拟化,分组逻辑在 IList 数据层或 Header Item
天赋树可视化 无图编辑器组件,需自绘
ErrorMessageHelper 文案表 自建(展示TipsTextView
业务 invoke Handler 框架有机制,业务 Handler 需自写

易踩坑(必读)

  1. 没有 PanelHelper:标准写法是 scene.YIUIRoot().OpenPanelAsync<T>(),与 yiuistatesync 登录/大厅一致,不要自建 Helper
  2. CDETable 正式名是 UIBindCDETableC+D+E = Component + Data + Event
  3. 红点只能在叶子节点 SetCount,给有子节点的 Key 直接 Set 会报错
  4. cn.etetet.yiui 几乎是空包ROK 业务 Panel 应建在 cn.etetet.hero/bag/gacha 内部,不期待现成业务 UI
  5. 客户端数据 → UI 优先走 UIDataBind,不要默认走 ET EventSystemUIData 是"局部数据驱动"EventSystem 是"跨面板业务广播",两者职责不同

配置ExcelExporter 不够用,引入 Luban

cn.etetet.excel 能力:

  • 支持类型:基本类型 + int[] / string[] / int[][]
  • 不支持:外键校验、嵌套 struct、复杂引用类型(未知类型 throw 不支持
  • 输出C# Category + JSON + BSON bytes

对 ROK Hero/Bag 缺口

  • List<RewardEntry> 通用奖励结构 → ExcelExporter 无法表达 bean 数组
  • List<AttrEntry> 装备属性配对 → 难表达
  • 卡池权重表多列关联 → 无外键校验
  • 天赋树前置依赖 → 无引用校验

结论新业务表用 Luban(不写自定义模板,原生 API + Scene Component 包装)。老配置StartConfig 等)保持 ExcelExporter


ROK Hero/Bag 移植技术选型(基于本清单)

✅ 直接复用
  - 核心运行时core/loader/sourcegenerator/memorypack
  - 协议工具链proto + Proto2CS
  - UI 全套yiuiframework + 各 yiui 子包)
  - GM 双轨yiuigm + console
  - 资源热更yooassets + hybridclr
  - 登录链路login扩展 Player 字段)

🔧 扩展使用
  - Log → Audit 扩展(新建 cn.etetet.logging 或 cn.etetet.audit
  - login Player → 挂 HeroComponent / BagComponent / GachaComponent
  - excel → 只维护 StartConfig 等 ET 基础设施表

📦 新增业务包
  - cn.etetet.db          # DBComponent 业务封装(基于 MongoHelper + MongoDB.Driver
  - cn.etetet.hero        # 英雄系统
  - cn.etetet.bag         # 背包/装备系统
  - cn.etetet.gacha       # 抽卡系统
  - cn.etetet.config      # Luban Tables + ConfigComponent

❌ 不复用(与本次无关)
  - unit / move / ai / aoi / recast / numericOctoberStudio 走自己的局内战斗)
  - statesync / yiuistatesyncMMO Demo仅参考代码风格
  - ui旧 UI已被 YIUI 替代)
  - demoresDemo 美术资源)

设计原则(基于这份清单的检查清单)

每次新功能落地前的 3 问:

  1. 现有 ET 包是否有? → 查上表
  2. 如果有但能力不全,是扩展还是重写?优先扩展,禁止重写已有内核
  3. 如果没有,应该建独立业务包还是塞进现有包? → 业务功能建新包 cn.etetet.xxx禁止塞进 core / login 等基础包

每次重大决策都需要在 design.md 的 D 决策表中明确"复用了哪些已有包 + 扩展点 + 新增点"。


修订记录

日期 版本 说明
2026-05-27 v1.0 初版38 包全量调研