一键导入
gui-draft
Atom Game GUI pipeline 第 2 阶段。生成 MVVM 代码(Panel.lua + View.cs + 如需的 ViewModel)。 自包含的 MVVM 指引。在 gui-plan 产出 GUI_PLAN.md 后使用。控制代码 实现漂移(相对需求契约)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Atom Game GUI pipeline 第 2 阶段。生成 MVVM 代码(Panel.lua + View.cs + 如需的 ViewModel)。 自包含的 MVVM 指引。在 gui-plan 产出 GUI_PLAN.md 后使用。控制代码 实现漂移(相对需求契约)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Atom Game GUI 开发 pipeline 的第 1 阶段(入口)。当用户要「开发/新增/修改一个 GUI 界面、 panel、面板」或说「跑 gui pipeline / 做 GUI 需求」时使用。先确认用户已提供本次 run 的 panelId 和需求描述,缺少任一项时先向用户询问;随后进入 Claude Code 原生 plan mode: 只读探索资源 + 用已注入的知识库坑点 + 向用户提问澄清需求,写计划并 ExitPlanMode 等人类审批; 审批通过后把计划高度精炼成需求契约 GUI_PLAN.md 落盘,并初始化 pipeline 运行状态。 随后(由 /dev-gui-plugin:run 编排)顺序触发 gui-draft → gui-prefab → gui-config → gui-review → gui-improve → gui-learn。
Atom Game GUI pipeline 第 3 阶段。把 View.cs 挂到 Prefab 并绑定 [SerializeField] 引用。 自包含的 Prefab 编辑指引,不依赖外部 edit-prefab skill。在 gui-draft 生成 View.cs 后使用。 控制 Prefab 绑定漂移。
Atom Game GUI pipeline 第 5 阶段(唯一验证门)。并行两车道:Type-B 独立 gui-reviewer subagent (Bias Guard,品味判断)+ Type-A orchestrator 机械门(编译/LSP/prefab/生成文件/配置)。汇合成 合并 CRITICAL 集合,产出 GUI_REVIEW.md + 6 态裁决 GUI_VERDICT.json + HUMAN_REVIEW.md。也可单独 用于审查已有 GUI 代码。控制逻辑质量漂移 + 确定性验证。
Atom Game GUI pipeline 第 7 阶段(每次修 bug / 做需求完成后自动跑),不面向用户手动调用。 从本次开发提取经验回写**私有知识库** ${CLAUDE_PLUGIN_DATA}/gui-knowledge/:建实例层 bug/fix、 泛化出通用层 component/pattern/lesson、写 edges、独立 reviewer 晋升 proposed→confirmed、 重建 query_pack;promote/demote 时对公共库语义去重(公共库为准)。 两遍式:默认捕获遍;`enrich` 参数触发充实遍填 _TODO_ 段。 用户手动沉淀私有库请用 `/dev-gui-plugin:gui-learn-private` command; 沉淀进**项目公共库**用 `/dev-gui-plugin:gui-learn-public` command。
Atom Game GUI pipeline 第 4 阶段(按需,可跳过)。编辑 design/tables 下的 Excel 配置源表, 并镜像改动到对应 *_data.lua(模拟导表,零人工中断)。自包含的配置表编辑指引,不依赖外部 edit-excel skill。仅当功能涉及配置数据时使用。控制配置数据漂移。
Atom Game GUI pipeline 第 6 阶段。对 gui-review 合并 CRITICAL 集合(Type-A 编译/语法失败 + Type-B CRITICAL)迭代修复(最多 2 轮):修复 → 重跑 gui-review 两车道(Bias Guard)→ 记录 GUI_IMPROVEMENT_LOG.md。仅当 gui-review 报出合并 CRITICAL 时使用。2 轮后仍有 CRITICAL 则记入 HUMAN_REVIEW.md,不暂停。
| name | gui-draft |
| user-invocable | false |
| description | Atom Game GUI pipeline 第 2 阶段。生成 MVVM 代码(Panel.lua + View.cs + 如需的 ViewModel)。 自包含的 MVVM 指引。在 gui-plan 产出 GUI_PLAN.md 后使用。控制代码 实现漂移(相对需求契约)。 |
职责:自包含的 MVVM 代码生成。控制:代码实现漂移。
输入:GUI_PLAN.md + 两库 query_pack(私有 ${CLAUDE_PLUGIN_DATA}/gui-knowledge/query_pack.md
${CLAUDE_PROJECT_DIR}/.claude/dev-gui-knowledge/query_pack.md,后者存在则读;矛盾以公共库为准)。动手前先读
${CLAUDE_PLUGIN_ROOT}/shared-references/mvvm-contract.md。
GUI_PLAN.md 的「ViewModel 设计」节)——本阶段照抄写 ViewModelDes,不自行设计属性。*_viewmodel.lua / *ViewModel.cs / AtomViewModelFactory.cs / ui_viewmodel_define.lua:
能用工具导出就不手改;仅当工具导出失败/不可用时才允许手改补齐(加 TODO(模拟导出) + 记 HUMAN_REVIEW.md,见 mvvm-contract §3)。<PanelName>Panel.lua 继承 UIBasePanel;View:<PanelName>View.cs 继承 BaseView。AtomUIText/AtomUIImage/AtomUIButton)。仍先读目标目录同类现有 panel 对齐命名/惯例。生命周期钩子与 API 见 mvvm-contract §4-§7。
-- Panel(Model 层)
local enum = require("framework.utils.enum")
local uiBasePanel = jn_require_ex("framework.ui.ui_base_panel")
local PanelNamePanel = DefineClass("PanelNamePanel", uiBasePanel.UIBasePanel)
UIMessageId = enum "UIMessageId" { "OnConfirmClick" } -- 与 C# enum 同步(从 1)
local panelMessageHandler = { [UIMessageId.OnConfirmClick] = "onConfirmClick" }
function PanelNamePanel:getPanelMessageHandler() return panelMessageHandler end
function PanelNamePanel:prepareViewModel(panelData)
self.rootViewModel.SomeProperty = panelData.someValue -- 只写 ViewModel
end
function PanelNamePanel:onPanelClose()
-- 取消 timer / 移除监听 / dispose 创建的 Lib(清理是你的责任)
end
function PanelNamePanel:onConfirmClick() end
// View(表现层)
public class PanelNameView : BaseView
{
private enum UIMessageId { OnConfirmClick = 1 } // 与 Lua enum 完全一致
[SerializeField] private AtomUIButton m_BtnConfirm;
[SerializeField] private AtomUIText m_TxtTitle;
private PanelNameViewModel m_VM;
public override void Initialize(BaseViewModel viewModel)
{
if (viewModel is not PanelNameViewModel vm) return;
m_VM = vm;
InitializeView();
InitializeEvents();
}
private void InitializeView()
{
m_TxtTitle.SetText(m_VM.SomeProperty.ToString());
}
private void InitializeEvents()
{
m_VM.RegisterPropertyChangeHandler<string>(PanelNameViewModel.SOMEPROPERTY, OnSomeChange);
m_BtnConfirm.OnClick = OnBtnConfirmClick; // 非 onClick.AddListener
}
private void OnSomeChange(string v) { m_TxtTitle.SetText(v); }
private void OnBtnConfirmClick() { SendUIMessage((int)UIMessageId.OnConfirmClick); }
// 普通 View 无需 override Destroy() 退订——框架自动清理 PropertyChangeHandler
}
mvvm-contract.md §1.1,子 View 实现细节见 patterns/subview-pattern.md。shared-references/patterns/(决策树见 patterns/README.md)。ViewModelDes/*.cs(不自行设计属性)。*ViewModel.cs / *_viewmodel.lua / Factory / define),
不依赖 Unity Editor 运行状态、不要求前置编译;csharp-tool 不可用 / 导出失败才手改补齐(见 mvvm-contract §3 硬规则)。Panel.lua + View.cs(引用新常量 / 设 self.rootViewModel.*)。BLOCKED 记入清单。python3 "${CLAUDE_PLUGIN_ROOT}/tools/gui_run_state.py" set "${CLAUDE_PROJECT_DIR}" <panelId> gui-draft done
GUI_PLAN.md 的 ViewModel 设计一致(照抄,无自创属性)。BLOCKED 入 HUMAN_REVIEW.md。TODO(模拟导出) 标记并记入 HUMAN_REVIEW.md。→ 进入 gui-prefab。