外观
菜单注入
框架会在 Studio 顶部工具栏的 Help 右侧自动注入一个原生的 Mods 下拉菜单。它不是另画的一套 UI,而是克隆原生菜单节点做出来的,所以外观、交互、层级与 Studio 自带菜单完全一致。
内置菜单项
| 菜单项 | 快捷键 | 动作 |
|---|---|---|
| 🧩 Mod 管理器 | F10 | 打开运行时控制台 |
| 📂 打开 Mods 文件夹 | — | 在资源管理器中打开 Mods 目录 |
插件通过 StudioAPI.RegisterMenuItem(...) 注册的项会追加到同一个下拉菜单里。
注入过程
- 定位锚点:在
MenubarForWindow下找到Help菜单节点(按Menubar_Help组件或名称匹配)。 - 克隆节点:复制
Help的 GameObject,命名为Menubar_Mods。 - 剥离原功能:移除克隆体上的
Menubar_Help组件,并清空指向 Help 弹窗的Child引用——否则新菜单会弹出 Help 的内容。 - 定位:计算位置,插到
Help的右侧。 - 改写文本:把显示标签(
valueLabel及各层UILabel)统一改成Mods。 - 重建弹窗:克隆 Help 的 popup 预制体(
Mods_PopUpList_Prefab),替换为 Mods 自己的菜单项;同时挂上onPopup回调,保证实例化时弹出的就是定制内容。
整个过程是幂等的:检测到 Menubar_Mods 已存在就直接返回,不会重复注入。失败时记录 Failed to inject Mods menu bar 并附带异常。
样式兼容
菜单项沿用 Studio 原生预制体的双标签排版:
Text—— 主标题ShortCutText—— 右侧快捷键,自动右对齐
另外还有几项自动处理:
- 快捷键提取:菜单名写成
"功能名 (F10)"时,框架自动把"F10"解析出来放到右侧快捷键位。 - 动态宽度:按最长文本 + 快捷键计算宽度(最小 200px),同步更新背景与边框尺寸,避免文字截断。
- 点击防抖:内置 0.35 秒防抖,防止误触双击重复执行耗时逻辑。
给插件作者的提醒
RegisterMenuItem 负责注册原生菜单入口,点击后可以打开 NGUI 或 WebView2 窗口,两种方案都属于正式 Mod 窗口。选型、线程和清理要求见 Mod 窗口开发规范。