Add prototype gameplay loop with character/battlefield assets and server game APIs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
udx
2026-10-20 18:50:00 +08:00
co-authored by Cursor
parent 79369e4473
commit 6c64210331
833 changed files with 998079 additions and 1042 deletions
@@ -0,0 +1,374 @@
> 历史归档:2026-10-14 保存原科幻肉鸽方案。当前设计以 [GameDesign.md](../../../GameDesign.md) 为准。
# AIGame 游戏设计文档
> 品类:**3D 竖屏肉鸽塔防**(微信小游戏)
> 玩法参考:《永远的蔚蓝星球》—— 局内召唤 / 合成升星 / 随机构筑;局外科技 / 单位 / 装备养成
> 世界观:科幻未来 · 异星入侵 · 人类防线
> 工程约束:见 [`ProjectDesign.md`](../../../ProjectDesign.md)(竖屏 URP / YooAsset / HybridCLR)
---
## 1. 一句话定位
玩家作为前线指挥官,在异星虫潮进攻路线上部署 3D 战斗单位,通过**召唤 → 合成升星 → 随机技能/装备构筑**守住核心反应堆;局外用资源推进**科技树、兵种解锁升级、装备强化**,解锁更强单位与防线模块。
---
## 2. 核心体验目标
| 目标 | 说明 |
| --- | --- |
| 爽感 | 3D 弹幕与技能特效可见、可感;升星与关键技能带来清晰质变 |
| 策略 | 每局随机池强制换思路;路线、职业羁绊、机关搭配决定通关 |
| 成长 | 局外科技 / 兵种 / 装备持续变强,推图与刷资源形成闭环 |
| 碎片化 | 单局约 **2.5~4 分钟**,适配微信竖屏短时游玩 |
| 轻量 3D | 透视相机 + 低模单位;单体面数与同屏数量受小游戏性能约束 |
**非目标(首期不做)**:重度沙盒建造、自由造塔网格、大型开放地图、复杂操作 RTS、跨服竞技匹配。
---
## 3. 世界观与剧情框架
### 3.1 背景
公元 22XX,人类殖民带「蔚蓝环」遭遇名为 **裂隙虫族(Rift Swarm)** 的异维生物入侵。虫族沿「裂隙通道」涌入殖民星球,目标是吞噬行星核心能量。
玩家所属 **联合防线司令部(UDF)**,驻守边境前哨 **「锚点-07」**。每场战斗即一次「锚点防卫战」:守住 **核心反应堆**,拖延虫潮直至裂隙暂时闭合。
### 3.2 叙事节奏(主线章节)
| 章节 | 主题 | 敌人侧重 | 解锁导向 |
| --- | --- | --- | --- |
| Ch1 坠落信号 | 教学:召唤、合成、守核 | 基础虫兵 | 步兵系、基础城墙机关 |
| Ch2 锈蚀矿带 | 资源线、多路压力 | 装甲虫、分裂虫 | 工程/资源科技 |
| Ch3 离子风暴 | 飞行单位、范围控场 | 飞行群、电磁干扰 | 防空单位、电网类机关 |
| Ch4 裂隙前哨 | 精英波、Boss 压迫 | 精英 + 早期 Boss | 输出职业质变技能 |
| Ch5 深蓝母巢 | 高密度弹幕构筑检验 | 混合潮 + 终局 Boss | 高阶科技、粉/红品质装备 |
章节间穿插短剧情(立绘 + 旁白即可),不阻塞战斗循环。
### 3.3 阵营对立
| 阵营 | 定位 | 视觉关键词 |
| --- | --- | --- |
| UDF(玩家) | 科技军事、模块化装甲、能量武器 | 冷蓝、金属、全息蓝光 |
| 裂隙虫族 | 有机甲壳、异维能量、集群 | 紫黑、生物发光、裂隙裂缝 |
---
## 4. 玩法总览(双层循环)
```text
┌─ 局内(Run / 肉鸽塔防)──────────────────────────────┐
│ 召唤单位 → 摆位 → 合成升星 → 选技能/装备/羁绊 │
│ → 守核清波 → 结算奖励(资源 / 碎片 / 图腾点) │
└────────────────────────────┬─────────────────────────┘
│ 产出
▼
┌─ 局外(Meta / 养成)─────────────────────────────────┐
│ 科技研究 · 战斗单位解锁/升级 · 装备强化 · 城墙机关 │
│ · 图腾/全局加成 · 关卡推进 · 日常/周常资源获取 │
└────────────────────────────┬─────────────────────────┘
│ 增强下一局起始战力与卡池
└──────────────────────────┘
```
---
## 5. 局内战斗设计(3D 塔防核心)
### 5.1 战场结构(竖屏 3D)
```text
┌──────── 顶部 UI(波次 / 金币 / 技能栏)────────┐
│ │
│ [虫潮出生点 / 裂隙门] │
│ ↓ 多条进攻路线(地面 + 空中) │
│ ········· 可部署格 / 站位槽 ········· │
│ ↓ │
│ [城墙防线 + 可装配机关] │
│ ↓ │
│ [核心反应堆 HP] │
│ │
└──────── 底部 UI(召唤 / 合成提示 / 加速)──────┘
```
- **相机**:固定俯斜透视(约 45°~55°),竖屏构图;可轻微震动反馈,不可自由运镜(首期)。
- **部署**:离散 **站位槽**(参考蔚蓝星球式槽位),不做完全自由网格,降低操作与寻路成本。
- **路径**:敌人沿预置样条路径前进;部分关卡 2~3 路分岔;飞行单位走空中层路径。
- **失败条件**:核心 HP ≤ 0。
- **胜利条件**:撑过规定波次并击杀终波 Boss / 裂隙闭合。
### 5.2 单局流程(约 3 分钟)
| 时段 | 时间感 | 玩家行为 |
| --- | --- | --- |
| 开局 | 0~15s | 免费/低价首抽,摆下 1~2 个单位;熟悉本关路线 |
| 发育期 | 15~90s | 持续召唤、合成升星、选三选一技能/装备;形成主 C |
| Boss 压迫 | 90~150s | 精英/Boss 进场;检验构筑与城墙机关 |
| 收束 | 150~180s+ | 清残波 / 斩杀 Boss;结算 |
节奏刻意让玩家在「尚未完全成型」时遭遇压力(参考蔚蓝星球:发育期遇 Boss),逼出技能选择与合成优先级决策。
### 5.3 召唤与合成升星
- **召唤**:消耗局内货币(**能量晶币**),从当前**解锁兵种池**中随机抽出单位,放入空槽或指定槽。
- **合成规则**:同 ID、同星级的 **2 个合成 1 个高一星**(1★+1★→2★,最高 **3★**)。
- **升星收益**:基础属性大幅提升 + 解锁/强化专属技能;3★ 为局内质变点。
- **摆位**:拖拽调整站位;近战靠前、远程靠后、辅助居中;部分羁绊要求特定站位形状。
### 5.4 随机构筑三件套(每局)
每局开局或关键波次触发,形成差异化 Run:
| 随机层 | 内容 | 作用 |
| --- | --- | --- |
| 技能池 | 弹幕分裂、穿透、连锁闪电、攻速爆发、护盾脉冲等 | 决定输出形态(量变弹幕 vs 质变技能) |
| 装备词条 | 暴击、溅射、对精英伤害、击退、吸能回币等 | 补短板或放大主 C |
| 职业羁绊 | 同时场上 N 个同职业触发加成 | 引导合成方向与海抽策略 |
玩家在「随机给出的选项」中做取舍,而不是每局固定最优解。
### 5.5 单位职业(首期 6~7 职)
| 职业 | 职责 | 量变倾向 | 质变倾向 |
| --- | --- | --- | --- |
| 突击步兵 | 近战挡线、稳定输出 | 多数量围殴 | 单体处决技 |
| 动能射手 | 远程单体 / 弹道 | 弹幕密度 | 穿透 / 弱点狙击 |
| 等离子法师 | 范围法术 | 多段 AoE | 大招清屏 |
| 电磁控制 | 减速、眩晕、聚怪 | 控场链 | 全域干扰 |
| 工程支援 | 回能、加攻、修墙 | 光环叠层 | 全队爆发窗口 |
| 防空无人机 | 对空特化 | 对空网 | 导弹齐射 |
| (可选)重装卫士 | 承伤、嘲讽 | 肉墙 | 城墙联动护盾 |
每个输出职建议拆 **量变构筑** 与 **质变构筑** 两条成长线,避免只有一条毕业套路。
### 5.6 城墙与机关(防线模块)
核心前方有 **城墙 HP**;可装配 **机关模块**(局外解锁与升级,局内带入有限槽位):
| 机关示例 | 功能 | 设计意图 |
| --- | --- | --- |
| 光棱塔 | 高额对地激光 | 主力输出机关 |
| 电网 | 挂持续负面 / 增伤 | 后期乘法增伤核心 |
| 地震波 | 范围击晕 / 打断 | 保命控制 |
| 磁力阱 | 聚怪 | 方便 AoE |
| 离子护盾 | 短时无敌 / 减伤 | 翻盘手段 |
| 防空炮台 | 对空补充 | 飞虫关卡刚需 |
机关升级有明显 **性价比拐点**(如 5/10 级解锁关键效果),引导资源分配而非无无限堆级。
### 5.7 敌人类型
| 类型 | 行为 | 对策提示 |
| --- | --- | --- |
| 虫兵 | 直线冲核 | 基础火力 |
| 甲壳虫 | 高防低速 | 破甲 / 持续伤害 |
| 分裂虫 | 死亡分裂 | 溅射 / 范围 |
| 飞膜虫 | 空中路径 | 防空单位 / 防空炮 |
| 干扰虫 | 沉默或降低攻速 | 优先击杀 |
| 精英 | 高血 + 特殊技能 | 爆发窗口 / 控制 |
| Boss | 阶段机制(召唤、冲锋、护盾) | 完整构筑检验 |
### 5.8 操作与 UI(竖屏)
- 主要操作:点击召唤、拖拽合成/换位、点击三选一、点击释放主动技(若有)。
- 支持 **1.5x / 2x** 加速;失败可看战报(输出占比、承伤、合成次数)。
- UI 走项目 JSON→Prefab 管线;设计分辨率 `[1080, 1920]`。
---
## 6. 局外养成系统
### 6.1 科技研究树
独立 **科技面板**,消耗研究资源解锁节点,影响全局或某职业:
| 科技分支 | 示例节点 | 效果类型 |
| --- | --- | --- |
| 能源基建 | 开局晶币 +N、召唤折扣 | 发育加速 |
| 武器协议 | 全队攻击%、暴击 | 数值底盘 |
| 城防工程 | 城墙 HP、机关伤害/冷却 | 续航与保命 |
| 战术编成 | 某职业槽位上限、羁绊门槛 -1 | 构筑自由度 |
| 裂隙对抗 | 对精英/Boss 伤害、抗控制 | 推图关键节点 |
| 后勤回收 | 结算奖励%、日常次数 | 资源循环 |
研究有前置依赖;中后期开放「协防能力 / 续航」向节点(对齐参考作科技树定位:强化防线与持久,而非替代兵种成长)。
### 6.2 战斗单位研究与升级
- **解锁**:主线进度 + 科技前置 + 消耗兵种芯片 → 加入召唤池。
- **升级**:消耗重复碎片 / 通用零件提升等级(基础 ATK/HP/技能系数)。
- **星级突破(局外)**:与局内临时升星区分;局外突破提高该单位**进入局内的初始品质上限或基础星级权重**。
- **研发分支**:同一单位可点「弹幕强化」或「大招强化」,服务量变/质变流派。
### 6.3 装备系统
| 层级 | 说明 |
| --- | --- |
| 装备获取 | 关卡掉落、制造、活动、商店 |
| 品质 | 白 / 绿 / 蓝 / 紫 / 粉 / 红 |
| 强化 | 消耗矿锭提升基础属性 |
| 精炼/词条 | 锁定或重铸副属性(后期) |
| 穿戴 | 英雄个人装 + 可带入局内的「指挥官套件」(影响随机装备池权重) |
装备升级与科技、兵种形成三条平行成长线,避免单点付费墙感知过强(数值可后续调)。
### 6.4 图腾 / 全局加成(轻量)
类似参考作的图腾位:少量可装备的全局被动(开局护盾、首次召唤必出某职业、Boss 战回能等)。用于 Build 个性化和中后期深度,不作为新手必懂系统。
---
## 7. 资源与获取
### 7.1 资源一览
| 资源 | 用途 | 主要获取 |
| --- | --- | --- |
| 能量晶币 | **仅局内**召唤/刷新 | 杀敌、波次奖励、支援科技 |
| 信用点 | 通用软货币:强化、部分研究 | 关卡结算、日常、广告/分享(若接) |
| 异星矿锭 | 装备强化、制造 | 推图、挂机矿场、周常 |
| 研究数据 | 科技树 | 主线、研究副本、分解多余碎片 |
| 兵种芯片/碎片 | 解锁与升级单位 | 关卡首通、招募、分解 |
| 机关零件 | 城墙机关升级 | 特定关卡、活动 |
| 高级通货(可选) | 商城 / 便利养成 | 付费或高难首通(商业化另案) |
### 7.2 资源循环原则
1. **局内货币与局外货币严格分离**,防止刷局通胀冲击养成。
2. 每日:主线体力(或无体力无限但收益递减)+ 一次「矿带扫荡」+ 研究数据本。
3. 卡关时提供明确缺口提示(缺防空 / 缺破甲 / 科技节点未点),引导养成而非纯肝。
4. 首期可做 **离线挂机矿场**(短时累计矿锭),增强回流。
---
## 8. 模式规划
| 模式 | 优先级 | 说明 |
| --- | --- | --- |
| 主线战役 | P0 | 章节推图 + 剧情 + 解锁 |
| 无尽裂隙 | P1 | 波次越高奖励越好,检验构筑 |
| 日常资源本 | P1 | 定向产出矿锭 / 数据 / 碎片 |
| 双人协防 | P2 | 参考作合作向;共享战场分工(输出/控场) |
| 周常 Boss | P2 | 机制关,掉落粉红装备材料 |
| 竞技/排行 | P3 | 非首期 |
---
## 9. 3D 表现与性能预算(小游戏)
| 项 | 约束建议 |
| --- | --- |
| 单位模型 | 流水线:图 → 混元 GLB → 减面烘焙;角色目标约 **3k~8k 三角** |
| 同屏单位 | 软上限建议 ≤ 40(含敌我);超出用简化表现或合并弹幕 |
| 特效 | 关键技能用预制拖尾/粒子;低端机降级为闪白 + 简环 |
| 光照 | URP 1 主光 + 少量烘培/假光照;忌多实时阴影 |
| 地图 | 模块化地表 + 少量破损科幻道具;一关一预制场景 |
资源生产与登记遵循 `ResourceCreate.md` / `Doc/ResDesc_*.md`。
---
## 10. 系统界面地图(与 UI 管线)
| 界面 | 功能 | 备注 |
| --- | --- | --- |
| 登录 / 热更 | 壳层已有 | 见 ProjectDesign |
| 主基地大厅 | 入口枢纽:出征、科技、兵营、兵装、城防、商店 | 竖屏单页+侧栏或底部 Tab |
| 关卡选择 | 章节地图节点 | 显示推荐战力/缺失提示 |
| 战斗 HUD | 波次、核芯、货币、技能、加速 | 战斗中 |
| 三选一弹窗 | 技能/装备/事件 | 暂停或慢动作 |
| 结算 | 胜负、奖励、输出统计 | |
| 科技树 | 节点研究 | |
| 兵营 | 单位图鉴、升级、解锁 | |
| 兵装工坊 | 装备强化、穿戴 | |
| 城防车间 | 机关装配与升级 | |
| 设置 | 音画、账号 | |
业务 Prefab 必须走 `Doc/UI_AutoGen_Overview.md`,禁止运行时临时代码拼业务 UI。
---
## 11. 数值与难度哲学(设计原则)
1. **合成与技能选择的决策密度 > 纯数值碾压**;但中后期允许「全队攻击阈值」形成通关阈值(参考作商业化与难度结构)。
2. Boss 出现在发育中段,迫使玩家在发育与保命间平衡。
3. 银币/晶币曲线:中期若只海抽不合成会乏力,引导「主 C 升星」。
4. 机关与单位伤害尽量用可配置表(便于热更调参)。
5. 首期关卡表控制在可手调范围,再上自动化难度曲线。
---
## 12. 商业化预留(不绑定首期必做)
- 战斗通行证(赛季):信用点 + 碎片 + 外观。
- 兵种/皮肤外观(不影响或微影响手感特效)。
- 月卡:日常次数、挂机上限、小额信用点。
- 避免:无蓝抽永久战力断层;付费项优先「速度」与「外观」而非唯一强度。
具体付费档位另立商业文档,本文只留系统钩子。
---
## 13. 音效与音乐方向
| 类型 | 方向 |
| --- | --- |
| BGM | 科幻紧张电子 + 少量管弦;章节主题可替换 |
| 战斗 SFX | 能量枪、合成成功提示音、核芯告警、Boss 吼叫 |
| UI SFX | 轻点击、研究完成、升级成功 |
制作节点可参考 `Doc/TempDesign.md` 中的音频工具方向;完成后登记 `Doc/ResDesc_Sound.md`。
---
## 14. 里程碑(玩法侧,对齐工程 M 阶段)
| 阶段 | 玩法交付 |
| --- | --- |
| G0 | 单关 3D 战场:路径怪 + 核芯 + 2 种单位召唤/合成 + 胜负 |
| G1 | 三选一技能、城墙 HP、1~2 个机关、加速与结算奖励 |
| G2 | 主线 5 关、兵营升级、科技树第一分支、资源本雏形 |
| G3 | 装备强化、完整职业池、无尽模式、关卡推荐缺失提示 |
| G4 | 剧情演出、挂机矿场、双人协防原型、商业化钩子 |
| G5 | 性能档、数值打磨、提审内容冻结 |
工程侧 M0~M5 见 `ProjectDesign.md`;玩法 G 与工程 M 可并行,依赖热更与资源流水线就绪。
---
## 15. 命名与暂定 IP
| 项 | 暂定 |
| --- | --- |
| 工作标题 | **裂隙防线** / **锚点防卫战**(可改) |
| 玩家组织 | UDF 联合防线司令部 |
| 敌人 | 裂隙虫族 |
| 局内货币 | 能量晶币 |
| 核心物件 | 核心反应堆 |
正式商品名、包名与提审名后续统一。
---
## 16. 决策摘要
- **品类**:3D 竖屏肉鸽塔防,核心循环对齐《永远的蔚蓝星球》(召唤、合成升星、随机构筑、城墙机关),表现升级为 3D。
- **世界观**:科幻未来、异星(裂隙虫族)入侵、人类科技防线。
- **局外**:科技研究、战斗单位解锁升级、装备强化、资源获取闭环。
- **平台**:微信竖屏小游戏;单局短、操作轻、表驱动可热更。
- **首期边界**:主线 + 基础养成 + 单人战斗;合作与重度商业化后置。
---
## 17. 相关文档
| 文档 | 关系 |
| --- | --- |
| [`ProjectDesign.md`](../../../ProjectDesign.md) | 技术架构与热更 |
| [`ResourceCreate.md`](../../../ResourceCreate.md) | 3D/图/音频生产 |
| [`Doc/UI_AutoGen_Overview.md`](../../../Doc/UI_AutoGen_Overview.md) | UI 生成管线 |
| [`Doc/ResDesc.md`](../../../Doc/ResDesc.md) | 资源登记索引 |
@@ -0,0 +1,85 @@
# 角色与单位美术制作 / 验收流程
本流程把「设计图 → 混元 → 减面烘焙 → 入库 Prefab → 验收场景」固定成可重复步骤。验收只在编辑器专用场景里做,不进开战运行时。
配套清单:`character_unit_review_manifest.json`
Pipeline:`AIClient/AgentScripts/BuildCharacterReview.cs`、`SetupCharacter.cs`
## 目录约定
| 用途 | 路径 |
| --- | --- |
| 设计原稿 | `Doc/Design/Character/{英文名称}/`(不进 Bundles) |
| 高模 / 烘焙中间件 | `Tools/output/{name}_3d/`、`Tools/output/{name}_game/` |
| 游戏资源 | `AIClient/Assets/Bundles/Characters/{Kind}/{英文名称}/` |
| 验收场景 | `Assets/Bundles/Scenes/Review/CharacterUnitReview.unity` |
| 验收报告 | `Tools/output/character_review/CharacterUnitReview/review_report.json` |
`Kind` 建议:
- `Human`:人形(T Pose,目标身高约 1.8m)
- `Animal`:非人生物 / 宠物正式模型(站姿或四足,目标身高按物种登记)
- 后续武器/道具走 `GameResProductProc` 独立物件节,可先在本验收场景并排放下对比尺度
网格约定与附录 B 一致:Y-up、原点在底面中点、局部 **-Z 为正面**。
## 制作步骤(单件)
1. **设计图**:纯白底、全身入画。人物用 T Pose、比例 `2:3`;非人用可辨识站姿,比例按体型选 `2:3` 或 `1:1`。
2. **混元图生 3D**:`Tools/hunyuan_3d_generate.py --faces 50k`。
3. **减面烘焙**:`Tools/model_tools/model_lowpoly_bake.py --tris <目标> --size 1024`。人物约 3000;非人/宠物默认 800~2000,在 manifest 的 `maxTriangles` 写死验收上限。
4. **入库**:`python Tools/install_character_bundles.py -a {Name} --kind {Kind} -b Tools/output/..._xpbr`
5. **Prefab**:
`unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/SetupCharacter.cs --entry SetupCharacter.Run --args '["Animal","LmCat",0.42]'`
6. **登记**到 `Doc/ResDesc_Model.md` / `Doc/ResDesc_Picture.md`。
7. **验收**:把该件追加进 `character_unit_review_manifest.json` 的 `subjects`,再执行下方 Pipeline。
## 验收场景(专用)
场景里固定包含:
- 地面与刻度(身高参考柱 0.5 / 1.0 / 1.8m)
- 每个 subject 脚下的 **-Z 正面箭头**
- 方向光 + 验收相机
- 按 `spacing` 横向排列的 Prefab 实例
### Pipeline 入口
```powershell
# 校验 manifest 与 Prefab 是否齐全
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildCharacterReview.cs --entry BuildCharacterReview.ValidateOnly
# 生成 / 覆盖验收场景,并写报告
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildCharacterReview.cs --entry BuildCharacterReview.Build
# 打开场景并框住全体
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildCharacterReview.cs --entry BuildCharacterReview.OpenReview
# 自动量身高、面数、XPbr、底面贴地
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildCharacterReview.cs --entry BuildCharacterReview.ValidateReview
# 截 Scene View 留档
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildCharacterReview.cs --entry BuildCharacterReview.CaptureReview
```
### 验收门槛
- Prefab 可加载,材质为 `Test/XPbr`(manifest 可对旧件关闭 `requireXpbr`)
- 包围盒底面 `min.y` 接近 0(±0.05)
- 身高在 `expectedHeight ± heightTolerance`
- 三角面数 ≤ `maxTriangles`
- 人工目视:局部 -Z 朝向相机前的箭头、无悬浮、无穿模、贴图无品红缺贴图
通过后,才允许把该 Prefab 接到开战/营地替换简模。
非人绑骨/三动作见 `GameResProductProc` 二.3.B:先验收静态模,再 `--mesh` 已验收 FBX 跑 TokenRig+UniMate → `install_animal_rigged` → `SetupAnimalAnimator`(挂回 XPbr)。`{Name}_Rigged` 并排验收(`requireAnimator` + `requireXpbr`),勿覆盖静态 Prefab。
带 `Motion` 参数的单位会挂 `CharacterReviewAnimCycle`,在 Scene 视图自动轮播 Idle→Walk→Attack(约 2.8s/段,名称旁显示当前动作)。
诊断新骨架时可先设 `requiredClips: ["Walk"]` 验证单动作;正式敌方必须恢复三动作检查。RockBall现已在同一12骨上补齐Idle/Walk/Attack,正式流程见 [EnemyCharacterProduction.md](EnemyCharacterProduction.md)。单Walk历史见 [RockBall/WalkRiggingFix.md](RockBall/WalkRiggingFix.md)。
## 与开战的关系
敌方角色制作采用 [EnemyCharacterProduction.md](EnemyCharacterProduction.md):同角色骨架、空间对齐、三动作来源哈希、离线收尾、Enemy视觉Prefab与整段验收。岩团团已从单Walk阶段升级到Idle/Walk/Attack;总验收按三动作检查。
本场景**不**被 `PrototypeFlow` 加载。开战仍用 `PrototypeArena` 简模,直到某宠物正式模型验收通过并单独做替换任务。
@@ -0,0 +1,118 @@
# 敌方角色标准制作方案 v1
2026-10-20。标准入口:`Tools/enemy_character_pipeline.py`;角色配置:`Config/Art/EnemyCharacters/{Name}.json`。岩团团为已落地的短腿双足样例。
## 交付与约定
每个敌人交付已验收静态模、同源骨架和蒙皮、Idle/Walk/Attack、Animator、Enemy视觉Prefab、验收场景、来源清单和验证报告。流程到可调用的视觉资产为止,战斗数值、寻路和伤害结算由玩法接入。
统一约定:Unity Y-up、米制、底面中心原点、局部-Z正面。外层逻辑根旋转identity、缩放1,关闭Root Motion;移动和转向由玩法驱动。网格、骨架和动画必须共用绑定空间,不能靠运行时反向旋转补救。
| 动作 | 标准行为 | 岩团团参数 |
| --- | --- | --- |
| Idle | 原地循环、轻呼吸、首尾连续 | 1.6秒 |
| Walk | 原地循环、交替迈步 | 1.1秒;步幅0.06m、抬脚0.018m |
| Attack | 蓄力→命中→恢复;只播放一次 | 1.0秒;0.25蓄力结束、0.45命中、0.90恢复完成(归一化) |
## 1. 静态模先验收
设计图→混元高模→减面/UV/烘焙→XPbr→静态Prefab。遵循 `GameResProductProc.md` 和 `CharacterUnitArtProc.md`,保留同角色高模。普通敌人以1500~2000三角面、每顶点最多4权重为起点,具体上限写配方;精英/首领显式配置预算与尺寸。
绑骨前先验尺寸、底面、正面、贴图与面数,后续不重做另一个形体替换已验收外观。最终绑定姿态与静态模的默认顶点误差≤2mm。P0可见敌人目标≤40个,仍须在战场做多实例性能验收;单角色通过不代表40实例性能已通过。
## 2. 同角色骨架与空间对齐
先尝试验收网格的TokenRig;过简低模导致关键关节缺失时,对**同角色高模**绑骨再转权重。骨数不能代替关节和动作质量验收。
项目静态FBX导入Blender后仍为Y-up顶点,TokenRig GLB为Blender Z-up。`bl_transfer_skin.py --low-up Y --align-bounds` 先转Y→Z,再以底面中心平移/等比缩放对齐,最后转权重,保留原UV与三角面。几何距离门槛:最大≤尺寸3%、RMS≤1%;不满足就停止检查来源或对齐,不能对另一角色强行蒙皮。
配方记录 `rigSource`,每个动作回执记录rig SHA256,导入前要求完全一致;新生成回执还校验FBX SHA256。Unity检查骨路径与父子关系,禁止按bone_N同名混用其它rig。Armature的+90°X可保留,不单独清零。
## 3. 解剖类型与动作生成
已实现并验证的适配器为 `biped_short`:短腿双足、两侧短臂,岩团团12骨。配方显式记录root/chest/左右臂/脚根/脚尖/正面参考骨;12骨和bone_8等名称只属于样例。
其它短腿双足敌人需换成自己的骨名、尺寸和节奏并完整验收。四足、长腿人形、飞行或无脚敌人需要对应解剖适配器,当前入口拒绝未知profile;不能直接套双足步幅。标准人形可沿用Mixamo/Kimodo动作来源,仍需同源绑定和三动作验收。
非人动作在同一TokenRig上用UniMate生成。英文提示词写清体型与单一动作,Walk不混jump,Attack不只写move;显式指定左右正面骨,保留实际提交文本、任务号和哈希。三个动作顺序生成。
生成器在独立任务目录工作,成功后才替换当前FBX,最后提交回执;失败不得把旧FBX标成新产物。默认入口使用有效本地缓存,`--generate`才请求DGXA推理。
## 4. 编辑期收尾
源动作是制作中间件,最终.anim必须离线编辑保存,不能依赖运行时临时改骨骼。清单注明“生成源动作+离线编辑”。
- Walk:校准初始根姿态、保留相对变化;锁水平根位移;选重复步态相位、平滑闭合;按解剖配方编辑步幅/抬脚;烘焙实际蒙皮贴地。
- Idle:以绑定姿态为循环参考,保留轻微生成变化并编辑呼吸幅度,首尾一致。
- Attack:以Idle参考开始/结束;编辑清楚的蓄力、命中与恢复;短冲在配方范围内,循环关闭。
这些编辑强度必须写配方,不能把岩团团数值作为所有敌人的统一值。
## 5. Animator与战斗接口
`Motion`(Int):0=Idle,1=Walk。`Attack`(Trigger):请求一次攻击。支持Idle/Walk进入Attack,结束根据Motion返回Idle/Walk;单次Trigger不自动重复攻击。
```csharp
animator.SetInteger("Motion", moving ? 1 : 0);
animator.SetTrigger("Attack");
```
Attack包含 `OnEnemyAttackImpact` 动画事件,时刻=`attackImpact * attackSeconds`。预览允许无接收器;玩法接入时由现有攻击事件或表现桥接处理,避免重复结算。美术事件不直接扣血,不替代服务器/战斗判定。
视觉Prefab输出 `Assets/Bundles/Characters/Enemy/{Name}/{Name}_Enemy.prefab`。新敌人源资产通常放 `Characters/Enemy/{Name}/`;岩团团复用已有 `Characters/Animal/RockBall/` 的模型、动画、XPbr,通过Variant交付Enemy目录,不复制贴图材质。转向时以局部-Z对准目标。
## 6. 验收门槛
| 检查 | 门槛 |
| --- | --- |
| 来源 | 三动作rig哈希一致;新生成FBX与回执哈希一致 |
| 绑定 | 静态形状、尺寸、底面、面数预算、XPbr通过 |
| 整段动作 | 每段121帧实际蒙皮;脚底偏差≤配方容差(样例3mm),倾角/高度合理 |
| Idle/Walk | 循环开启;首尾顶点差<1mm;呼吸/左右迈步可见 |
| Attack | 循环关闭;动作可读;恢复Idle;一个命中事件且时间正确 |
| 切换 | Idle↔Walk;二者均可进入Attack;单次触发一次;结束返回请求状态,过渡不明显穿地 |
| Play | 真实观察到三状态、逻辑根不漂移、方向不翻转 |
| 目视 | 静态/三动作/自动轮播并排,检查正面、贴图、穿模、脚滑与攻击可读性 |
不能用SkinnedMeshRenderer的保守剔除包围盒判断脚底。Edit验收通过骨骼矩阵和bindposes计算实际顶点;Play验收观察状态/骨骼/逻辑根,不为测试永久打开网格Read/Write。
## 7. 制作入口与复现
```powershell
python Tools/enemy_character_pipeline.py --recipe Config/Art/EnemyCharacters/RockBall.json --validate-recipe
python Tools/enemy_character_pipeline.py --recipe Config/Art/EnemyCharacters/RockBall.json --build-review --play-check
# 重新生成指定动作,再完整制作
python Tools/enemy_character_pipeline.py --recipe Config/Art/EnemyCharacters/RockBall.json --generate Idle Attack --build-review --play-check
```
复制配方后修改id、kind/assetRoot、静态/骨架来源、Enemy输出、尺寸/预算、全部骨名、动作来源与文本。先验配方,再生产和验收;配置合法不等于资产通过。
执行链:`SetupAnimalAnimator.Run`→`FinalizeAnimalWalk.RunFor`→`FinalizeEnemyMotions.Run`→`VerifyEnemyMotions.Run`→`BuildEnemyReview.Publish/Build/Capture`。验收场景Additive创建、隔离渲染层,保留其它场景未保存编辑。
输出 `Tools/output/enemy_characters/{Name}/production_manifest.json`、`verification.txt`、动作处理记录、原始回执;完成后登记Model/Animation/Picture,并将总验收manifest的requiredClips设为三动作。旧 `run_rockball_walk.ps1` 只作单Walk诊断,会缩减控制器,正式制作使用新入口。
`--play-check`执行实际Play轮播,截图后自动退出Play。清单只有 `status=validated` 且qa两项均通过才表示完整交付;不带Play检查仅标 `edit_validated`。制作中标 `building`,不能将未完成结果视作通过。
## 岩团团样例
配方 `Config/Art/EnemyCharacters/RockBall.json`;视觉Prefab `Assets/Bundles/Characters/Enemy/RockBall/RockBall_Enemy.prefab`;场景 `Assets/Bundles/Scenes/Review/Enemy_RockBall_Review.unity`。横躺原因和单Walk历史保留在 `RockBall/WalkRiggingFix.md`,本方案是其三动作生产版本。
本次Idle/Attack在同一rig上重新生成;Walk沿用已验收源。三动作离线收尾后各121帧通过:Idle最大形变0.00635m,Walk左右步幅约0.06216/0.06124m,Attack最大形变0.13320m、最大根倾角14.098°;三段脚底误差均<0.6mm、首尾顶点差为0。控制器单次攻击与状态恢复、实际Play三状态轮播均已通过。3项配置/生成失败保护测试通过,完整一键生产命令已执行成功。
## 伙伴复用说明(2026-10-20)
同角色骨架、三动作离线处理与验收也供伙伴使用,统一入口为 `Tools/character_animation_pipeline.py`;原 `Tools/enemy_character_pipeline.py` 命令保持兼容。
伙伴配方使用 `usage: companion_visual`、`visualPrefab` 和独立 `reviewOriginX`,输出仍在对应角色的 `Characters/Animal/{Name}`,不创建敌方Variant。伙伴验收对象与相机使用含角色名的 `CompanionReview_{Name}` 前缀,避免与已加载的敌方验收对象重名;构建仍以Additive方式保留其他场景。
远程伙伴可选 `attackStyle: ranged_cast`,通过离线双臂抬起/前伸表现施法;`attackReach` 是小幅骨骼前伸,`attackLunge` 只控制模型内部的视觉位移。`attackEvent` 可配置,伙伴默认 `OnCompanionAttackImpact`,敌方沿用 `OnEnemyAttackImpact`。事件是视觉时机接口,接入实际火球与伤害前不表示玩法已完成。
新角色必须检查自身TokenRig后填写骨骼映射;禁止复用岩团团的bone编号。`boneMappingReady: false` 的草稿会被入口拒绝,不能当作完成资产。火喵正式配方为 `Config/Art/Companions/FireCat.json`,已完成1998 tris/1024 XPbr、自身22骨、Idle/Walk/施法Attack、伙伴视觉Prefab及Edit/Play验收;初始draft保留为禁止运行的制作记录。
火喵Walk的源动作在根骨之外还带有腿部坐姿偏移。此类来源使用 `walkBindCalibration: true`:每根骨骼以源首帧为参考,把相对运动应用到同rig的绑定姿态,并以 `walkSourceWeight` 控制幅度,然后再处理短步、贴地和循环。只纠正根骨不能保证腿部姿势正确;必须查看完整蒙皮的多个走路相位。旧岩团团配方默认沿用已验收处理方式。
DGXA显存不足时,可对指定动作加 `--generation-device cpu`(统一入口)或 `--device cpu`(generate_enemy_motions.py),只修改本次任务的独立采样配置;生成回执记录设备,不停止其他模型服务。火喵Attack首次CUDA运行因节点同时运行混元与音频服务而失败,保留失败日志并改用CPU重试。无需重新生成已经有效的Idle/Walk。
若自动骨架遗漏尾骨等附肢且权重错误跟随前臂,必须在最大动作幅度下检查蒙皮。配方可用 `skinOverrides` 以原静态模坐标/高度归一化的seed选取表面测地距离区域,在fullDistance到fadeDistance间渐变到指定已存在骨骼;该编辑只影响权重,不改变网格、UV或动作骨架。必须保留几何距离与受影响顶点范围报告,检查区域未误选头/躯干,完成绑定对照及动作峰值目视。火喵尾部175个顶点转到根骨后通过;目前没有独立尾骨的次级摆动。
对新角色先完成单Walk数值门禁(`VerifyEnemyMotions.Walk(recipePath)`)及多个相位目视,再交付完整三动作。数值门禁不能代替动作语义检查:施法必须能看出双爪前推,Idle不能大幅摇摆。最终配方支持 `idleSourceWeight` / `attackSourceWeight` 调整源运动幅度。
@@ -0,0 +1,56 @@
# 火喵 FireCat · T1制作记录
2026-10-20。伙伴清单ID=1,继岩团团之后制作。火元素、远程输出,普通攻击为火焰弹,技能“灼热火球”;不改变玩法数值。
## 本次范围
T1设计图→混元高模→约1800三角面低模/1024 XPbr→同角色TokenRig→Idle/Walk/Attack→伙伴视觉Prefab与专用验收。T2另作进化形态,不混入本次T1。
## 造型与动作
参考现有火喵原型的橙色主体、奶油色口鼻/肚皮/爪子、青色领圈和弯尾,统一为岩团团的精致卡通3D材质与大眼比例。短腿双足、双臂稍离躯干,双脚可见;三角耳、额头火焰纹、尾尖实体火焰绒簇。无武器、无独立漂浮火焰,便于蒙皮及低模烘焙。
Idle轻呼吸与尾部小幅变化;Walk交替短步;Attack为蓄力后双爪前推的远程施法动作,保持脚下站位。实际火球/命中效果与玩法发射逻辑另行接入,不将近身冲撞动作直接复用为施法。
目标身高0.55m(含耳),Y-up、底面中心、局部-Z正面。静态形状验收后再绑定动画;所有动作使用火喵自己的同一rig。伙伴资产在Characters/Animal/FireCat,不创建敌方角色Variant。
## 设计图
`firecat.png`:内置imagegen参考岩团团风格和火喵原型生成,1086×1448。四角RGB最小253,纯白背景门槛通过。原图留在Doc,不放入Bundles。
生成提示词与输入记录见 `design_prompt.txt`。参考图仅提供风格/原型身份,不覆盖原始参考文件。
## 状态
- 设计图:已生成并检查。
- 高模、低模、绑定、三动作、伙伴视觉Prefab与Unity Edit/Play验收:已完成。用户已明确授权设计图提交腾讯混元3D、同角色模型发送DGXA(192.168.132.46)绑骨及三动作。
- 正式配方:`Config/Art/Companions/FireCat.json`。初始 `FireCat.draft.json` 保留为不可运行的制作记录;正式配方包含自身22骨映射和最终动作/权重参数。
- 入口:`python Tools/character_animation_pipeline.py --recipe Config/Art/Companions/FireCat.json --build-review --play-check`。默认使用同源缓存,不重新发起推理。4项Python流程测试通过。
## 最终资产
混元50k档高模50186 tris→Blender低模1998 tris、1006源顶点、1024 XPbr base/mix。静态与动画伙伴身高0.55m,Y-up、底面中心、局部-Z正面;动画外层根为单位缩放,Root Motion关闭。
- 目录:`AIClient/Assets/Bundles/Characters/Animal/FireCat/`
- 静态:`FireCat.prefab`;同源蒙皮:`FireCat_Rigged.prefab`;伙伴视觉:`FireCat_Companion.prefab`
- 动作:`Clips/{Idle,Walk,Attack}.anim`;Controller:`FireCat_Animator.controller`
- 验收:`AIClient/Assets/Bundles/Scenes/Review/Companion_FireCat_Review.unity`,静态/Idle/Walk/Attack/自动轮播并排,Additive构建,未保存或关闭其它场景。
- 来源与报告:`Tools/output/companions/FireCat/{production_manifest.json,verification.txt,play_verification.txt,walk_verification.txt}`。
## 绑定与动作处理
TokenRig同角色高模生成22骨,rig SHA256为 `62a5097099beccbbefd40a97ac7d744c086dcf3f39411fab81ba5ac37db03bea`,三个源动作回执完全一致。自身映射:root=bone_0,chest=bone_3,左右臂=bone_7/11,脚根=bone_16/20,脚尖=bone_17/21。均按实际位置和层级检查,不复用岩团团的12骨编号。
Walk源首帧根倾斜约69.5°且腿部呈坐姿。只修根骨仍会坐着走,因此开启全骨骼首帧相对绑定姿态校准、保留35%源运动,再离线编辑短步、贴地和循环。最终1.1秒循环,左右有效步幅约0.0625/0.0455m,最大根倾角4.35°。
Idle源运动降至8%后形成轻呼吸/小幅摆动,1.6秒循环。Attack保留12%源运动,双爪75°抬起并小幅前伸,蓄力→施法→恢复,共1.1秒;0.55秒触发 `OnCompanionAttackImpact`,不循环,结束恢复请求的Idle或Walk。Controller使用 `Motion` Int(0/1)和 `Attack` Trigger。
TokenRig未生成独立尾骨,原自动权重让部分尾部跟随前臂,施法时被拉扁。配方skinOverrides使用低模表面测地距离选择尾部、渐变绑定到bone_0;修正175个顶点权重,保留几何/UV/骨架与三动作来源,限制4权重并归一化。尾巴随躯干自然运动,目前没有独立尾骨摆动。绑定姿态相对静态模最大顶点差约0.000030m。
Attack首次CUDA推理因其它混元/音频服务占用DGXA内存而失败,保留日志;改用独立任务CPU配置生成成功,未停止其他服务。该回执明确device=cpu。
## 验收结论
三个动作各121帧实际蒙皮通过;最终最大脚底误差约0.15mm,循环及Attack恢复端点顶点差为0。最大根倾角Idle约1.85°、Walk约4.35°、Attack约11.31°。控制器切换、一次Trigger只攻击一次、恢复请求状态通过;实际Play观察到三个状态,逻辑根位置固定。正侧背与施法峰值目视通过。
本次完成T1视觉资源;火球特效、实际发射/伤害和开战/营地正式替换属于玩法接入,尚未接入。T2进化形态另作资产。
@@ -0,0 +1,5 @@
Method: built-in imagegen, style-transfer, opaque white background.
Style reference: Doc/Design/Character/RockBall/rockball.png
Identity reference: AIClient/Assets/Bundles/UI/Texture/Prototype/proto_pet_1.png
Create FireCat (火喵), the next companion, a friendly small fire-element ranged-damage cat. Match the approved RockBall reference's polished stylized 3D mobile creature rendering, expressive glossy eyes, soft toy-like volume and grounded material detail; do not copy stone, moss or blue crystal. Preserve the FireCat prototype's warm orange body, cream muzzle/belly/paws, simple turquoise collar, upright bipedal cat and curved tail, replacing blocky geometry with rounded finished anatomy. One full-body T1 character centered on pure white #FFFFFF, no text, labels, props or scenery. Near-front view with a slight three-quarter turn, face/both arms/both feet clearly visible, eye-level camera. Rounded cat head, triangular soft ears, golden inner ears, huge amber-brown eyes with catchlights, dark feline nose and confident friendly smile. Short arms slightly away from torso for rigging, separate stubby legs and cream paws on invisible ground. One orange tail curves beside/behind the body; compact sculpted orange-red/yellow flame-shaped tuft at its tip, continuous solid geometry, no floating flame/particles. Modest flame-shaped forehead marking. Plain turquoise collar, no bell/equipment/armor. Clean simple volumes suitable for1500-2000 triangle model. Soft studio light, stylized fur without wispy strands, white corners and full silhouette.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

@@ -0,0 +1,50 @@
# 岩团团绑骨与 Walk 流程修正(2026-10-20)
此文保留单Walk诊断历史。后续已升级为敌方Idle/Walk/Attack三动作标准,正式制作入口和当前状态见 [../EnemyCharacterProduction.md](../EnemyCharacterProduction.md);旧单Walk脚本仅用于诊断。
已跑通单个 Walk:`RockBall_Rigged.prefab` 使用同角色高模的12骨骨架,默认循环播放1.1秒走路。专用并排场景:`Assets/Bundles/Scenes/Review/RockBallWalkReview.unity`。原静态模型、UV、XPbr贴图保持原样。
## 原因与证据
1. **权重转移前缺少坐标对齐。** `bl_decimate.export_fbx_source_yup` 保存的是项目Y-up顶点;Blender重新导入后仍为Y-up,静态低模高度位于Y=0..1.0069。TokenRig GLB进入Blender后则为Z-up。旧 `bl_transfer_skin.py` 的“keep both as imported”把这两者直接蒙皮;所以绑定姿态就已横躺,不能仅凭根骨up判断网格站直。
2. **骨架来源不匹配。** 旧资产使用 `3cead72a` 的19骨代理,形体及原点与验收低模不同。当前使用同一混元高模生成的 `high_rig/rigged.glb` 12骨骨架;对齐后低模至高模表面RMS=0.002229、最大0.005794(原始高度约1)。
3. **旧Walk实际上提交了Jump。** `high_rig/pipeline.log` 写明:用户提示“原地走路弹跳…”被后端转成 `an animal jumps forward`。英文walk又会被上游改写成dog;新适配器保留明确的双足英文提示,指定左右脚骨 `bone_8/bone_10`。
4. **新生成动作仍需制作收尾。** 原始UniMate Walk带约34.46°初始根骨偏移,脚部平移不足4mm、首尾顶点差约3.7cm。`FinalizeAnimalWalk` 在编辑期烘焙绑定参考根姿态、原地XZ、实际蒙皮贴地、周期残差闭合,并为短腿骨架编辑交替步幅。最终步幅0.06m、抬脚0.018m、周期1.1s。它是“UniMate源动作+离线编辑”的样例,不把生成原件当作可直接交付的成品。
Armature在Unity中的+90°X是这组FBX的坐标表示;骨架与动作一致时可以保留。不要单独清零Armature或给Prefab套反向90°旋转,这会破坏绑定矩阵或让动画重新覆盖。
## 可复现入口
在仓库根目录运行 `powershell -File Tools/run_rockball_walk.ps1`:使用已缓存的同角色骨架与新Walk,重做转权重、Pipeline导入、Prefab、Walk离线烘焙、验证。`-Generate` 会调用DGXA重新生成源动作;不需要重新绑骨或重做静态模。
关键步骤:
```powershell
# 项目静态FBX → 同角色高模骨架空间;输出在Tools,不手改Unity资产
& D:/Tools/Blender/blender-5.0.0-windows-x64/blender.exe -b --factory-startup --python Tools/model_tools/bl_transfer_skin.py -- Tools/output/rockball_dgx/high_rig/rigged.glb AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall.fbx Tools/output/rockball_dgx/walk_verified/RockBall_Rigged.fbx --low-up Y --align-bounds
# Pipeline导入Rigged FBX与walk_verified/motion/animated.fbx后,按顺序执行
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/SetupAnimalAnimator.cs --entry SetupAnimalAnimator.SetupRockBallWalk
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/FinalizeAnimalWalk.cs --entry FinalizeAnimalWalk.Run
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyAnimalWalk.cs --entry VerifyAnimalWalk.Run
```
重新执行Setup会从原始FBX提取Walk,因此必须接着执行Finalize。`FinalizeAnimalWalk.Run` 参数依次为步幅米数、抬脚米数、循环秒数。当前12骨没有长腿的完整髋/膝链,走路采用短脚迈步,不作为通用长腿人形重定向模板。
## 验证结果
| 检查 | 结果 |
| --- | --- |
| 绑定几何 | 0.55000m高、底面Y=0;对静态模最大顶点误差0.000031m |
| 资源 | 1500三角面、12骨、最多4权重、原XPbr材质 |
| 整段61帧采样 | 根骨最大倾角0.27°;脚底Y约-0.00016..0.00050m |
| 左右脚前后步幅 | 0.06212m / 0.06124m |
| 关节运动 | 最大32.94° |
| 循环接缝 | 首尾蒙皮顶点差0 |
| Animator | 实际控制器连续6秒,保持Walk并完成约5.45圈 |
| Play Mode | 专用场景实际播放约16圈后Live校验通过,脚底Y=0;随后退出Play,保留Edit预览 |
| 总角色验收 | CaoCao、LmGirl、LmCat、RockBall、RockBall_Rigged均通过 |
报告:`Tools/output/rockball_walk_audit/{processing,verification}.txt`;截图:`Assets/Screenshots/rockball_walk_{review,play}.png`。验收计算实际蒙皮顶点,不能把SkinnedMeshRenderer的保守剔除包围盒当作脚底位置。错误19骨代理的几何匹配检查已验证会拒绝(RMS=0.04218,最大=0.13996);完整本地缓存复现脚本已执行通过。
当前仅Walk接入控制器。旧19骨Idle/Attack留作历史资源,不接入12骨;后续必须在同一12骨rig上生成并单独验收,不能按bone_N同名直接混用。
Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

@@ -0,0 +1,95 @@
{
"schemaVersion": 1,
"sceneId": "CharacterUnitReview",
"outputScene": "Assets/Bundles/Scenes/Review/CharacterUnitReview.unity",
"reportPath": "Tools/output/character_review/CharacterUnitReview/review_report.json",
"label": "角色与单位美术验收",
"spacing": 3.0,
"groundSize": 24.0,
"cameraPosition": { "x": 6.0, "y": 1.4, "z": -6.5 },
"cameraTarget": { "x": 6.0, "y": 0.85, "z": 0.0 },
"fieldOfView": 35,
"subjects": [
{
"id": "CaoCao",
"kind": "Human",
"prefab": "Assets/Bundles/Characters/Human/CaoCao/CaoCao.prefab",
"expectedHeight": 1.8,
"heightTolerance": 0.15,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "人物样例:Y-up、底面原点、局部 -Z 正面"
},
{
"id": "LmGirl",
"kind": "Human",
"prefab": "Assets/Bundles/Characters/Human/LmGirl/LmGirl.prefab",
"expectedHeight": 1.65,
"heightTolerance": 0.15,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "人物样例"
},
{
"id": "LmCat",
"kind": "Animal",
"prefab": "Assets/Bundles/Characters/Animal/LmCat/LmCat.prefab",
"expectedHeight": 0.42,
"heightTolerance": 0.12,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "非人样例:可作宠物正式模型目录模板 Characters/Animal/{Name}"
},
{
"id": "RockBall",
"kind": "Animal",
"prefab": "Assets/Bundles/Characters/Animal/RockBall/RockBall.prefab",
"expectedHeight": 0.55,
"heightTolerance": 0.12,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "岩团团正式静态宠模:混元50k→烘焙1500 tris;已通过。开战/营地替换另开任务"
},
{
"id": "RockBall_Rigged",
"kind": "Animal",
"prefab": "Assets/Bundles/Characters/Animal/RockBall/RockBall_Rigged.prefab",
"expectedHeight": 0.55,
"heightTolerance": 0.15,
"maxTriangles": 2500,
"requireXpbr": true,
"requireAnimator": true,
"requiredClips": ["Idle", "Walk", "Attack"],
"notes": "敌方制作标准样例:同角色12骨→空间对齐→低模转权重→Idle/Walk/Attack→离线收尾;Enemy视觉Variant见Characters/Enemy/RockBall。Motion=0/1,Attack使用Trigger。"
},
{
"id": "FireCat",
"kind": "Animal",
"prefab": "Assets/Bundles/Characters/Animal/FireCat/FireCat.prefab",
"expectedHeight": 0.55,
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "火喵T1伙伴静态模:混元50k→1998 tris/1024 XPbr,隔离正侧背面与尺寸贴地验收通过。"
},
{
"id": "FireCat_Companion",
"kind": "Animal",
"prefab": "Assets/Bundles/Characters/Animal/FireCat/FireCat_Companion.prefab",
"expectedHeight": 0.55,
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"requireAnimator": true,
"requiredClips": ["Idle", "Walk", "Attack"],
"notes": "火喵T1伙伴视觉:同角色22骨,Walk全骨骼首帧校准,尾部权重修正;Idle/Walk循环,Attack单次双爪施法,0.55秒出手事件。专用Companion_FireCat_Review场景Edit/Play均通过。"
}
],
"workflow": {
"designDir": "Doc/Design/Character/{Name}/",
"bakeOutput": "Tools/output/{name}_game/",
"bundleDir": "AIClient/Assets/Bundles/Characters/{Kind}/{Name}/",
"setupEntry": "SetupCharacter.Run",
"reviewEntry": "BuildCharacterReview.Build"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

+283
View File
@@ -0,0 +1,283 @@
# G0 玩法原型实现记录
更新日期:2026-10-20。对应 [GameDesign.md](../../GameDesign.md) 的 G0 阶段,用于验证核心循环与操作手感,不等同于完整 P0 或正式服经济系统。
## 已实现
- 营地入口接入弹珠台、伙伴、教学布阵和战斗,首页资源、等级和教学目标读取当前原型存档。
- 一张可瞄准台面,范围为 -35°~35°,按钮每次调整 5°;固定步长碰撞、墙面反弹、圆形弹片偏转,落入五个奖励区后结算。零度垂直命中不会停留在弹片顶部。
- 首次发射获得捕捉券,此后每十次发射再获一张。原型池先补齐未拥有伙伴,全部获得后按固定轮转转换为碎片;正式 P0 概率池另行接入。
- 岩团团、火喵、芽芽三只伙伴,分别提供守护、输出和支援能力。初始拥有前两只,第三只通过首次捕捉获得。
- 共享训练,消费 `30×当前等级` 糖果,最高 Lv.20;T2 进化逻辑需要 Lv.5、对应碎片 40 与金币 500,并提升属性和战斗体型。
- 点击选择伙伴、点击槽位部署;占用槽位会交换,物种不能重复上阵。教学关只开放中央路线前后两个站位,另两条路线显示锁定。
- 一场真实运行的 3D 教学防守:九只敌人、三波、最后一只为首领;固定逻辑步长、伙伴攻击/治疗、敌人阻挡与突破、耐久、胜负、暂停、二倍速和主动放弃。
- 首通发金币 80、糖果 40、弹珠 3;重复挑战不再发首通奖。首次通关后有一次教学目标奖励弹珠 5。
- 弹珠每十分钟自然恢复一枚,上限 30;满额期间不累计恢复,重新降到上限下方时重新计时。
## 存档边界
G0 使用 `PlayerPrefs` 的独立账号命名空间 `AIGame.G0.v1.{pid}`,不写入现有 AIServer 的真实经济数据。登录完成、取得玩家 ID 后才绑定存档,不同 ID 分开保存。
每次变更先复制完整状态,写入双槽快照后再公布内存状态;快照记录修订号和完整性校验。读取较新的有效槽,最新槽损坏时回退另一个有效槽。未完成发射记录保存输入与唯一 ID,重启后完成同一结算,不再次扣弹珠。首通与教学目标状态持久化,重复点击不能重复发奖。
以上是 G0 历史实现边界。2026-10-16 起运行流程改用下文 G1 服务端存档;本地类只供原型规则回归,不将本地余额直接迁入联网钱包。
## 文件与资源
| 文件 | 用途 |
| --- | --- |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeGame.cs` | 原型状态、快照存储、经济与伙伴操作、弹珠轨迹 |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeBattle.cs` | 教学战斗模拟,与表现分离 |
| `AIClient/Assets/HotUpdate/Scripts/Gameplay/PrototypeFlow.cs` | 页面加载、输入绑定、轨迹与 3D 战场表现 |
| `Tools/generate_prototype_ui.py` | 生成四个 UI JSON,运行时不创建业务骨架 |
| `AIClient/AgentScripts/BuildPrototype.cs` | 通过 Pipeline 制作 Arena、伙伴肖像、Prefab 和资源收集规则 |
| `AIClient/AgentScripts/VerifyPrototype.cs` | G0 规则与 Prefab 回归;联网实际点击验证已迁至 `VerifyG1.cs` |
四个页面为 `UI_PrototypePinball`、`UI_PrototypePets`、`UI_PrototypeFormation`、`UI_PrototypeBattle`,位于 `Doc/UIPrefabCreater/` 与对应 UI Prefab 目录。战斗结果面板是战斗 JSON 的持久化子节点。
`Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 包含战场、三只伙伴简模、九个敌人池、攻击弹体池、独立相机与灯光,所有业务场景对象由编辑器预制后实例化。相机只绘制第 30 层,退出战斗关闭,不改写原主相机设置。角色局部 -Z 为正面,战斗中按敌人方向旋转。
伙伴使用 Unity 原始几何体的原型模型,供后续正式美术替换。肖像由同一模型在 Unity 隔离场景渲染,不引用外部生成服务。资源登记见 `Doc/ResDesc_Model.md`、`Doc/ResDesc_Picture.md` 与 `Doc/ResDesc_Effect.md`。
## 运行与重建
打开现有 Boot 场景进入 Play。保持现有本地 AIServer 配置;登录后点击“弹珠”发射,获得足够糖果后进入“伙伴”训练,在“冒险”进行布阵与防守。其余尚未接入的入口仍保留建设中提示,不表示完整 P0 已实现。
```powershell
python Tools/generate_prototype_ui.py
python Tools/generate_home_ui.py
unity command --project-path D:/UD/AI/AIGame/AIClient set_autotick --enable true
unity command --project-path D:/UD/AI/AIGame/AIClient recompile
# 轮询 recompile_status 到 completed/up_to_date,再继续。
unity command --project-path D:/UD/AI/AIGame/AIClient recompile_status
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildPrototype.cs --entry BuildPrototype.Build
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyPrototype.cs --entry VerifyPrototype.Domain
```
UI 仍使用 Common 九宫格、TMP 字体和 Candy 主题。Art/UI 收集四个新页面;Art/GameplayPrototype 收集 Arena,材质和肖像随依赖进入资源包。没有手工修改 Prefab、Material 或 `.meta`;未构建 Player 或上传 CDN。
## 验证范围与后续
规则验证覆盖瞄准确定性、全部 71 个整数角度落入奖励区、自然恢复时机和上限、双槽恢复、写入失败、待结算发射恢复、防重复奖励、捕捉转换、训练进化、阵容交换和战斗胜负。实际点击测试使用独立的临时玩家 ID,结束后还原真实账号并删除临时测试键,不改变真实原型进度。
最终运行截图位于 `AIClient/Assets/Screenshots/g0_*.png`。伙伴和敌人目前是简模,攻击表现为预制弹体、缩放和位移反馈;未制作正式 Animator、攻击动画和音频。
2026-10-15 验证结果:Unity 编译完成;上述规则与 Prefab 字体/九宫格检查通过。实际 EventSystem 点击走通弹珠、捕捉、共享训练、阵容交换、推荐布阵、暂停/二倍速、三波防守、精确首通发奖及一次目标领奖;已检查四页与结算截图。测试临时存档已清理,真实原型账号快照保持一致;已退出 Play,恢复原 Game View,Boot 场景无未保存修改,最终一轮无新增 Console 错误。尚未进行微信真机验证、Player 构建或资源发布。
P0 还需补足配置表、存档版本迁移、伙伴与关卡内容、完整概率池、元素/技能规则、拖拽布阵、营地建筑、日常支撑页面与真机性能验证。当前教学关的中性敌人使用简化基础伤害,不声明已完成完整的五元素克制和技能体系。
## G1 本地服务端接入(2026-10-16)
现有 Candy JSON→Prefab 页面直接接入 `PrototypeApi`。登录后读取服务端账户,实时玩法不再写 G0 PlayerPrefs,也不使用客户端时钟发放自然恢复。原型余额不迁入联网钱包;旧 G0 双槽数据仍保留。
`AIServer/src/game.cpp` 在 SQLite 单一事务中保存玩家快照和按玩家唯一的请求日志;共享连接的鉴权读写也纳入互斥。服务端处理弹珠扣费/轨迹/券、捕捉新旧伙伴、训练、进化、阵容、教学战斗开始/结算/放弃、首通和目标领取。业务拒绝持久化,修订号防止另一设备使用旧余额继续操作,原请求重放返回当前快照与原操作结果。数据库写入失败不改变任何余额或活动状态。
弹珠轨迹、落点和奖励全部由服务端返回。教学战斗开始时冻结成长和阵容、计算结果,完成时只根据该结果发奖;客户端只负责表现,不能提交胜利或奖励数值。结算须达到服务端最短播放时间。重新进入会恢复同一次弹珠或挑战;暂停和恢复不会重复创建活动。
客户端按端点和玩家保存一个未确认请求,收到完整有效响应才清理。网络失败时提供重试并锁定新业务操作,401 自动重新登录同一游客再提交原请求。未完成弹珠会继续播放并结算;未完成教学战斗可从冻结快照重新播放。不是完整逐帧反作弊协议,战中输入玩法需要另行扩展。
验证已通过:原生事务测试(鉴权、拒绝重放、16并发重试、存储故障回滚、71个方向、成长、胜负、持久化);HTTP边界测试(账户隔离、24并发重试、进程重启、一次结算、维护);Unity 编译和 G0 规则/字体/九宫格回归;独立服务/账户上的 EventSystem 实际点击(弹珠→捕捉→训练→换阵→暂停/2倍速→教学胜利、准确80金币/40糖果/3弹珠);目标领奖、丢失确认重试、飞行中重进、401/空会话续期及过期修订号下放弃战斗重试不发奖。
本轮只更新代码、协议与测试,没有生成新的美术或修改页面骨架;继续复用已登记的 G0 资源。开发服务 `127.0.0.1:8080` 已更新,保留原用户数据库。未部署生产服、构建 Player、上传 CDN 或进行微信真机验证。正式 P0 尚需配置表提取、迁移策略、全量内容与概率池;现有固定教学池不能当作正式抽取系统。
收尾:独立测试服务已关闭,真实开发账户恢复且余额/进度未受测试影响;已退出 Play 并恢复验证前 Game View。最终 Console 游标365,本轮349之后无新增错误。
## G2 首章前五关与统一配置(2026-10-16)
本轮交付选关、关卡准备、逐关解锁和独立首通奖励。营地主界面“冒险”进入五关列表,可重试已通过关卡;通关结算提供下一关入口。关卡界面显示敌人元素、类型、建议训练等级、战术提示、首通奖励与已领取状态;建议等级不是进入门槛。
| 关卡 | 内容 | 建议训练 | 首通:金币 / 糖果 / 弹珠 |
| --- | --- | --- | --- |
| 1-1 营地初守 | 保留原教学规则,中性敌人 | Lv.1 | 80 / 40 / 3 |
| 1-2 草丛来客 | 草元素,火喵有克制优势,加入队长 | Lv.2 | 90 / 50 / 3 |
| 1-3 疾风小径 | 火元素,加入疾跑怪 | Lv.3 | 100 / 60 / 3 |
| 1-4 岩壳阵线 | 岩元素,加入有防御的硬壳怪 | Lv.4 | 110 / 70 / 3 |
| 1-5 溪口大角王 | 水元素,混合敌人与强化首领 | Lv.5 | 200 / 100 / 5 |
唯一配置源是 `Config/Gameplay/greenfield.json`。服务端CMake将JSON与内容哈希嵌入程序,客户端从响应取得同一份配置;训练/进化、伙伴生命/攻击/射程/治疗、敌人属性、元素环、关卡波次与奖励由此读取。弹珠奖励与主要物理系数也来自配置,台面几何及固定模拟步长仍是当前引擎约定,改变几何须同步调整JSON→Prefab生成器。
新战斗冻结完整配置、关卡和阵容,重新进入仍播放同一份配置。第二关起启用 `max(1,floor(攻击×元素系数−防御))`,伤害包含火→草→岩→电→水→火的单向克制;治疗不参与元素乘算。第一关继续使用原G1基础伤害,以兼容已开始的教学战斗。敌人暂复用已有简模,用移动速度、耐久、伤害、防御及队长/首领体型区分,不是五套正式美术。
服务端存档schema升级为2,新增选中关卡和五个首通标志。旧schema=1余额、目标、已有伙伴和阵容不变;旧首通只对应1-1,不补发奖励。旧未完成弹珠沿用保存轨迹,旧未完成挑战沿用原奖励和legacy表现;未知未来schema拒绝处理,不清空账户。新增关卡数据与迁移在同一事务落盘。
界面全部通过 `Tools/generate_prototype_ui.py` 生成JSON,再由 Pipeline 执行 `BuildProgression.Build` 生成五个Prefab;无运行时业务骨架。选关页、布阵提示、伙伴技能说明、弹珠双资源落区和结算按钮沿用Candy。新资源登记在 `ResDesc_Picture.md` 与 `ResDesc_Config.md`。
验证:服务端1011项断言通过,覆盖五关按推荐等级可通关、越关拒绝、逐关首通、重复挑战不发奖、进程重连与两类G1迁移;66组C++与Unity模拟对照全部一致(55次胜利、11次失败,含旧待结算战斗);五个Prefab的字体/九宫格检查通过。独立服务/账户实际点击走通锁定关卡列表、训练与换阵、首关通关/重试、下一关、回到关卡列表及第二关草元素战斗;1-2准确发90金币/50糖果/3弹珠并解锁1-3。schema=2下丢失确认/飞行中重进、401/空会话及放弃战斗的过期修订号重试回归也通过。已检查八张截图,位于 `Assets/Screenshots/progression_*.png`。
配置重建与对照检查:
```powershell
cmake --build AIServer/build-g1 --config Release
AIServer/build-g1/Release/game_tests.exe D:/UD/AI/AIGame/Tools/output/progression_parity.json
python Tools/generate_prototype_ui.py
unity command --project-path D:/UD/AI/AIGame/AIClient recompile
# 轮询 recompile_status 完成后继续;Edit Mode中生成Prefab。
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildProgression.cs --entry BuildProgression.Build
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyProgression.cs --entry VerifyProgression.Domain
```
当前仍只开放单路线前后两槽、三只伙伴、固定教学捕捉池,属于G2内容的第一批。P0余下的15关、更多伙伴及正式捕捉池、多路线、T2技能强化、营地建筑、任务与设备性能验证尚未完成。未构建Player或部署生产服。
本轮收尾:已恢复真实开发账户,未向其发送测试玩法操作;独立18081测试服务已关闭,开发8080服务保持健康。Unity已退出Play、恢复原Game View,Boot场景无未保存修改;Console游标403,本轮365之后无新增错误。
## G2 五伙伴与首章捕捉池(2026-10-16)
现行实现覆盖岩团团、火喵、芽芽、电系闪闪雀、水系泡泡龟。后两者的几何简模、材质、透明肖像和Arena绑定已通过Pipeline制作,替代原先仅三只伙伴的容量;仍属于原型美术。伙伴列表、布阵页更新为五只,新捕捉页通过JSON→Prefab制作,沿用Candy,未恢复Studio/Mint。
首章普通池五种等权20%,首次教学固定芽芽并独立计数。普通捕捉连续4次重复后下一次保证未收集伙伴,获得新伙伴清零;集齐后暂停保底,重复转20对应碎片。页面同时展示基础概率和本次条件概率、保底进度、券数量与最近结果。服务端选择随机结果,不接受客户端物种/种子;扣券、次数、保底、结果与碎片同事务落盘。同一请求重试只返回原回执;客户端丢失确认后恢复原结果弹窗,不再次抽取。
schema升级为3,`stages/shards`扩展为5项,新增教学完成、普通捕捉次数和连续重复计数。schema1/2余额、前三伙伴进化/碎片、阵容、目标、关卡进度与待完成活动保留;已拥有芽芽则不重发教学,新增两只初始未拥有。旧G2三伙伴挑战继续按保存的三伙伴配置模拟与发奖,不混用新配置;旧G1 legacy路径继续保留。
验证:服务端1284项断言通过,包含各概率桶、保底边界、全部集齐、教学独立、重复20碎片、16并发同请求、日志写入故障回滚、持久回执、G1/G2迁移及冻结旧配置。97组C++/Unity战斗对照一致(86胜/11负),覆盖新水/电队伍和旧待完成挑战;六个玩法Prefab的字体、九宫格与五伙伴资产绑定检查通过;原G0规则兼容回归通过。HTTP隔离、24并发重试、重启与维护检查通过。
实际EventSystem点击在独立18081测试账号上通过:教学捕捉→五卡列表→训练/换阵→首战;四次重复边界展示缺失泡泡龟100%→单券保底→集齐暂停→随机重复20碎片;闪闪雀后排/泡泡龟前排通过1-2,持久首通回执与钱包准确增加90金币/50糖果/3弹珠;丢失捕捉确认后重放原请求,券/次数/碎片仅变一次且原结果弹窗可恢复。截图与资源已按类型登记。
复验入口:`VerifyCollection.Assets`、`VerifyCollection.PityAndBattle`、战斗结束后的`FinishBattle`、`LostAcknowledgement`、`SettledBattle`、`FreshTutorial`;确定性保底夹具`Tools/seed_collection_test.py`只允许修改`Tools/output/g1-live`内的隔离数据库和`g1live_`账号。新账号首次捕捉页已经复验:教学芽芽100%、普通次数0、无伪造的最近结果。
本轮完成首章五伙伴池。P0目标中另五种伙伴、其余15关、多路线/T2技能强化、营地建筑、任务、经济曲线与设备验证仍未完成;未构建Player或部署生产服。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变;独立18081测试进程已按路径/端口核验并关闭,8080开发服务健康。Unity编译完成并退出Play,已恢复原Game View,Boot场景无未保存修改;Console游标444,本轮403之后无新增错误。
## G2 营地设施与固定装饰槽位(2026-10-16)
首页底部“营地”接通营地生活面板。主营帐复用探险家档案;完成首次发射开放训练屋(复用共享训练/进化);通过1-1开放弹珠树展示/入口,通过1-3开放休息区,通过1-5开放建造台。锁定设施显示条件并禁用操作。弹珠树读取原钱包与恢复锚点,倒计时基于服务端时间加单调时间推算,余额只由服务端确认;没有额外生产、领取或产量升级。
休息区显示五伙伴收藏,选择已拥有伙伴后可打招呼,服务端保存休息伙伴和累计互动次数,重复请求不重复计数;客户端驱动已制肖像节点缩放反馈,不额外发金币/糖果/弹珠/券,没有新AnimationClip。
建造台提供三处固定装饰位置,每种最多拥有一件。小旗/盆栽/路灯测试价120/180/240金币,配置来自`greenfield.json.camp`。先选装饰和位置显示半透明预览与明确费用;撤回、离开页面不提交扣费。点击“确认购买”才提交服务端事务;已有装饰免费放置/移动,移动清空旧位置,占用位置需先收回,收回保留库存且无退款。该看板是当前营地布局表现,首页背景中的房屋尚不可点击,未制作3D营地行走或自由摆放。
服务端新增`camp.place/store/interact`,沿用身份、修订号、在途活动互斥和SQLite操作日志;购买的钱包、库存、布局与回执同事务落盘。丢失响应时重试同一请求,原费用/位置回执可恢复并展示,不二次扣款。schema1/2经现有迁移后继续升级,schema3→4只初始化空装饰拥有/布局与休息字段,保留钱包、伙伴、捕捉保底、关卡、回执及在途活动,不补发资源。客户端继续支持旧冻结战斗配置没有camp字段。
资产:`BuildCampAssets.cs`经Pipeline制作三件原创几何简模与透明肖像;`generate_prototype_ui.py`生成营地46节点和建造台50节点JSON,由项目转换器制作Prefab。控件沿用有效九宫格/TMP,原五伙伴与Home图标复用,资源已登记至Model/Picture/Config描述文件。`BuildProgression.Build`现生成八个玩法Prefab。
验证:1375项服务端断言通过,新增锁定、参数/类型、服务器价格、占位拒绝、免费移动/仓库、余额不足、旧修订号、在途互斥、互动无奖励、16并发重试、日志故障全事务回滚、重开连接和schema3迁移;HTTP鉴权、隔离、24并发重试、进程重启和维护检查通过。97组C++/Unity战斗对照保持86胜/11负,八个Prefab字体/九宫格与营地资产绑定检查通过。
独立18081服务/账号的真实点击通过:首页入口/主营帐/锁定状态、首次发射开启训练屋、1-3伙伴打招呼且四类资源不变、弹珠树读取同一库存、1-5建造台、预览撤回不扣费、购买小旗120仅一次、移动/收回/仓库免费、占位禁止确认、丢失盆栽购买确认后原请求重放只扣180、重新绑定会话保留布局/休息伙伴、金币239时禁止购买240的路灯且可撤回。已检查锁定、休息、预览、仓库、恢复等画面并微调文字留白。
复验:`VerifyCamp.Assets/Start/Rest/BuildFlow/ReviewPreview/Insufficient`,配合`Tools/seed_camp_test.py rest|build|poor`。夹具只接受`Tools/output/g1-live`内数据库和`g1live_camp_`账号;不会修改真实进度。开发服务8080已更新并保留原数据库,更新前备份在`Tools/output/camp-before.db`。未构建Player或发布生产服/CDN。
这批完成营地设施与装饰第一版;完整20关/10伙伴、多路线、T2技能强化、营地行走/自由摆放、任务签到、经济曲线与设备验证仍未完成。
收尾:原首页115项资源/事件/点击/重连绑定检查及G0领域兼容回归通过;首页仍发`MainHUD.Home`,由`GameplayBootstrap`路由到营地,实际进出点击复验通过。开发账号已恢复,金币/糖果/发射数/等级快照检查不变;隔离18081服务已核验并关闭,8080开发服健康。Unity编译完成、退出Play、恢复原Game View,Boot场景无未保存修改;Console游标529,本轮444之后无新增错误。
## G2 每日任务与七日累计登录(2026-10-16)
首页任务入口打开任务/目标页,签到入口打开七日页。任务页保留长期教学首通目标,并增加每日三项:结算3次弹珠、正常结束1场冒险、与伙伴打招呼1次,各发5弹珠。进度来自服务端已提交的`shot.finish/battle.finish/camp.interact`,封顶3/1/1;主动离开、活动开始、页面打开、客户端自报与请求重放不计入,正常失败的冒险也可完成任务。互动仍需先通过1-3;玩家可用“前往完成”进入对应玩法。
日界为服务器UTC+8零点,首次进入新日的存档事务重置每日进度/领取标志,未领每日奖励过期。跨日弹珠/冒险按结算日计数;日任务领取携带原日键,旧日的新提交不能误领新日任务,原先已成功的领取请求跨日重放则返回原奖励回执。时钟回退不回滚已记录日键、不重复累计登录。
累计登录按不同访问日增加1,跳过多天也只增加1,上限7,非连续登录;配置奖励为弹珠10/5/5/10/5/10/20。已解锁未领的项保留,允许任意顺序领取;无付费补签、漏登重置或七日循环。所有领取与钱包、领取标志、操作日志同事务落盘,写入失败整体回滚;丢失确认后同请求重放只发一次,并在客户端恢复“奖励已领取”弹窗。弹珠奖励可超过30,原自然恢复上限与暂停规则不变。
实时存档schema5新增日键/三项进度与领取、累计登录天数/七项领取。schema4迁移保留钱包、教学/关卡、捕捉、营地、回执和在途活动;不追溯旧累计发射/互动作为今日进度,不自动发签到奖励,当次访问只登记第一个累计登录日。schema1~3继续链式迁移;冻结旧战斗不要求daily字段。配置源仍为`greenfield.json`,新增`daily`由CMake嵌入并生成版本哈希。
UI通过`generate_prototype_ui.py`生成40节点任务页、54节点签到页,`generate_home_ui.py`增加首页任务红点;Pipeline执行`BuildDaily.Build`调用JSON转换器生成三份Prefab,沿用Candy、Common有效九宫格、Home弹珠图标和TMP。没有新增美术贴图/模型/音效。红点只在教学/每日目标或签到奖励可领时显示,领取后清除,首页事件与重连契约保留。
验证:1493项原生断言通过,覆盖事件来源、跨零点、过期领取、旧回执重放、时钟回退、漏登、七日封顶/结束、16并发任务和签到重试、日志故障回滚、持久存档及schema4迁移/在途弹珠。HTTP鉴权/账户隔离/24并发重试/进程重启/维护回归通过;97组双端战斗对照仍为86胜/11负,十个玩法Prefab字体/九宫格与115项首页检查通过,G0领域规则兼容通过。
独立18081服务与`g1live_daily_`账号实际点击通过:首日签到+10一次且未来项锁定、同日重进不增登录天数、三次真实发射推进任务并+5一次、真实教学胜利准确80金币/40糖果/3弹珠并推进冒险任务、教学目标+5与每日冒险+5分开领取、真实休息互动无直接资源但任务+5、三项全部领取后红点清除。累计3日/7日的UI夹具验证未领奖励保留、未来项锁定、七日完成和不循环;丢失签到确认后原请求只发5一次、展示回执并清理队列,会话重进保留标志。schema5下丢失弹珠确认/飞行中重进及401/空会话续期回归也通过。跨日与七日累计规则由原生受控时间测试覆盖,未修改系统时钟。
复验入口:`VerifyDaily.Start/Finish/RestAndClaim/EarnedSignin/Completed/FinalViews`,配合`Tools/seed_daily_test.py rest|signin3|complete`。夹具只允许修改`Tools/output/g1-live`内数据库与`g1live_daily_`账号,真实账号不参与奖励测试。资源已按Picture/Config登记;8080开发服已更新,更新前数据库备份为`Tools/output/daily-before.db`。未构建Player、上传CDN或部署生产服。
这批完成三个每日目标与七日登录第一版。更多主线任务/成就、免费补给商店、背包/宝箱/邮件、完整20关/10伙伴、多路线/T2技能、自由营地与设备性能验证仍未完成。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变,未向其发送测试领奖操作;独立18081服务已按路径/端口/数据库参数核验并关闭,8080开发服健康。Unity编译完成、退出Play并恢复原Game View,Boot场景无未保存修改;Console游标569,本轮529之后无新增错误。
## G2 背包与补给商店(2026-10-16)
首页背包接通四分类:消耗品显示捕捉券数量、来源与永久有效说明,可前往捕捉/弹珠台;伙伴材料显示五种碎片及进化条件,点击定位对应伙伴;装饰显示拥有数量、仓库/放置位置与布置入口;活动道具暂无内容,提供空状态。金币/糖果/弹珠只显示原钱包,捕捉券/碎片/装饰直接读取原字段,不维护另一份库存。
商店分免费补给、金币商品与营地装饰。初始每日免费5弹珠;通过1-1可用100金币购买20糖果,每日3次;通过1-3可用300金币购买1捕捉券,每日1次。金币商品先显示获得内容、费用、购买后余额和当日剩余,确认才提交;取消不扣费。商品到账直接供现有训练/捕捉使用。装饰页与背包共用原建造台,预选同一物种后选择位置,已拥有装饰放置/移动免费。
配置源新增`shop.goods`,服务端`shop.buy`校验日键、关卡、余额、限购,以配置价格发确定奖励,不接受客户端奖励/价格/解锁。schema5→6只初始化三项`shopBought`,保留钱包、任务/签到、营地、伙伴、回执和在途活动;日切与任务共用UTC+8日键,未用次数不累计。扣费、到账、次数和请求日志同事务;失败回滚,跨日原请求重放只恢复原回执、不消耗新日库存。免费补给允许弹珠超过自然恢复上限,原自然恢复规则不改。旧冻结战斗可没有shop配置。
两页由`generate_prototype_ui.py`生成85/61节点JSON,Pipeline执行`BuildInventory.Build`经项目转换器生成Prefab,沿用Candy、Common有效九宫格、Home图标和原伙伴/装饰肖像。无新增美术贴图/模型/音效。`BuildProgression`现包含十二页;首页骨架与事件契约不变,旧首页实际点击检查更新为验证已接通页面及剩余支撑弹窗。
验证:1620项原生断言通过,覆盖免费/价格/解锁/限购、伪造输入、16并发付费和免费重试、库存与钱包回滚、余额不足、旧修订号、在途互斥、跨日旧请求重放、时钟回退、持久化与schema5迁移。新增旧schema5冻结战斗不含shop的对照,98组C++/Unity结果一致(87胜/11负);十二页字体/九宫格与115项首页检查通过,HTTP鉴权/账户隔离/24并发/进程重启/维护及G0领域兼容回归通过。
独立`g1live_inventory_`账号实际点击通过:四类背包/空状态/来源入口,锁定金币商品,每日免费+5一次并在重进后保留次数;确认/取消不提前扣款,购买糖果三次正确售罄,丢失糖果确认后原请求只扣100并发20一次;捕捉券到账后真实消耗捕捉,糖果真实用于训练,背包同步减少;材料入口定位伙伴,装饰入口预选模型,免费放置后背包显示位置;金币99时有库存但禁止100金币购买,受控日界夹具刷新后可重新领取5弹珠。首页八个入口与营地通过实际EventSystem点击;schema6下教学领奖、丢失弹珠确认/飞行中重进及401/空会话续期回归通过。测试脚本切分类后等待渲染帧再点击;跨日规则由原生受控时间覆盖,未改系统时钟。
复验入口:`VerifyInventory.Start/Purchases/Decorations/Insufficient/Refreshed`,配合`Tools/seed_inventory_test.py coins|decor|poor|reset`。夹具仅允许`Tools/output/g1-live`内数据库和`g1live_inventory_`账号,不修改真实数据。资源已登记至Picture/Config;8080开发服务已更新,更新前备份为`Tools/output/inventory-before.db`。未构建Player或发布生产服/CDN。
本批是现有库存与补给商店第一版;通用物品表、批量/堆叠溢出、宝箱/邮件、更多任务/成就、完整20关/10伙伴、多路线/T2技能、自由营地及设备验证仍未完成。
收尾:真实开发账号已恢复,金币/糖果/发射数/等级快照检查不变,未向其发送测试购买或免费领取;隔离18081测试服务已核验并关闭,8080开发服健康。Unity编译完成、退出Play并恢复原Game View,Boot场景无未保存修改;Console游标605,本轮569之后无新增错误。
## G2 小镇邮件与版本一致性(2026-10-18)
检查时服务端已有未完成的schema7邮件迁移/领取代码,但canonical配置缺mail、客户端只接受schema6,重新构建后原生测试在首次读取失败。本轮补齐配置校验与端到端业务,没有重置钱包或回退存档。当前服务器为schema7;客户端接受schema6/7滚动更新,schema6的邮件入口显示稍后重进。Unity的JsonUtility会为缺失的新嵌套字段创建空对象,已专项兼容旧服务和冻结战斗配置;schema7实时配置仍必须包含完整mail。
首页邮件入口打开Candy邮件面板:每页五封,显示未读/已读、附件待领/已领、到期和无附件通知;正文支持滑动,单封或一键最多20封领取。首页红点仅显示有效未读信或有效未领附件;打开邮箱不自动领,选择邮件才标已读。倒计时用服务端时间加单调时钟,过期附件禁领,保留已读/已领/到期记录。
`greenfield.json.mail`定义7天有效的欢迎补给(糖果20、弹珠5)和无附件营地通知。schema6→7只保存这两封记录,不自动发资源;已有钱包、伙伴、关卡、捕捉、营地、日常、购买次数、旧回执与在途活动保留。旧冻结战斗缺mail时继续按保存配置结算。schema7后不会重复创建初始信;当前不含运营投递、群发和删除邮件接口,修改initial不会自动给旧schema7账号追加信件。
`mail.read/claim/claimAll`沿用鉴权、revision、在途活动互斥及SQLite操作日志。单封附件、钱包与已读/已领标志原子提交;批量逐封返回成功/已领/过期/无附件/不存在,坏项不阻塞其他有效附件,重复ID/错误类型/超20封则整单拒绝。存储失败全部回滚,同请求重试/进程重启/跨日/过期后重放恢复原回执,不再次发奖。客户端保留未确认请求,匹配完整有效邮件回执后清理,并恢复领取结果弹窗;缺失JSON奖励、错误回执ID等不确认。
资源:`generate_prototype_ui.mail()`生成42节点JSON,Pipeline执行`BuildMail.Build`通过现有转换器生成`UI_PrototypeMail.prefab`,复用Common九宫格与TMP,无新增外部贴图/模型/动画/音频。`BuildProgression`与双端对照资产检查现包含13页。邮件JSON/Prefab、11张隔离实测截图及配置已分别登记Picture/Config描述文件。
验证:原生1717项断言通过,新增首次建信不发钱包、已读不发奖、单封/批量防重复、16并发、错误/混合批量、到期边界与时钟回退、单封/批量日志故障回滚、连接重开、schema6迁移和旧冻结战斗;99组C++/Unity战斗对照一致(88胜/11负);13页字体/九宫格检查和G0领域兼容回归通过。HTTP用独立进程/数据库验证24并发弹珠与邮件重试、账户隔离、进程重启回执、真实已读/领取与维护。
独立18081服务/`g1live_mail_`账号实际EventSystem点击通过:未读红点→读信不发奖→精确糖果20/弹珠5一次→通知无附件→红点清除→会话重进不重复;8封混合状态分页、过期禁领、长正文滚动;三封批量准确金币7/糖果20/弹珠3/券1;丢失确认后重放原请求只发5弹珠,已读/已领/列表文案同步、恢复结果弹窗并清理队列;空邮箱禁用领取。已检查详情、批量结果、到期、长文底部、重放和空状态画面。
复验:`VerifyMail.Assets/Start/Batch/LostAcknowledgement/Empty/Cleanup`,配合`Tools/seed_mail_test.py mixed|lost|empty`。夹具只允许`Tools/output/g1-live`中的`mail-db.path`指向的隔离数据库与`mail-account.txt`中的`g1live_mail_`账号;旧营地/每日/收集/背包夹具增加schema7兼容。原生及双端导出仍使用`game_tests.exe Tools/output/progression_parity.json`,HTTP运行`python Tools/test_game_http.py`。
开发服更新前使用SQLite在线备份到`Tools/output/mail-before.db`,按可执行路径/端口核验后重建并重启8080。真实账号恢复并完成6→7迁移;与备份逐账号比较仅schema/mails/revision有变化,钱包、进度及操作日志总数不变,两封真实邮件均未读/未领。隔离18081进程已按路径/数据库核验并关闭,8080健康;Game View与原有Play状态恢复,Boot不保存临时变更。测试期间Play切换曾使Pipeline请求线程中断,重连后全部实测通过;编辑器保留该工具错误及重启开发服造成的两条WS断连警告,未清空历史Console。未构建Player、上传CDN、部署生产服或进行微信真机验证。
下一批优先三路线/六槽布阵与T2技能,再补关卡/伙伴内容、宝箱/设置及G3体验性能验收;本轮没有扩大至完整P0。
## G2 三路线布阵与 T2 技能(2026-10-18)
本轮在已有五伙伴/五关内容上完成三路线布阵的服务端权威规则与客户端表现。1-1、1-2 仍分别开放 1 条路线,1-3、1-4 开放 2 条,1-5 开放 3 条;每条路线有前后两个槽位,部署时同一伙伴只能出现一次,占用槽位会交换,空路线会记录突破。拖动布阵使用已登记的 `FormationDragHandle`,拖回伙伴区撤下,推荐布阵按当前开放路线填充。
每个伙伴增加 T1/T2 技能:岩团团护盾、火喵范围攻击、芽芽治疗、电系闪闪雀连锁攻击、水系泡泡龟减速。T2 使用既有共享训练等级、碎片与金币条件,并通过已制作的技能脉冲、护盾、减速标记和 T2 冠饰表现。首领对减速按配置缩短效果,治疗和护盾不套元素伤害乘算;战斗开始冻结完整配置、关卡和阵容,结算仍只接受服务端结果。
`AIServer/tests/game_tests.cpp` 新增三路线槽位权限、跨路线交换、空槽撤下、请求重放、存储故障回滚、五技能覆盖、首领控制衰减、治疗/护盾效果及多关卡/等级/进化矩阵。服务端原生测试现为 3505 项;C++ 模拟导出的 `Tools/output/progression_parity.json` 与 Unity `VerifyProgression.Domain` 对照为 189 组(150 胜 / 39 负),十三个业务 Prefab 的字体与九宫格检查通过。`python Tools/test_game_http.py` 的隔离 HTTP 回归也通过。
修正了配置中技能名称和三关战术提示的编码占位符,新增 `bossControlScale` 配置并在 C++/Unity 两端执行一致校验。没有生成新贴图、模型、动画或音效,因此无需新增资源登记;继续复用既有 Arena、伙伴与 UI 资源。
仍待完成:完整 10 伙伴/20 关内容、正式多路线关卡设计、T2 外观替换为正式美术、宝箱/设置、自由营地与 G3 真机性能验收。未构建 Player、上传 CDN 或部署生产服。
## 战斗角色显示修复(2026-10-18)
问题原因是三路线资源脚本 `BuildLanes.Build` 已提交但尚未执行,`PrototypeArena.prefab` 缺少 `DeploymentMarkers`、`SkillEffects`、`Shield`、`SlowMark` 与 T2 冠饰等节点;客户端在刷新战斗时于路线标记节点空引用,后续角色表现因此没有更新。已通过 Unity Pipeline 执行 `BuildLanes.Build` 持久化战场预制体,并为 `PrototypeFlow.RefreshBattle` 增加缺失表现节点保护,避免旧缓存或不完整预制体导致每帧异常。实机 Play Mode 截图确认岩团团、火喵已显示,战斗继续推进;本轮无新增 Console 错误。
## G2 宝箱奖励页(2026-10-19)
首页“宝箱”入口接通奖励页:每日宝箱、首通掉落箱与自选箱。每日宝箱每天领取1个、只进入库存不直接发奖;1-1、1-3、1-5首通各掉落一个箱(绿野补给箱、伙伴碎片自选箱、溪口大礼箱),重复挑战不再掉落。打开固定箱直接发放金币/糖果/弹珠/捕捉券;自选箱先选一种伙伴碎片(×10)再打开。箱子永久有效,暂不做过期转材料。
配置源仍为`greenfield.json`,新增`rewards`(三种箱的内容与自选、每日箱ID、首通掉落表),CMake嵌入并生成新版本哈希,客户端读取同一份配置。服务端新增`chest.claimDaily/chest.open`,扣箱、发奖、写操作日志同一事务;每服务器日可领一次,与商店限购共用UTC+8日切。`battle.finish`首通回执新增`chest`字段。业务拒绝`invalid_chest/chest_missing/chest_claimed/invalid_choice`持久化。
schema升级为8:7→8只新增`chests:[0,0,0]`与`chestDailyClaimed`,迁移不发放免费箱。客户端兼容schema6~8服务滚动更新,schema8以下宝箱入口提示稍后重进。客户端按动作校验回执:打开箱必须携带至少一项非零奖励,每日箱回执不得携带奖励(JsonUtility会把缺失奖励物化为全零对象)。
UI通过`generate_prototype_ui.py`新增`chest()`生成48节点JSON,Pipeline执行`BuildChest.Build`经项目转换器生成`UI_PrototypeChest.prefab`;`BuildProgression`与双端对照资产检查现包含14页,首页`Dot_Rewards`改由每日可领或拥有箱子驱动,首页115项检查仍通过。
验证:原生3598项断言通过,覆盖空库存、每日箱只入库、固定箱精确奖励、自选箱选择校验、重复/丢失回执、首通掉落只一次、过期修订号、在途互斥、日切与时钟回退、16并发、日志故障回滚、重连持久化及schema7迁移;HTTP隔离进程验证24并发每日箱/开箱只发一次与账户隔离;C++/Unity对照189组一致(150胜/39负)。独立18081服务与`g1live_chest_`账号实际EventSystem点击通过:首页入口与空状态、每日箱入库不发奖、固定箱精确60金币/30糖果/2弹珠一次、自选芽芽碎片+10、丢失确认恢复原回执;首页入口实际点击检查扩为9项入口与营地。已检查五张截图,Console无新增错误。测试后真实开发账号由备份比对仅schema/revision变化,钱包80金币/40糖果/48弹珠、等级与发射数不变;隔离服务已关闭,8080开发服务更新并健康。未构建Player、上传CDN或部署生产服。
下一批建议:设置面板(音乐、音效、画质、振动、账号信息,本地偏好+账号信息读取),随后补齐内容量与正式战场。
## 绿野战场方案 A 接入开战(2026-10-20)
`Battlefield_Greenfield` 已嵌进 `PrototypeArena/Greenfield`,方块地面关闭,场景不摆桥。开战相机只画第 30 层,Greenfield 整棵子树已统一设层。隔离 18081 Play Mode 验证 1-1 加载绿野土路与装饰,截图 `battlefield_play_battle.png`。开发 8080 未改动真实账号。未构建 Player、上传 CDN 或部署生产服。
## 设置面板(2026-10-20)
首页设置入口接通 `UI_PrototypeSettings`:音乐/音效开关、画质三档、振动(桌面禁用)、账号 ID/访客名与重新登录说明;删除账号按钮禁用并提示 P0 未开放。偏好存本机 PlayerPrefs,重新登录走 `GameNet.RenewSession`,不删云端进度。JSON→Prefab,`VerifySettings` 资产与 Play 点击通过,截图 `settings_page.png`。玩法页增至 15 个。未构建 Player、上传 CDN 或部署生产服。
下一批建议:补齐内容量(更多伙伴/关卡)与正式美术/音频。
## G2 十伙伴与二十关(2026-10-20)
内容量扩到 P0 目标:`greenfield.json` 现为10只伙伴、20关。新增岩甲犀(岩·控制·减速)、烈焰狮(火·输出·双目标)、藤蔓灵(草·支援·治疗)、雷鸣豹(电·输出·双目标)、潮汐鲸(水·守护·护盾),每元素两只,覆盖守护/输出/支援/控制四种定位;捕捉池十项等权10%,教学仍固定芽芽,自选箱十个碎片选项。关卡为1-1~1-10「绿野初程」与2-1~2-10「溪谷守望」,每关仍为三波九个敌人、五类敌人;后半段`hpScale`最高4.0、`attackScale`最高2.35,1-5起三路线。首通掉落扩展为1-1、1-3、1-5、1-10、1-15、1-20。
服务端`autoDeploy`改为按配置选人(前排最短射程、后排最长射程),不再硬编码五个伙伴;营地互动与进化的伙伴边界改为配置长度。存档schema升级为9:8→9只把`stages/shards`扩到10、`clearedStages`扩到20,新伙伴未拥有、新关卡未通关,不发伙伴、首通奖或宝箱。客户端兼容schema6~9滚动更新。
配置超过MSVC单字符串字面量上限后,`AIServer/CMakeLists.txt`改为按8000字节分块生成相邻字面量,拼接后与原文件逐字节一致;版本哈希仍取整份JSON的SHA256。
UI按双列/双行重排:伙伴、捕捉、背包材料、营地休息区为2×5卡片,布阵伙伴栏为5×2,选关页改为两个章节标签各十行,宝箱自选为2×5。Arena与肖像扩到十套简模,技能特效与T2冠饰扩到十个槽位;伙伴卡只显示元素/定位/生命/攻击/碎片,完整技能说明放在选中区,避免小卡溢出。
验证:原生4335项断言通过,覆盖10/20配置校验、schema8→9迁移、十伙伴捕捉池与保底、20关顺序解锁与推荐等级通关、六处首通掉落、16并发与日志故障回滚;HTTP隔离进程24并发弹珠/邮件/宝箱重试、重启回执与账户隔离通过。C++/Unity对照227组一致(120胜/107负),包含十伙伴技能与20关矩阵;十六个Prefab字体/九宫格通过。实际EventSystem点击走通两章标签切换、十伙伴/捕捉/宝箱列表与首页入口,检查截图`roster_*.png`。真实开发账号与备份比对仅schema/revision变化,钱包80金币/40糖果/48弹珠、等级与操作日志不变;8080开发服已重建并迁移,未构建Player或部署生产服。
仍待完成:设置面板的音效资源、T2正式外观、正式战场、G3真机性能与微信验收。
### 主界面音乐选用与接入(2026-10-20)
用户确认《微风小镇》作为主界面BGM。84秒OGG通过独立 `MainMenuMusic.prefab` 接入,Prefab和AudioSource由Pipeline持久化制作、Art/Sound收集,运行时经YooAsset异步加载。菜单循环播放,设置中的音乐开关独立暂停/续播,音效关闭不影响已开启的音乐;战斗/弹珠页暂停、返回菜单续播,应用后台暂停。Boot实播验证循环、三轮开关、菜单往返不叠音、弹珠暂停和偏好恢复通过,编译及本轮新增错误检查通过。素材和回执见 `Doc/Design/Sound/MainMenuSoft/ProductionBrief.md` 与 `Doc/ResDesc_Sound.md`;未构建或发布,微信音频解锁待真机验收。
@@ -0,0 +1,50 @@
{
"schemaVersion": 1,
"designId": "A",
"designName": "绿野三岔口",
"styleReference": "Doc/Design/UI/Home/home_camp_source.png",
"overviewReference": "Doc/Design/Scene/Battlefield/Battlefield_Design_A_GreenFork.png",
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"aspectRatio": "1:1",
"quality": "auto",
"ground": {
"file": "ground.png",
"targetTriangles": 1200,
"prompt": "Use case: stylized-concept. Asset type: Unity battlefield ground design sheet. Generate a clean top-down ground-only design sheet for the Green Fork compact three-lane fantasy battlefield. Show a grass and warm sand terrain tile with two subtle raised side routes, one central safe route, readable walkable corridors, and a small central crossing footprint. The sheet must communicate the full walkable boundary and three lane guides while remaining a production reference. Match the Candy main-interface style: friendly hand-painted 3D mobile game art, rounded shapes, warm cream and saturated leaf-green palette, soft toy-like shadows, clean readable edges and inviting casual tone. Pure white surround, no buildings, no trees, no rocks, no props, no characters, no UI, no labels, no letters, no numbers, no watermark.",
"modelReferenceFile": "ground_model_ref.png",
"modelReferencePrompt": "Single continuous raised terrain island, 3/4 isometric view, rounded rectangular grass platform with warm sand central path, three connected lanes and small crossing, thick readable side profile, one solid object on white background; no props, characters, labels, or disconnected subjects."
},
"components": [
{
"type": "tree",
"file": "parts/tree.png",
"targetTriangles": 700,
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one complete stylized low-detail leafy tree prop on a pure white background for the Green Fork battlefield. Friendly rounded canopy, short warm-brown trunk, soft painted gradients and clear silhouette, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style: warm cream and saturated leaf-green palette, rounded toy-like forms, soft hand-painted 3D mobile game shading and inviting casual readability. No text, no labels, no extra objects, no characters, no watermark."
},
{
"type": "rock",
"file": "parts/rock.png",
"targetTriangles": 450,
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one chunky faceted moss-gray rock prop on a pure white background for the Green Fork battlefield. Rounded friendly stylization, warm rim light, simple hand-painted surface, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style with warm cream highlights, saturated leaf-green accents and soft toy-like readability. No text, no labels, no extra objects, no characters, no watermark."
},
{
"type": "bridge",
"file": "parts/bridge.png",
"targetTriangles": 1200,
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small wooden lane bridge prop on a pure white background for the Green Fork battlefield. Friendly rounded planks, warm honey-brown wood, simple side beams, game-ready low-detail silhouette, 3/4 view angled slightly from above, complete object visible, no water and no terrain base. Match the Candy main-interface style with soft rounded edges, warm cream lighting, hand-painted 3D mobile game materials and inviting casual proportions. No text, no labels, no extra objects, no characters, no watermark."
},
{
"type": "sign",
"file": "parts/sign.png",
"targetTriangles": 450,
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one blank wooden camp wayfinding sign prop on a pure white background for the Green Fork battlefield. Rounded cream signboard, warm brown post, simple friendly proportions, deliberately no writing or symbols, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with rounded toy-like forms, warm cream and honey-brown colors, soft hand-painted shading and clean casual readability. No text, no labels, no extra objects, no characters, no watermark."
},
{
"type": "shrub",
"file": "parts/shrub.png",
"targetTriangles": 450,
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small rounded green shrub cluster prop on a pure white background for the Green Fork battlefield. Soft layered leaves, compact readable silhouette, hand-painted mobile game style, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with warm green and cream palette, rounded forms, gentle soft shadows and clear casual readability. No text, no labels, no extra objects, no characters, no watermark."
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:08:58Z",
"ok": true,
"id": "15-85f68c04-e2d4-4c7d-877a-0bcacd6b1fcd",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: Unity battlefield ground design sheet. Generate a clean top-down ground-only design sheet for the Green Fork compact three-lane fantasy battlefield. Show a grass and warm sand terrain tile with two subtle raised side routes, one central safe route, readable walkable corridors, and a small central crossing footprint. The sheet must communicate the full walkable boundary and three lane guides while remaining a production reference. Match the Candy main-interface style: friendly hand-painted 3D mobile game art, rounded shapes, warm cream and saturated leaf-green palette, soft toy-like shadows, clean readable edges and inviting casual tone. Pure white surround, no buildings, no trees, no rocks, no props, no characters, no UI, no labels, no letters, no numbers, no watermark.",
"files": [
{
"url": "https://file3.aitohumanize.com/file/1b8676f57f9b4297ad55936398de11cd.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\ground.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:08:24Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: Unity battlefield ground design sheet. Generate a clean top-down ground-only design sheet for the Green Fork compact three-lane fantasy battlefield. Show a grass and warm sand terrain tile with two subtle raised side routes, one central safe route, readable walkable corridors, and a small central crossing footprint. The sheet must communicate the full walkable boundary and three lane guides while remaining a production reference. Match the Candy main-interface style: friendly hand-painted 3D mobile game art, rounded shapes, warm cream and saturated leaf-green palette, soft toy-like shadows, clean readable edges and inviting casual tone. Pure white surround, no buildings, no trees, no rocks, no props, no characters, no UI, no labels, no letters, no numbers, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\ground.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:08:55Z",
"id": "15-85f68c04-e2d4-4c7d-877a-0bcacd6b1fcd",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:08:58Z",
"ok": true,
"id": "15-85f68c04-e2d4-4c7d-877a-0bcacd6b1fcd",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: Unity battlefield ground design sheet. Generate a clean top-down ground-only design sheet for the Green Fork compact three-lane fantasy battlefield. Show a grass and warm sand terrain tile with two subtle raised side routes, one central safe route, readable walkable corridors, and a small central crossing footprint. The sheet must communicate the full walkable boundary and three lane guides while remaining a production reference. Match the Candy main-interface style: friendly hand-painted 3D mobile game art, rounded shapes, warm cream and saturated leaf-green palette, soft toy-like shadows, clean readable edges and inviting casual tone. Pure white surround, no buildings, no trees, no rocks, no props, no characters, no UI, no labels, no letters, no numbers, no watermark.",
"files": [
{
"url": "https://file3.aitohumanize.com/file/1b8676f57f9b4297ad55936398de11cd.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\ground.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T11:55:26Z",
"ok": true,
"id": "6-a9307612-352b-47cd-9280-6a6cc66b2eb2",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept terrain asset reference for Unity image-to-3D.\nGenerate one single continuous raised terrain island as a clean 3/4 isometric game asset on a pure white background. The object is a compact Candy-style fantasy battlefield ground platform: rounded rectangular grass island with a warm sand-colored central path carved into the surface, three broad connected lane corridors and a small central crossing, shallow soft terrain height differences, thick readable edge profile, no separate objects. Show the whole platform, centered, with a slight camera angle that clearly reveals the top and side thickness so it reads as one solid 3D terrain mesh. Friendly hand-painted 3D mobile game art, warm cream, saturated leaf-green, rounded toy-like forms, soft shadows, clean silhouette, no trees, rocks, bridges, signs, shrubs, characters, buildings, UI, labels, letters, numbers, watermark, or multiple disconnected subjects.",
"files": [
{
"url": "https://file5.aitohumanize.com/file/2699db80e8d140ce98d610d17134c779.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\ground_model_ref.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T11:54:50Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept terrain asset reference for Unity image-to-3D.\nGenerate one single continuous raised terrain island as a clean 3/4 isometric game asset on a pure white background. The object is a compact Candy-style fantasy battlefield ground platform: rounded rectangular grass island with a warm sand-colored central path carved into the surface, three broad connected lane corridors and a small central crossing, shallow soft terrain height differences, thick readable edge profile, no separate objects. Show the whole platform, centered, with a slight camera angle that clearly reveals the top and side thickness so it reads as one solid 3D terrain mesh. Friendly hand-painted 3D mobile game art, warm cream, saturated leaf-green, rounded toy-like forms, soft shadows, clean silhouette, no trees, rocks, bridges, signs, shrubs, characters, buildings, UI, labels, letters, numbers, watermark, or multiple disconnected subjects.",
"output": "Doc/Design/Scene/Battlefield/A/ground_model_ref.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T11:55:23Z",
"id": "6-a9307612-352b-47cd-9280-6a6cc66b2eb2",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T11:55:26Z",
"ok": true,
"id": "6-a9307612-352b-47cd-9280-6a6cc66b2eb2",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept terrain asset reference for Unity image-to-3D.\nGenerate one single continuous raised terrain island as a clean 3/4 isometric game asset on a pure white background. The object is a compact Candy-style fantasy battlefield ground platform: rounded rectangular grass island with a warm sand-colored central path carved into the surface, three broad connected lane corridors and a small central crossing, shallow soft terrain height differences, thick readable edge profile, no separate objects. Show the whole platform, centered, with a slight camera angle that clearly reveals the top and side thickness so it reads as one solid 3D terrain mesh. Friendly hand-painted 3D mobile game art, warm cream, saturated leaf-green, rounded toy-like forms, soft shadows, clean silhouette, no trees, rocks, bridges, signs, shrubs, characters, buildings, UI, labels, letters, numbers, watermark, or multiple disconnected subjects.",
"files": [
{
"url": "https://file5.aitohumanize.com/file/2699db80e8d140ce98d610d17134c779.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\ground_model_ref.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:10:57Z",
"ok": true,
"id": "9-42380954-6fd5-4f0b-8670-7911544840f6",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small wooden lane bridge prop on a pure white background for the Green Fork battlefield. Friendly rounded planks, warm honey-brown wood, simple side beams, game-ready low-detail silhouette, 3/4 view angled slightly from above, complete object visible, no water and no terrain base. Match the Candy main-interface style with soft rounded edges, warm cream lighting, hand-painted 3D mobile game materials and inviting casual proportions. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file1.aitohumanize.com/file/3879618ac16d4429bb1b3cf953224ad4.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\bridge.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:10:20Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small wooden lane bridge prop on a pure white background for the Green Fork battlefield. Friendly rounded planks, warm honey-brown wood, simple side beams, game-ready low-detail silhouette, 3/4 view angled slightly from above, complete object visible, no water and no terrain base. Match the Candy main-interface style with soft rounded edges, warm cream lighting, hand-painted 3D mobile game materials and inviting casual proportions. No text, no labels, no extra objects, no characters, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\bridge.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:10:56Z",
"id": "9-42380954-6fd5-4f0b-8670-7911544840f6",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:10:57Z",
"ok": true,
"id": "9-42380954-6fd5-4f0b-8670-7911544840f6",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small wooden lane bridge prop on a pure white background for the Green Fork battlefield. Friendly rounded planks, warm honey-brown wood, simple side beams, game-ready low-detail silhouette, 3/4 view angled slightly from above, complete object visible, no water and no terrain base. Match the Candy main-interface style with soft rounded edges, warm cream lighting, hand-painted 3D mobile game materials and inviting casual proportions. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file1.aitohumanize.com/file/3879618ac16d4429bb1b3cf953224ad4.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\bridge.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:10:20Z",
"ok": true,
"id": "1-79a0ee04-73f7-43ff-afb1-f742fd457a88",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one chunky faceted moss-gray rock prop on a pure white background for the Green Fork battlefield. Rounded friendly stylization, warm rim light, simple hand-painted surface, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style with warm cream highlights, saturated leaf-green accents and soft toy-like readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file6.aitohumanize.com/file/180224b9dbd2484a8c970095e9c5ec50.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\rock.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:09:30Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one chunky faceted moss-gray rock prop on a pure white background for the Green Fork battlefield. Rounded friendly stylization, warm rim light, simple hand-painted surface, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style with warm cream highlights, saturated leaf-green accents and soft toy-like readability. No text, no labels, no extra objects, no characters, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\rock.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:10:18Z",
"id": "1-79a0ee04-73f7-43ff-afb1-f742fd457a88",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:10:20Z",
"ok": true,
"id": "1-79a0ee04-73f7-43ff-afb1-f742fd457a88",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one chunky faceted moss-gray rock prop on a pure white background for the Green Fork battlefield. Rounded friendly stylization, warm rim light, simple hand-painted surface, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style with warm cream highlights, saturated leaf-green accents and soft toy-like readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file6.aitohumanize.com/file/180224b9dbd2484a8c970095e9c5ec50.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\rock.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:12:13Z",
"ok": true,
"id": "2-ddcdb1de-c128-4839-afd1-b8e2c944dcf2",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small rounded green shrub cluster prop on a pure white background for the Green Fork battlefield. Soft layered leaves, compact readable silhouette, hand-painted mobile game style, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with warm green and cream palette, rounded forms, gentle soft shadows and clear casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file8.aitohumanize.com/file/f0b2ef5c2f714956851fa065d1afa2d1.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\shrub.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:11:29Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small rounded green shrub cluster prop on a pure white background for the Green Fork battlefield. Soft layered leaves, compact readable silhouette, hand-painted mobile game style, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with warm green and cream palette, rounded forms, gentle soft shadows and clear casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\shrub.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:12:11Z",
"id": "2-ddcdb1de-c128-4839-afd1-b8e2c944dcf2",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:12:13Z",
"ok": true,
"id": "2-ddcdb1de-c128-4839-afd1-b8e2c944dcf2",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one small rounded green shrub cluster prop on a pure white background for the Green Fork battlefield. Soft layered leaves, compact readable silhouette, hand-painted mobile game style, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with warm green and cream palette, rounded forms, gentle soft shadows and clear casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file8.aitohumanize.com/file/f0b2ef5c2f714956851fa065d1afa2d1.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\shrub.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:11:29Z",
"ok": true,
"id": "16-9ccb323f-86cc-4b4d-91f0-8a8c7515dee8",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one blank wooden camp wayfinding sign prop on a pure white background for the Green Fork battlefield. Rounded cream signboard, warm brown post, simple friendly proportions, deliberately no writing or symbols, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with rounded toy-like forms, warm cream and honey-brown colors, soft hand-painted shading and clean casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file7.aitohumanize.com/file/0d1bc3d0c16548f38be80972e55e2d00.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\sign.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:10:58Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one blank wooden camp wayfinding sign prop on a pure white background for the Green Fork battlefield. Rounded cream signboard, warm brown post, simple friendly proportions, deliberately no writing or symbols, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with rounded toy-like forms, warm cream and honey-brown colors, soft hand-painted shading and clean casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\sign.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:11:27Z",
"id": "16-9ccb323f-86cc-4b4d-91f0-8a8c7515dee8",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:11:29Z",
"ok": true,
"id": "16-9ccb323f-86cc-4b4d-91f0-8a8c7515dee8",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one blank wooden camp wayfinding sign prop on a pure white background for the Green Fork battlefield. Rounded cream signboard, warm brown post, simple friendly proportions, deliberately no writing or symbols, 3/4 view, centered, complete object visible, no base or ground shadow. Match the Candy main-interface style with rounded toy-like forms, warm cream and honey-brown colors, soft hand-painted shading and clean casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file7.aitohumanize.com/file/0d1bc3d0c16548f38be80972e55e2d00.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\sign.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T08:09:29Z",
"ok": true,
"id": "2-5a4f92db-84c8-4df7-b7db-0ef455950885",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one complete stylized low-detail leafy tree prop on a pure white background for the Green Fork battlefield. Friendly rounded canopy, short warm-brown trunk, soft painted gradients and clear silhouette, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style: warm cream and saturated leaf-green palette, rounded toy-like forms, soft hand-painted 3D mobile game shading and inviting casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file7.aitohumanize.com/file/8f42d68ad6254f62a927dc45e5b7b6d8.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\tree.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T08:08:58Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one complete stylized low-detail leafy tree prop on a pure white background for the Green Fork battlefield. Friendly rounded canopy, short warm-brown trunk, soft painted gradients and clear silhouette, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style: warm cream and saturated leaf-green palette, rounded toy-like forms, soft hand-painted 3D mobile game shading and inviting casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\tree.png",
"aspect_ratio": "1:1",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T08:09:28Z",
"id": "2-5a4f92db-84c8-4df7-b7db-0ef455950885",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T08:09:29Z",
"ok": true,
"id": "2-5a4f92db-84c8-4df7-b7db-0ef455950885",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: reusable Unity battlefield prop design sheet. Generate one complete stylized low-detail leafy tree prop on a pure white background for the Green Fork battlefield. Friendly rounded canopy, short warm-brown trunk, soft painted gradients and clear silhouette, 3/4 view, centered, full object visible, no base or ground shadow. Match the Candy main-interface style: warm cream and saturated leaf-green palette, rounded toy-like forms, soft hand-painted 3D mobile game shading and inviting casual readability. No text, no labels, no extra objects, no characters, no watermark.",
"files": [
{
"url": "https://file7.aitohumanize.com/file/8f42d68ad6254f62a927dc45e5b7b6d8.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\A\\parts\\tree.png"
}
]
}
]
}
@@ -0,0 +1,93 @@
{
"schemaVersion": 1,
"designId": "B",
"designName": "Stream Bridges",
"styleReference": "Doc/Design/UI/Home/home_camp_source.png",
"overviewReference": "Doc/Design/Scene/Battlefield/Battlefield_Design_B_StreamBridges.png",
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"aspectRatio": "1:1",
"quality": "auto",
"ground": {
"file": "ground.png",
"targetTriangles": 1200,
"prompt": "Unity battlefield ground design sheet for Stream Bridges: two grassy banks and one continuous shallow blue stream through the middle, three connected bridge footprints, readable three-lane walkable routes, pure white surround, no props, no characters, no text. Friendly warm Candy-style hand-painted mobile game art.",
"placements": []
},
"components": [
{
"type": "tree",
"file": "parts/tree.png",
"targetTriangles": 700,
"prompt": "One reusable rounded leafy tree prop on a pure white background, warm Candy-style low-detail 3/4 view, no ground, no text.",
"placements": [
{ "name": "tree_left_a", "position": { "x": -8.0, "y": 0.0, "z": 8.0 }, "rotation": { "x": 0.0, "y": 15.0, "z": 0.0 }, "scale": { "x": 2.2, "y": 2.2, "z": 2.2 } },
{ "name": "tree_right_a", "position": { "x": 8.0, "y": 0.0, "z": 8.0 }, "rotation": { "x": 0.0, "y": -15.0, "z": 0.0 }, "scale": { "x": 2.2, "y": 2.2, "z": 2.2 } },
{ "name": "tree_left_b", "position": { "x": -8.0, "y": 0.0, "z": -7.0 }, "rotation": { "x": 0.0, "y": 10.0, "z": 0.0 }, "scale": { "x": 2.0, "y": 2.0, "z": 2.0 } },
{ "name": "tree_right_b", "position": { "x": 8.0, "y": 0.0, "z": -7.0 }, "rotation": { "x": 0.0, "y": -10.0, "z": 0.0 }, "scale": { "x": 2.0, "y": 2.0, "z": 2.0 } }
]
},
{
"type": "rock",
"file": "parts/rock.png",
"targetTriangles": 450,
"prompt": "One chunky friendly wetland rock prop on a pure white background, moss-gray hand-painted low-detail 3/4 view, no ground, no text.",
"placements": [
{ "name": "rock_left", "position": { "x": -4.7, "y": 0.0, "z": 4.0 }, "rotation": { "x": 0.0, "y": 20.0, "z": 0.0 }, "scale": { "x": 1.4, "y": 1.4, "z": 1.4 } },
{ "name": "rock_right", "position": { "x": 4.8, "y": 0.0, "z": -2.5 }, "rotation": { "x": 0.0, "y": -15.0, "z": 0.0 }, "scale": { "x": 1.2, "y": 1.2, "z": 1.2 } }
]
},
{
"type": "bridge",
"file": "parts/bridge.png",
"targetTriangles": 1200,
"prompt": "One small wooden bridge prop on a pure white background, warm rounded planks, low-detail 3/4 view, no water, no ground, no text.",
"placements": [
{ "name": "bridge_north", "position": { "x": 0.0, "y": 0.0, "z": 7.0 }, "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 } },
{ "name": "bridge_mid", "position": { "x": 0.0, "y": 0.0, "z": 0.0 }, "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 } },
{ "name": "bridge_south", "position": { "x": 0.0, "y": 0.0, "z": -7.0 }, "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 } }
]
},
{
"type": "water",
"reuseExisting": false,
"file": "parts/water.png",
"targetTriangles": 900,
"prompt": "One continuous shallow blue stream terrain piece for a Unity battlefield, stylized low-detail water surface with readable bank edge, pure white background, no bridge, no characters, no text.",
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
},
{
"type": "reeds",
"reuseExisting": false,
"file": "parts/reeds.png",
"targetTriangles": 350,
"prompt": "One compact cluster of friendly wetland reeds on a pure white background, low-detail green blades, 3/4 view, no ground, no text.",
"placements": [
{ "name": "reeds_left", "position": { "x": -3.8, "y": 0.0, "z": 7.8 }, "rotation": { "x": 0.0, "y": 15.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 } },
{ "name": "reeds_right", "position": { "x": 3.8, "y": 0.0, "z": -5.0 }, "rotation": { "x": 0.0, "y": -10.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 } }
]
},
{
"type": "gate",
"reuseExisting": false,
"file": "parts/gate.png",
"targetTriangles": 900,
"prompt": "One small water gate landmark prop on a pure white background, rounded warm wood and stone, stylized low-detail 3/4 view, no text.",
"position": { "x": -6.2, "y": 0.0, "z": 2.8 },
"rotation": { "x": 0.0, "y": 90.0, "z": 0.0 },
"scale": { "x": 1.4, "y": 1.4, "z": 1.4 }
},
{
"type": "lamp",
"reuseExisting": false,
"file": "parts/lamp.png",
"targetTriangles": 500,
"prompt": "One compact beacon lamp tower prop on a pure white background, warm wood post and soft yellow beacon, rounded low-detail 3/4 view, no text.",
"position": { "x": 6.3, "y": 0.0, "z": -3.2 },
"rotation": { "x": 0.0, "y": -90.0, "z": 0.0 },
"scale": { "x": 1.2, "y": 1.2, "z": 1.2 }
}
]
}
@@ -0,0 +1,104 @@
# 战场场景生成流程
这套流程把“想法、分件、模型、Unity 场景”分成四个有门槛的阶段。当前先完成设计图选择,未选择方案时不会调用微信网页图生 3D,也不会拼装最终 Prefab。
## 1. 设计图阶段:三选一
三张方案图必须通过项目内 `Tools/gpt_image_generate.py` 调用 `gpt-image-2.5` 生成。它们是 1024×1024 的俯视概念图,供确认路线、地表和组件类型,不作为运行时贴图。旧版 PIL 绘制草图只能作为历史预览,不能作为设计门输入。
| 方案 | 图片 | 重点 | 风险 |
| --- | --- | --- | --- |
| A 绿野三岔口 | `Battlefield_Design_A_GreenFork.png` | 中央安全线、左右高差支路、教学读路清晰 | 地标辨识度较弱 |
| B 溪谷浮桥 | `Battlefield_Design_B_StreamBridges.png` | 水面横切、三座浮桥、元素主题明确 | 桥和水面碰撞验证更复杂 |
| C 旧城花园 | `Battlefield_Design_C_OldGarden.png` | 残墙拱门、中央花园、首领关地标 | 墙体遮挡和批次更复杂 |
生成命令:
```powershell
# 先在当前 PowerShell 配置 GRSAI_API_KEY 或 GPT_IMAGE_API_KEY
python Tools/generate_battlefield_designs.py --design all
```
提示词和模型记录在 `Doc/Design/Scene/Battlefield/battlefield_design_prompts.json`,每张图旁边会写入 `*_gpt_image_status.json`。当前已选择第 1 张方案,即 A;脚本在生成 A 后会把 `selectedDesign` 登记为 `A`,再进入下一阶段。
## 2. 分件设计图阶段
从选中的总览图归纳组件类别。A 方案先使用树、岩石、桥、路牌、灌木 5 类;地表单独设计、单独图生 3D、单独减面、单独 Prefab,不计入装饰组件上限。组件图继续调用 `gpt-image-2.5`,以提示词描述主界面 Candy 的造型、色彩和软阴影;默认不上传项目内部参考图。
组件拆分前先扫描 `AIClient/Assets/Bundles/`。若组件类型已有同名 Unity Prefab,则登记 `generationStatus: reused` 并跳过该组件新设计图;只有资源库没有的类型才生成新的组件设计图。默认执行 `python Tools/generate_battlefield_components.py --design <ID>`,需要重做已有组件时显式增加 `--force-new-components`。
推荐清单:树、岩石、桥、路牌、灌木、水面、芦苇、残墙、拱门、花坛、喷泉、路灯、长椅、栅门。选定方案可以删减,但不能增加未登记的新类别。每类分件图放在:
```text
Doc/Design/Scene/Battlefield/<方案ID>/parts/<type>.png
```
分件图要求:纯白背景、单件、3/4 视角、完整入画、无文字、无地面底座;地表图单独放在 `<方案ID>/ground.png`,画出俯视边界、坡度、可行走区域和三条路线。
生成 A 方案组件图:
```powershell
python Tools/generate_battlefield_components.py --design A
```
提示词记录在 `Doc/Design/Scene/Battlefield/A/battlefield_component_prompts.json`。生成完成后先在窗口审核 `A/ground.png` 与 `A/parts/*.png`,审核通过再进入混元 3D 图生模型阶段。
当前进度:树、岩石、桥、路牌、灌木 5 类与独立地表均已完成混元 50k GLB、纹理校验、Blender 减面与 XPbr 烘焙。Unity 2022.3.62f3 已通过 Pipeline 生成组件 Prefab、`GreenfieldGround.prefab` 和 `Battlefield_Greenfield.prefab`。烘焙地表原是朝向 Z 的薄板,场景实例绕 X 轴 -90 度放平,顶面贴在 y=0,并覆盖三条路线。`AttachGreenfield.Build` 已把该场景嵌进开战预制体 `PrototypeArena`,原来的方块地面已关闭。按现有战斗相机(正交 9.5,看向路线中段)核对:三条路线落在土路上。桥模型保留,场景中不再摆放。部署标记和青色防线仍在路面上。Greenfield 整棵子树必须在第 30 层,否则开战相机看不到地表。Play Mode 隔离服已验证开战加载无桥绿野,截图 `Assets/Screenshots/battlefield_play_battle.png`。
## 3. 微信网页图生 3D 与减面
分件图确认后,逐类执行项目现有的腾讯混元网页流程。每个模型都保留原始任务目录和日志,不能直接把高模放入 Unity:
```powershell
# 1) 微信扫码登录(首次或凭证过期时)
python Tools/hunyuan_3d_generate.py --login
# 2) 图生 GLB 高模(每类一份;不超过 15 类 + 地表)
python Tools/hunyuan_3d_generate.py `
--image Doc/Design/Scene/Battlefield/<方案ID>/parts/tree.png `
--faces 50k `
--output Tools/output/battlefield/<方案ID>/tree
# 3) 减面、重展 UV、烘焙、XPbr 收尾
python Tools/model_tools/model_lowpoly_bake.py `
Tools/output/battlefield/<方案ID>/tree/generated.glb `
-o Tools/output/battlefield/<方案ID>/tree_game `
--tris 700 --size 1024
```
`model_lowpoly_bake.py` 的具体目标面数按组件登记:地表 800~1500、地标 1200~2000、普通装饰 300~1000、重复小件 300~600;命令中的 `--tris` 每次填写一个确定整数。模型验收必须通过 GLB 文件头、内嵌贴图解码、低模三角面数、UV、包围盒和坐标检查。
最终 Unity 输入目录:
```text
AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/<方案ID>/
Ground/<ground>.fbx + XPbr 贴图 + 材质
Components/<type>/<type>.fbx + XPbr 贴图 + 材质
```
FBX 统一为 Y-up、原点在底面中点、局部 -Z 为正面。摆放时用 -Z 朝向目标;地表使用非凸 MeshCollider,其他组件不添加运行时生成的临时网格。
## 4. Unity Prefab 拼装
模型导入和 Prefab 操作只能通过 Unity Pipeline。`AIClient/AgentScripts/BuildBattlefieldScene.cs` 会:
1. 读取 manifest,拒绝空 `selectedDesign`、重复类型、超过 15 类或缺少独立地表。
2. 检查 Ground 与 Components 的 Prefab、材质和碰撞体。
3. 按方案布局生成根节点、地表、路线标记、出生点、终点和可选装饰实例。
4. 保存 `Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield.prefab`,并接入 Art/UI 资源收集。
场景根节点固定包含:`Ground`、`Routes/Lane0..2`、`Gameplay/SpawnPoints`、`Gameplay/GoalPoints`、`Decorations`、`Lighting`。战斗代码只读取路线与标记,不在运行时生成业务场景骨架。
## 验收与交付门槛
- 设计门:三图中选一,确认路线、视线、地标和组件清单。
- 分件门:所有组件图为纯白单件图;类别数 ≤15;地表独立。
- 模型门:GLB 检查、低模面数和坐标约束通过;每个模型有来源日志。
- Unity 门:Prefab 由 Pipeline 保存,地表碰撞可用,三路线出生/终点可定位,Art Bundle 收集成功。
- 性能门:首屏视锥内控制 Draw Call、贴图和实例数,真机再按 G3 预算验收。
选择结果、分件图、模型路径、低模面数和 Prefab 路径都写入 manifest;任何一步没有登记,流程不算完成。
### Unity Pipeline 入口(编辑器可用后)
组件与独立地表统一执行:unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildBattlefieldAssets.cs --entry BuildBattlefieldAssets.BuildAll。其中 BuildGround 只在 Assets/Bundles/Scenes/Prototype/Battlefield/A/Ground/ground.fbx 存在时生成 GreenfieldGround.prefab,并启用可读网格与非凸 MeshCollider;随后执行 BuildBattlefieldScene.Build 拼装最终场景。
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

@@ -0,0 +1,53 @@
{
"latest": {
"event": "succeeded",
"ts": "2026-10-18T09:36:01Z",
"ok": true,
"id": "6-209b409a-17f2-4b07-b944-960fac4ec20e",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Green Fork. Show a broad central safe route, two parallel side routes with slight height changes, a small wooden crossing at the center, a camp sign landmark, grass terrain and scattered trees and rocks. Keep the three routes visually separated and leave clear walkable corridors for characters. Friendly colorful hand-painted 3D game concept style, soft daylight, warm green and sand palette, orthographic top-down composition, no perspective distortion. This is a design reference board, not a screenshot: no UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo.",
"files": [
{
"url": "https://file8.aitohumanize.com/file/f9265178ad7f4cf5b570b93c2ed5cb40.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\Battlefield_Design_A_GreenFork.png"
}
]
},
"history": [
{
"event": "started",
"ts": "2026-10-18T09:34:34Z",
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Green Fork. Show a broad central safe route, two parallel side routes with slight height changes, a small wooden crossing at the center, a camp sign landmark, grass terrain and scattered trees and rocks. Keep the three routes visually separated and leave clear walkable corridors for characters. Friendly colorful hand-painted 3D game concept style, soft daylight, warm green and sand palette, orthographic top-down composition, no perspective distortion. This is a design reference board, not a screenshot: no UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo.",
"output": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\Battlefield_Design_A_GreenFork.png",
"aspect_ratio": "1024x1024",
"image_count": 0,
"reply_type": "json"
},
{
"event": "submitted",
"ts": "2026-10-18T09:35:58Z",
"id": "6-209b409a-17f2-4b07-b944-960fac4ec20e",
"status": "succeeded",
"progress": 100
},
{
"event": "succeeded",
"ts": "2026-10-18T09:36:01Z",
"ok": true,
"id": "6-209b409a-17f2-4b07-b944-960fac4ec20e",
"status": "succeeded",
"progress": 100,
"model": "gpt-image-2.5",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Green Fork. Show a broad central safe route, two parallel side routes with slight height changes, a small wooden crossing at the center, a camp sign landmark, grass terrain and scattered trees and rocks. Keep the three routes visually separated and leave clear walkable corridors for characters. Friendly colorful hand-painted 3D game concept style, soft daylight, warm green and sand palette, orthographic top-down composition, no perspective distortion. This is a design reference board, not a screenshot: no UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo.",
"files": [
{
"url": "https://file8.aitohumanize.com/file/f9265178ad7f4cf5b570b93c2ed5cb40.png",
"path": "D:\\UD\\AI\\AIGame\\Doc\\Design\\Scene\\Battlefield\\Battlefield_Design_A_GreenFork.png"
}
]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

@@ -0,0 +1,27 @@
{
"schemaVersion": 1,
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"aspectRatio": "1024x1024",
"quality": "auto",
"designs": [
{
"id": "A",
"name": "绿野三岔口",
"file": "Battlefield_Design_A_GreenFork.png",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Green Fork. Show a broad central safe route, two parallel side routes with slight height changes, a small wooden crossing at the center, a camp sign landmark, grass terrain and scattered trees and rocks. Keep the three routes visually separated and leave clear walkable corridors for characters. Friendly colorful hand-painted 3D game concept style, soft daylight, warm green and sand palette, orthographic top-down composition, no perspective distortion. This is a design reference board, not a screenshot: no UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo."
},
{
"id": "B",
"name": "溪谷浮桥",
"file": "Battlefield_Design_B_StreamBridges.png",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Stream Bridges. A blue stream crosses the middle of the map from side to side, and three distinct wooden bridges connect the three lanes. Add grassy banks, a water gate landmark, a small beacon tower, wetland rocks and reeds. Keep each lane and every bridge easy to read for tactical planning, with generous walkable space. Friendly colorful hand-painted 3D game concept style, soft daylight, orthographic top-down composition, blue water and warm wood accents. No UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo."
},
{
"id": "C",
"name": "旧城花园",
"file": "Battlefield_Design_C_OldGarden.png",
"prompt": "Use case: stylized-concept. Asset type: mobile game battlefield level design board. Generate a clean, readable top-down concept art of a compact three-lane fantasy battlefield called Old Garden. Show weathered city walls and gate arches dividing the three routes, a central circular garden plaza with a small fountain, a clock tower landmark, stone paving, flower beds, trees and scattered masonry. Make the central plaza a defensive focal point while preserving clear walkable lanes and sightlines. Friendly colorful hand-painted 3D game concept style, soft late-afternoon daylight, orthographic top-down composition, muted stone and warm garden colors. No UI, no labels, no letters, no numbers, no watermark, no people, no text, no logo."
}
]
}
@@ -0,0 +1,196 @@
{
"schemaVersion": 1,
"sceneId": "Battlefield_Greenfield",
"selectedDesign": "A",
"requestedDesign": "A",
"designOptions": [
{
"id": "A",
"name": "?????",
"image": "Doc/Design/Scene/Battlefield/Battlefield_Design_A_GreenFork.png",
"summary": "?????????????????????",
"generation": {
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"promptFile": "Doc/Design/Scene/Battlefield/battlefield_design_prompts.json",
"status": "generated",
"output": "Doc/Design/Scene/Battlefield/Battlefield_Design_A_GreenFork.png",
"statusFile": "Doc/Design/Scene/Battlefield/Battlefield_Design_A_GreenFork_gpt_image_status.json",
"generatedAtUtc": "2026-10-18T09:36:01Z"
}
},
{
"id": "B",
"name": "????",
"image": "Doc/Design/Scene/Battlefield/Battlefield_Design_B_StreamBridges.png",
"summary": "??????????????????",
"generation": {
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"promptFile": "Doc/Design/Scene/Battlefield/battlefield_design_prompts.json",
"status": "pending_api_key"
}
},
{
"id": "C",
"name": "????",
"image": "Doc/Design/Scene/Battlefield/Battlefield_Design_C_OldGarden.png",
"summary": "???????????????????????",
"generation": {
"tool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"promptFile": "Doc/Design/Scene/Battlefield/battlefield_design_prompts.json",
"status": "pending_api_key"
}
}
],
"ground": {
"type": "ground",
"designImage": "Doc/Design/Scene/Battlefield/A/ground.png",
"highPoly": "Tools/output/battlefield/A/ground_model_ref/ground_model_ref.glb",
"gamePrefab": "Assets/Bundles/Scenes/Prototype/Battlefield/GreenfieldGround.prefab",
"targetTriangles": 1200,
"requirements": "Y-up??????????? -Z ?????? MeshCollider?Read/Write ???",
"designGenerationStatus": "generated",
"designStatusFile": "Doc/Design/Scene/Battlefield/A/ground_gpt_image_status.json",
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/ground_model_ref_hunyuan_status.json",
"modelReferenceImage": "Doc/Design/Scene/Battlefield/A/ground_model_ref.png",
"modelReferenceStatusFile": "Doc/Design/Scene/Battlefield/A/ground_model_ref_gpt_image_status.json",
"modelInputNote": "布局审核图 ground.png保留;混元图生3D使用单一连续地形参考图 ground_model_ref.png,避免网页端主体不明确。",
"gameFbx": "Tools/output/battlefield/A/ground_game/ground_model_ref_xpbr/ground_model_ref.fbx",
"unityFbx": "AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/A/Ground/ground.fbx",
"modelTriangles": 1200,
"modelFlow": "Hunyuan 3D 50k -> Blender 5.0 lowpoly 1200 tris -> XPbr",
"sourceReference": "Doc/Design/Scene/Battlefield/A/ground_model_ref.png"
},
"componentTypeLimit": 15,
"allowedComponentTypes": [
"tree",
"rock",
"bridge",
"sign",
"shrub",
"water",
"reeds",
"ruin_wall",
"arch",
"flower_patch",
"fountain",
"lamp",
"bench",
"gate"
],
"components": [
{
"type": "tree",
"designImage": "Doc/Design/Scene/Battlefield/A/parts/tree.png",
"targetTriangles": 700,
"generationStatus": "generated",
"statusFile": "Doc/Design/Scene/Battlefield/A/parts/tree_gpt_image_status.json",
"highPoly": "Tools/output/battlefield/A/tree/tree.glb",
"gameFbx": "Tools/output/battlefield/A/tree_game/tree_xpbr/tree.fbx",
"modelTriangles": 700,
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/tree_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/tree/tree.prefab",
"label": "tree",
"position": { "x": -8.0, "y": 0.0, "z": 9.0 },
"rotation": { "x": 0.0, "y": 15.0, "z": 0.0 },
"scale": { "x": 2.2, "y": 2.2, "z": 2.2 }
},
{
"type": "rock",
"designImage": "Doc/Design/Scene/Battlefield/A/parts/rock.png",
"targetTriangles": 450,
"generationStatus": "generated",
"statusFile": "Doc/Design/Scene/Battlefield/A/parts/rock_gpt_image_status.json",
"highPoly": "Tools/output/battlefield/A/rock/rock.glb",
"gameFbx": "Tools/output/battlefield/A/rock_game/rock_xpbr/rock.fbx",
"modelTriangles": 450,
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/rock_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/rock/rock.prefab",
"label": "rock",
"position": { "x": 7.2, "y": 0.0, "z": 5.5 },
"rotation": { "x": 0.0, "y": 20.0, "z": 0.0 },
"scale": { "x": 1.6, "y": 1.6, "z": 1.6 }
},
{
"type": "bridge",
"designImage": "Doc/Design/Scene/Battlefield/A/parts/bridge.png",
"targetTriangles": 1200,
"generationStatus": "generated",
"statusFile": "Doc/Design/Scene/Battlefield/A/parts/bridge_gpt_image_status.json",
"highPoly": "Tools/output/battlefield/A/bridge/bridge.glb",
"gameFbx": "Tools/output/battlefield/A/bridge_game/bridge_xpbr/bridge.fbx",
"modelTriangles": 1200,
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/bridge_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/bridge/bridge.prefab",
"label": "bridge",
"placeInScene": false
},
{
"type": "sign",
"designImage": "Doc/Design/Scene/Battlefield/A/parts/sign.png",
"targetTriangles": 450,
"generationStatus": "generated",
"statusFile": "Doc/Design/Scene/Battlefield/A/parts/sign_gpt_image_status.json",
"highPoly": "Tools/output/battlefield/A/sign/sign.glb",
"gameFbx": "Tools/output/battlefield/A/sign_game/sign_xpbr/sign.fbx",
"modelTriangles": 448,
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/sign_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/sign/sign.prefab",
"label": "sign",
"position": { "x": -6.2, "y": 0.0, "z": -2.2 },
"rotation": { "x": 0.0, "y": 180.0, "z": 0.0 },
"scale": { "x": 1.6, "y": 1.6, "z": 1.6 }
},
{
"type": "shrub",
"designImage": "Doc/Design/Scene/Battlefield/A/parts/shrub.png",
"targetTriangles": 450,
"generationStatus": "generated",
"statusFile": "Doc/Design/Scene/Battlefield/A/parts/shrub_gpt_image_status.json",
"highPoly": "Tools/output/battlefield/A/shrub/shrub.glb",
"gameFbx": "Tools/output/battlefield/A/shrub_game/shrub_xpbr/shrub.fbx",
"modelTriangles": 422,
"modelGenerationStatus": "baked",
"modelStatusFile": "Tools/output/battlefield/A/shrub_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/shrub/shrub.prefab",
"label": "shrub",
"position": { "x": -7.2, "y": 0.0, "z": 0.5 },
"rotation": { "x": 0.0, "y": -15.0, "z": 0.0 },
"scale": { "x": 1.3, "y": 1.3, "z": 1.3 }
}
],
"assembly": {
"outputPrefab": "Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield.prefab",
"materialsFolder": "Assets/Bundles/Scenes/Prototype/Battlefield/Materials",
"componentFolder": "Assets/Bundles/Scenes/Prototype/Battlefield/Components",
"markerFolder": "Assets/Bundles/Scenes/Prototype/Battlefield/Markers"
},
"notes": "A 方案地表与 5 类组件已由 Unity Pipeline 生成 Prefab 并拼入 Battlefield_Greenfield,再嵌进开战预制体 PrototypeArena 的 Greenfield 子节点。烘焙地表是朝向 Z 的薄板,场景实例绕 X 轴 -90 度放平,顶面贴 y=0,覆盖三条路线。桥的模型已做好,但场景里不摆桥;路牌在营地侧且 -Z 朝向出生点,树、岩石、灌木放在路线外侧。Greenfield 整棵子树为第 30 层,Play Mode 已验证开战可见。",
"designGeneration": {
"tool": "Tools/generate_battlefield_designs.py",
"imageTool": "Tools/gpt_image_generate.py",
"model": "gpt-image-2.5",
"promptFile": "Doc/Design/Scene/Battlefield/battlefield_design_prompts.json",
"status": "generated",
"generatedAtUtc": "2026-10-18T09:36:01Z",
"observedSize": "1254x1254",
"note": "A ??????????"
},
"componentDesignGeneration": {
"tool": "Tools/generate_battlefield_components.py",
"model": "gpt-image-2.5",
"styleReference": "prompt-described",
"overviewReference": "prompt-described",
"referenceUpload": "none",
"status": "generated",
"generatedAtUtc": "2026-10-18T08:12:13Z",
"observedSize": "1254x1254"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+74
View File
@@ -0,0 +1,74 @@
# Unity 关卡场景四阶段生成流程
每个新关卡都按“设计选择 → 组件拆分 → 3D 资产 → Unity 场景”推进。每一阶段都有输入、输出和状态登记;没有完成上一阶段时,不进入下一阶段。
## 1. 生成设计图并选择方案
根据当前关卡要求维护 `battlefield_design_prompts.json`,用项目图像生成工具生成多张总览方案。总览图只表达路线、地表和组件类别,不直接作为 Unity 贴图。
```powershell
python Tools/generate_battlefield_designs.py --design all
python Tools/battlefield_scene_pipeline.py status
python Tools/battlefield_scene_pipeline.py select A
```
生成回执和选择结果写入 `battlefield_scene_manifest.json`。人工在 `Doc/Design/Scene/Battlefield/` 查看方案后,才执行 `select`。
## 2. 按方案拆分组件设计图
选中的总览图拆成独立地表图和组件图,输出到 `Doc/Design/Scene/Battlefield/<design>/`。组件类型先与资源库匹配:如果 `AIClient/Assets/Bundles/` 已存在同名 Unity Prefab,则登记为 `generationStatus: reused`,跳过该组件的新设计图;没有现成 Prefab 的组件才调用图像生成。
```powershell
python Tools/generate_battlefield_components.py --design A
```
默认复用已有组件。需要刻意重做某个组件时使用:
```powershell
python Tools/generate_battlefield_components.py --design A --force-new-components
```
组件拆分完成后先审核地表图和组件图,再进入 3D 阶段。组件复用路径、生成状态和设计图路径都写回 manifest。
## 3. 根据新设计图生成 3D 模型
只有新组件才执行图生 3D;复用组件直接使用 manifest 中的 `existingPrefab`/`prefab`。新组件按统一链路生成:
```text
组件设计图
→ Hunyuan 3D 50k GLB
→ Blender 减面、重拓扑、UV 与 XPbr 烘焙
→ AIClient/Assets/Bundles/Scenes/.../<type>/<type>.fbx + 贴图 + Prefab
```
每个组件的模型路径、目标面数、烘焙回执和 Prefab 路径必须登记到 manifest。FBX 遵循 Y-up、底面中心原点、局部 `-Z` 正面;导入和 Prefab 制作只能走 Unity Pipeline。
## 4. 生成 Unity 场景并交给人工审核
场景装配脚本读取 manifest,把独立地表、路线、出生点/终点和组件 Prefab 保存为总 Prefab。审核场景再从总 Prefab 生成持久化 `.unity`,加入固定 `ReviewCamera`、`ReviewKeyLight` 和 `ReviewLabel`。
```powershell
$project = 'D:/UD/AI/AIGame/AIClient'
unity command --project-path $project run_script --file AgentScripts/BuildBattlefieldScene.cs --entry BuildBattlefieldScene.Build
unity command --project-path $project run_script --file AgentScripts/BuildBattlefieldScene.cs --entry BuildBattlefieldScene.VerifyBuilt
unity command --project-path $project run_script --file AgentScripts/BuildSceneReview.cs --entry BuildSceneReview.BuildAndOpenReview
```
审核输入由 `scene_review_manifest.json` 指定:
- `sourcePrefab`:第 4 阶段装配出的总 Prefab。
- `outputScene`:审核场景的 `.unity` 路径。
- `cameraPosition`、`cameraTarget`:固定审核机位,便于不同版本比较。
- `reportPath`:生成结果和审核步骤记录。
人工审核 Hierarchy、Scene View 和 Game View,重点检查组件穿插、悬空、朝向、地表碰撞和路线可读性。审核场景只用于编辑器审阅,不加入正式 Build Settings,也不由运行时代码创建。
## 一键编排与状态门
四阶段可以由编排器按顺序执行。它默认复用已有组件,只打印第 3 阶段的模型任务,不会在模型未登记前调用 Unity:
```powershell
python Tools/run_battlefield_scene_pipeline.py --design A --dry-run
```
确认设计和组件图后,去掉 `--dry-run`;需要重做设计或组件时分别使用 `--force-design`、`--force-new-components`。Unity Editor 和 Pipeline 运行后,再加 `--run-unity` 执行第 4 阶段。
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

@@ -0,0 +1,11 @@
{
"schemaVersion": 1,
"sceneId": "Battlefield_Greenfield",
"sourcePrefab": "Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield.prefab",
"outputScene": "Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield_Review.unity",
"reportPath": "Tools/output/scene_review/Battlefield_Greenfield/review_report.json",
"label": "Battlefield Greenfield - Human Review",
"cameraPosition": { "x": 0.0, "y": 16.0, "z": -25.0 },
"cameraTarget": { "x": 0.0, "y": 0.8, "z": 3.5 },
"fieldOfView": 42.0
}
@@ -0,0 +1,33 @@
# 主界面背景音乐:糖果营地
制作日期:2026-10-20。用途:Candy 风格营地主界面,伙伴收集与轻策略游戏的日常停留背景。
风格依据为 `GameDesign.md`、`Doc/Design/UI/UI_Themes.md` 与 `Doc/Design/UI/Home/home_generation.json`:阳光、奶油色小屋、绿色原野、喷泉和可爱动物伙伴。配器目标为柔和马林巴/木琴短旋律、木吉他分解和弦、拨弦、温暖低音、轻木管与少量铃音,情绪欢迎、轻松、有准备出发的探索感。完整英文提示词保存在 `generation.json` 的 `prompt`。
## 成品
| 文件 | 用途与规格 |
| --- | --- |
| `AIClient/Assets/Bundles/Sound/BGM/CandyCamp_MainMenu_Loop.ogg` | 主界面循环候选成品,90.9秒、48000 Hz、立体声 Vorbis,1,621,586字节 |
| `CandyCamp_MainMenu_Source.mp3` | 未修改的DGX原曲,94秒、48000 Hz、立体声、128 kbps,留档及试听 |
| `server_metadata.json` | 服务返回的原始生成元数据,含实际种子、caption与LM规划 |
| `generation.json` | 风格提示词、生成参数、循环处理参数、音频验证与SHA-256 |
| `unity_validation.json` | Pipeline验证后的AudioClip规格、导入设置与资源收集信息 |
## 生成
严格按 `D:/UD/AI/XModel/DGX音乐_AI调用指南.md` 调用局域网DGXA音乐服务。模型 `acestep-v15-xl-sft`,LM `acestep-5Hz-lm-4B`;50步、CFG 7、思考开启、批量1、空歌词、无人声提示词。用户未指定时长与BPM,保持时长 `-1`、BPM `null`,交由LM规划;未更换权重或启动参数。
服务种子为 `1430014797`,LM规划200 BPM、C major、三拍、94秒。BPM及拍号为服务规划值,尚未人工确认实际节拍。服务元数据中的 `instrumental: false` 为其内部默认标记;调用接口按指南不额外添加纯音乐字段,无人声意图通过空歌词与提示词表达,实际人声有无仍以试听为准。
生成入口为 `Tools/generate_main_menu_music.py`,原始请求、队列事件、返回和下载记录保留在 `Tools/output/main_menu_music/`。任务ID `89793b8b202341b0944499ce482d1124`。首次SSE订阅在会话创建前返回session_not_found;脚本恢复到同一session与event_id读取结果,只提交了一次生成请求,没有重复排队。
## 循环处理与验证
`python Tools/prepare_main_menu_music.py` 在Unity外处理原始音频:按LM规划的小节长度裁至92.7秒,去掉尾部明显衰减,首尾以1.8秒(两个规划小节)等功率交叉淡化,并旋转接缝到连续波形处。全局降低约1.34 dB后输出Vorbis质量5,得到90.9秒。OGG容器避免MP3编码填充影响循环长度;并未宣称已通过人工听感的无缝音乐衔接。
完整解码成功,采样有限且无削波;OGG解码峰值约-3.17 dBFS,RMS约-20.90 dBFS;循环边界采样差约0.00797,小于内部相邻采样差的99百分位0.05113。上述为技术检查,不能替代旋律、节奏及有无人声的人工试听。
Unity导入与验证使用项目的 `unity-pipeline` 技能:`import_asset` 导入,然后执行 `AIClient/AgentScripts/ImportMainMenuMusic.cs` 的 `ConfigureAndVerify`。AudioClip实际为4,363,200采样帧、90.9秒、双声道、48000 Hz。导入设置为Vorbis质量0.7、CompressedInMemory、保留采样率、后台加载、不预加载,避免启动即展开整首PCM。Art包新增Sound组,仅收集 `Assets/Bundles/Sound/BGM`,按文件名寻址、单独打包;原有收集项保留。本轮Console游标558之后无新增错误。
本次完成生成、循环处理、Unity入库、收集配置与资源登记;未添加AudioSource或运行时播放代码,未接入设置页音乐开关,未构建Bundle、发布CDN或进行微信真机验证。音乐听感和最终循环衔接待试听确认。
+44
View File
@@ -0,0 +1,44 @@
{
"date": "2026-10-20",
"model": "acestep-v15-xl-sft",
"lm_model": "acestep-5Hz-lm-4B",
"inference_steps": 50,
"seed": 1430014797,
"planned_bpm": 200,
"planned_key": "C major",
"planned_meter": "3",
"prompt": "Original instrumental background music for a cozy, colorful Candy-style mobile game's main menu: a sunny miniature village camp, cream cottages, green meadows, a little fountain, friendly cute animal companions and a gentle sense of preparing for an adventure. Warm, welcoming, playful and relaxed, cheerful without being hyperactive. A memorable but understated short pentatonic melody on soft marimba and wooden xylophone, answered by a mellow flute or clarinet; light nylon-string acoustic guitar arpeggios, pizzicato strings, rounded upright bass and very delicate shaker and woodblock percussion. A few soft celesta sparkles, warm acoustic chamber arrangement, moderate gently bouncing walking pace, clear major-key harmonies. Instrumental only, no singing, no humming, no choir, no speech. Small recurring A and B phrases with subtle variations, stable gentle dynamics and lots of breathing space for menu interactions. Designed for comfortable repeated listening, a short pickup and a final phrase that naturally returns to the opening harmony, loop-friendly structure, no dramatic buildup, no big finale, no heavy drums, no aggressive brass, no distorted guitars, no EDM drops, no environmental sound effects. Polished clean stereo game soundtrack.",
"lyrics": "",
"source": {
"file": "CandyCamp_MainMenu_Source.mp3",
"seconds": 94.0,
"sample_rate": 48000,
"channels": 2,
"bitrate": "128 kbps",
"sha256": "65f7c8fe5f799adc1121bed3bf166a43ee2161f1297f6bf33491786bd491ddb8"
},
"loop": {
"asset": "AIClient/Assets/Bundles/Sound/BGM/CandyCamp_MainMenu_Loop.ogg",
"seconds": 90.9,
"sample_rate": 48000,
"channels": 2,
"bytes": 1621586,
"codec": "Vorbis",
"quality": 5,
"source_end_seconds": 92.69999999999999,
"crossfade_seconds": 1.7999999999999998,
"gain_db": -1.3376273615099534,
"decoded_peak_dbfs": -3.171337127685547,
"decoded_rms_dbfs": -20.89783477783203,
"boundary_sample_delta": 0.007966671139001846,
"internal_sample_delta_p99": 0.05112835392355919,
"sha256": "59fb32c3dc42efd2183fefd8c82a76d5068c270a772fd6bec154684eaebe7294"
},
"verification": {
"decode": "passed",
"finite_samples": true,
"clipping": false,
"musical_seam": "Two planned bars crossfaded; human listening review pending",
"runtime_playback": "Not wired; resource generation/import only"
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
{
"asset": "Assets/Bundles/Sound/BGM/CandyCamp_MainMenu_Loop.ogg",
"guid": "c2de2ab8cb8c4c340a9ac699a274cc40",
"length": 90.9,
"samples": 4363200,
"channels": 2,
"frequency": 48000,
"loadType": "CompressedInMemory",
"compression": "Vorbis",
"quality": 0.7,
"loadInBackground": true,
"preloadAudioData": false,
"package": "Art",
"group": "Sound",
"address": "CandyCamp_MainMenu_Loop",
"packRule": "PackSeparately",
"runtimePlaybackWired": false,
"bundleBuilt": false,
"verifiedUtc": "2026-10-20T09:55:34.2279400Z"
}
@@ -0,0 +1,41 @@
# 主界面轻柔配乐:微风小镇
2026-10-20,根据用户“类似宫崎骏电影配乐的风格,更轻柔一些”的反馈生成。用户随后确认“这首音乐可以,就用这首吧”,现正式选作主界面背景音乐;《糖果营地》原版作为历史候选保留。取手绘动画电影里微风、原野、小镇和温暖童话的氛围,以原创旋律创作,不引用已有电影主题。
编曲提示以柔和钢琴为主,木管偶尔呼应、少量持续弦乐和竖琴,旋律舒展、音符稀疏、和声变化缓慢,弱化木琴和拨弦节奏,去掉鼓与明显打击乐。完整提示词见 `prompt.txt` 和 `generation.json`,有无人声及最终听感以人工试听为准。
## 生成与成品
依 `D:/UD/AI/XModel/DGX音乐_AI调用指南.md` 调用DGXA音乐服务:`acestep-v15-xl-sft`、50步、CFG 7、LM思考开启、单首、空歌词,参考音频留空。未指定数字BPM和时长,保持BPM null、时长-1。服务返回种子 `2085836397`,规划120 BPM、E major、4拍、87秒;这些是LM规划值,未进行人工节拍确认。
- 原曲:`MeadowBreeze_MainMenu_Source.mp3`,87秒、48000 Hz、立体声、MP3 128 kbps。
- 循环候选:`AIClient/Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg`,84秒、48000 Hz、立体声、Vorbis质量5,1,408,223字节。
- 原始服务回执:`server_metadata.json`;加工与校验:`generation.json`;Unity回执:`unity_validation.json`。
- 任务ID:`9ae35ea3603e459daf1273c5f04f5fdf`,完整队列记录留在 `Tools/output/main_menu_music_soft/`,仅提交一次生成。
原曲按规划小节裁至86秒,进行2秒(一个规划小节)首尾等功率交叠,旋转到连续波形位置,输出84秒OGG。按RMS目标-24 dBFS降低音量,保留原有动态;成品实测RMS -24.003 dBFS、峰值-9.168 dBFS。前一版OGG的RMS约-20.90 dBFS,便于以较低平均音量作菜单背景。完整解码正常、采样有限、无削波;边界采样差0.002665,低于内部采样差99百分位0.01494。技术检查不等同于音乐衔接的人工试听。
## 复现入口
生成脚本支持独立输出目录与提示词文件;已有任务回执时恢复原任务,不重复提交:
```powershell
python Tools/generate_main_menu_music.py --output Tools/output/main_menu_music_soft --prompt-file Doc/Design/Sound/MainMenuSoft/prompt.txt
python Tools/prepare_main_menu_music.py --work Tools/output/main_menu_music_soft --design Doc/Design/Sound/MainMenuSoft --stem MeadowBreeze_MainMenu --title 'Meadow Breeze - Main Menu' --crossfade-bars 1 --target-rms-dbfs -24
```
上述生成目录已有完成结果,脚本会拒绝再次提交;若要同种子重制,需按指南在新请求中设置随机种子关闭及种子字符串,不覆盖本次记录。
Unity通过Pipeline的 `import_asset` 导入新路径,然后运行 `AgentScripts/ImportMainMenuMusic.cs` 的 `ConfigureSoftAndVerify`;设置CompressedInMemory、Vorbis质量0.7、保留采样率、后台加载、不预加载。复用Art/Sound目录收集、按文件名寻址、PackSeparately。Unity回读4,032,000采样帧、84秒、2声道、48000 Hz,验证通过;Console游标559之后无新增错误。
初次生成时仅完成候选入库;`unity_validation.json`、`generation.json` 保留该阶段原始回执。用户已试听确认选用,当前接入状态以以下说明及 `playback_assets.json`、`playback_validation.json` 为准。
## 正式选用与播放接入
播放器Prefab为 `Assets/Bundles/Sound/Prefab/MainMenuMusic.prefab`,由Pipeline执行 `BuildMainMenuMusic.Build` 制作。AudioSource持久引用本曲,2D、循环、音量1、不自动PlayOnAwake,配合 `MainMenuMusic` 组件播放;音量可在Prefab调节。Prefab收集到Art/Sound,按文件名地址 `MainMenuMusic`、PackSeparately。
`GameplayBootstrap`在HUD绑定后通过现有YooAsset路径异步加载Prefab,每个Bootstrap仅创建一次,持有资源句柄至销毁。浏览主界面、营地、设置等菜单连续播放;进入战斗或弹珠页暂停,回菜单续播。音乐开关独立于音效开关,关闭暂停、开启从原位置续播;切后台暂停,回前台按用户偏好恢复。不修改业务UI骨架。
`VerifyMainMenuMusic.Play` 的Boot实播验证通过:实际选曲、采样前进、3轮设置开关及菜单往返不重启、不叠音,音乐/音效开关组合正确;进入弹珠暂停、切换偏好不误恢复、返回首页续播;玩法门控、应用暂停恢复、84秒曲尾回环通过。战斗使用同一门控,未为验证开启服务端战斗。测试恢复原音乐/音效偏好及监听音量;退出Play后恢复原启动场景选项,三个原角色预览场景及未保存标记保留。编译通过,本轮Console游标561之后无新增错误。
未构建Player或Bundle,未发布CDN。正式版本需包含新增音乐Prefab、配套音频及更新后的热更程序集;微信首次交互与音频解锁需真机验证。
@@ -0,0 +1,46 @@
{
"date": "2026-10-20",
"model": "acestep-v15-xl-sft",
"lm_model": "acestep-5Hz-lm-4B",
"inference_steps": 50,
"seed": 2085836397,
"planned_bpm": 120,
"planned_key": "E major",
"planned_meter": "4",
"prompt": "Original instrumental main-menu music for a cozy pastoral fantasy game, with the tender, airy storytelling atmosphere of a hand-drawn Japanese animated feature: a quiet green village, small cream cottages, a little fountain, friendly animal companions, sunlight moving through leaves and a gentle breeze before a small adventure. Much softer and calmer than a bouncy casual-game tune. Slow, unhurried adagio feel, delicate and intimate, quietly hopeful with a trace of wistful wonder. Soft felted acoustic piano is the main voice, playing a simple lyrical original melody with long singing phrases, rests and light broken chords. A warm breathy flute or clarinet answers only occasionally; a small string ensemble holds very thin, soft sustained harmonies in the background, with a few quiet harp notes. Warm major-key colors, occasional gentle modal shading and spacious add9 or sixth chords, subtle natural room reverb, tender chamber-orchestra sound. Pianissimo to mezzo-piano throughout, soft rounded attacks, sparse notes, slow harmonic changes, plenty of silence between phrases, low density and no energetic pulse. No drums, no shaker, no woodblock, no busy pizzicato, no prominent marimba or xylophone, no bright music-box ostinato, no heavy bass, no sharp staccato, no heroic brass, no epic crescendo, no dramatic climax, no EDM or synth beat. Entirely instrumental: no singing, no humming, no choir, no spoken words, no environmental sound effects. A small original A-B-A theme with restrained variations, suitable for comfortable repeated listening beneath menu interactions. Keep the opening and final phrases in compatible harmony and texture, a brief gentle entrance, no long silent ending and no grand finale. Clean stereo acoustic film-score production. Compose an original melody, without quoting any existing film theme.",
"lyrics": "",
"source": {
"file": "MeadowBreeze_MainMenu_Source.mp3",
"seconds": 87.0,
"sample_rate": 48000,
"channels": 2,
"bitrate": "128 kbps",
"sha256": "ade69a48f4a5596869aba5c897ee1188f342849ac13f839147742b6177f8a428"
},
"loop": {
"asset": "AIClient/Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg",
"seconds": 84.0,
"sample_rate": 48000,
"channels": 2,
"bytes": 1408223,
"codec": "Vorbis",
"quality": 5,
"source_end_seconds": 86.0,
"crossfade_seconds": 2.0,
"crossfade_planned_bars": 1.0,
"target_rms_dbfs": -24.0,
"gain_db": -7.9607079788981,
"decoded_peak_dbfs": -9.168137550354004,
"decoded_rms_dbfs": -24.003089904785156,
"boundary_sample_delta": 0.0026645082980394363,
"internal_sample_delta_p99": 0.014939721673727036,
"sha256": "ce19b4f816656e8ce523c5b165527dcd90ddac8bd8eed9ce3a402fa018b19bdf"
},
"verification": {
"decode": "passed",
"finite_samples": true,
"clipping": false,
"musical_seam": "Cyclic crossfade applied; human listening review pending",
"runtime_playback": "Not wired; resource generation/import only"
}
}
@@ -0,0 +1,16 @@
{
"selected": "Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg",
"prefab": "Assets/Bundles/Sound/Prefab/MainMenuMusic.prefab",
"address": "MainMenuMusic",
"package": "Art",
"group": "Sound",
"loop": true,
"volume": 1.0,
"seconds": 84.0,
"channels": 2,
"frequency": 48000,
"independentMusicToggle": true,
"runtimePlaybackWired": true,
"bundleBuilt": false,
"verifiedUtc": "2026-10-20T10:44:17.1910890Z"
}
@@ -0,0 +1,16 @@
{
"result": "PASS",
"selected": "MeadowBreeze_MainMenu_Loop",
"length": 84.0,
"startup": true,
"settingsToggleCycles": 3,
"resumesWithoutRestart": true,
"independentSfxToggle": true,
"singlePlayer": true,
"pinballPauseAndReturn": true,
"gameplayGate": true,
"applicationPauseAndResume": true,
"loopWrap": true,
"preferencesRestoredInFinally": true,
"verifiedUtc": "2026-10-20T10:45:39.2147005Z"
}
+1
View File
@@ -0,0 +1 @@
Original instrumental main-menu music for a cozy pastoral fantasy game, with the tender, airy storytelling atmosphere of a hand-drawn Japanese animated feature: a quiet green village, small cream cottages, a little fountain, friendly animal companions, sunlight moving through leaves and a gentle breeze before a small adventure. Much softer and calmer than a bouncy casual-game tune. Slow, unhurried adagio feel, delicate and intimate, quietly hopeful with a trace of wistful wonder. Soft felted acoustic piano is the main voice, playing a simple lyrical original melody with long singing phrases, rests and light broken chords. A warm breathy flute or clarinet answers only occasionally; a small string ensemble holds very thin, soft sustained harmonies in the background, with a few quiet harp notes. Warm major-key colors, occasional gentle modal shading and spacious add9 or sixth chords, subtle natural room reverb, tender chamber-orchestra sound. Pianissimo to mezzo-piano throughout, soft rounded attacks, sparse notes, slow harmonic changes, plenty of silence between phrases, low density and no energetic pulse. No drums, no shaker, no woodblock, no busy pizzicato, no prominent marimba or xylophone, no bright music-box ostinato, no heavy bass, no sharp staccato, no heroic brass, no epic crescendo, no dramatic climax, no EDM or synth beat. Entirely instrumental: no singing, no humming, no choir, no spoken words, no environmental sound effects. A small original A-B-A theme with restrained variations, suitable for comfortable repeated listening beneath menu interactions. Keep the opening and final phrases in compatible harmony and texture, a brief gentle entrance, no long silent ending and no grand finale. Clean stereo acoustic film-score production. Compose an original melody, without quoting any existing film theme.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,20 @@
{
"asset": "Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg",
"guid": "2011c89c89761724f99d1b8e865d5d54",
"length": 84.0,
"samples": 4032000,
"channels": 2,
"frequency": 48000,
"loadType": "CompressedInMemory",
"compression": "Vorbis",
"quality": 0.7,
"loadInBackground": true,
"preloadAudioData": false,
"package": "Art",
"group": "Sound",
"address": "MeadowBreeze_MainMenu_Loop",
"packRule": "PackSeparately",
"runtimePlaybackWired": false,
"bundleBuilt": false,
"verifiedUtc": "2026-10-20T10:02:21.7320431Z"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

+91
View File
@@ -0,0 +1,91 @@
{
"date": "2026-10-14",
"method": "Built-in image_gen.imagegen; Unity Pipeline atlas extraction and Sprite import; JSON-to-Prefab; Unity isolated and Play Mode rendering",
"references": [
"https://play.google.com/store/apps/details?id=com.farlightgames.pgame.gp&hl=en",
"https://www.ldplayer.tw/blog/clash-of-critters-code.html",
"Doc/Design/ui_design.jpg",
"Doc/Design/UI_Design_Principles.md",
"Doc/Design/UI/UI_Themes.md"
],
"images": [
{
"source": "Doc/Design/UI/Home/home_camp_source.png",
"asset": "AIClient/Assets/Bundles/UI/Texture/Home/home_camp.png",
"transparent_background": false,
"prompt": "Use case: stylized-concept. Asset type: portrait mobile game main-home background illustration, 9:16, 1080x1920 composition. Create a polished cozy stylized 3D cartoon town camp in the casual candy-game style: rounded cream cottages with orange-red tiled roofs and tiny yellow-striped shop awnings, emerald rounded trees, warm stone paths, a small blue fountain at the center, a wooden bench and flower beds, a cute small white-and-orange cat and a tiny explorer with teal goggles interacting in the clearing. Charming miniature diorama, hand-painted toy-like materials, soft sunlight, outlined details, optimistic afternoon atmosphere. High oblique orthographic camera angle. Center the cottages at x50%, y35-50%, fountain and cat in the middle at y55-65%. Environment fills the whole frame with grass and garden paths towards all edges; no floating island. Keep the top 20% quiet pale blue sky with soft distant hills so resource UI can overlay; keep outer left and right 15% of frame low-detail so menu icons can overlay; keep bottom 25% quiet soft grass for large overlay action panel. Color palette sky #EAF3F8, warm cream #F6EBCF, leaf green #7ED321, water cyan #46C8E6, honey gold accents. A fully finished professional mobile game environment illustration with crisp readable volumes. NO UI elements, NO cards, NO borders, NO text, NO numbers, NO labels, NO watermarks, NO logos. Original scene, original characters."
},
{
"source": "Doc/Design/UI/Home/home_icons_source.png",
"assets": "AIClient/Assets/Bundles/UI/Texture/Home/home_ico_*.png",
"transparent_background": true,
"grid": [
4,
4
],
"order": [
"coin",
"diamond",
"energy",
"avatar",
"tasks",
"gift",
"mail",
"trophy",
"bag",
"home",
"battle",
"pets",
"chest",
"calendar",
"settings",
"pinball"
],
"prompt": "Use case: stylized-concept. Asset type: a single sprite sheet for a casual candy-style mobile game HUD, 4 by 4 grid of SIXTEEN isolated inventory icons on a genuinely transparent background. Exact grid order: first row gold coin with star embossing, cyan faceted diamond, green lightning energy bolt, cute orange-and-white cat explorer avatar wearing teal goggles; second row parchment checklist task scroll, wrapped pink-and-gold gift box, blue envelope letter, golden trophy cup; third row blue-purple adventure backpack, wooden cream-roof cottage with orange tiles, crossed silver sword and round blue shield, open leather illustrated pet collection book; fourth row golden treasure chest, calendar with green check, silver cog settings gear, glossy turquoise pinball glass orb with a gold star inside. Consistent polished 3D hand-painted cartoon inventory item rendering, rounded forms, thick colored outlines, cream highlights, gentle short soft shadows, matching a casual fantasy toy-town game UI. All icons single recognizable objects in same visual language, no UI buttons or frames. Straight-on / three-quarter views, centered in each equal cell with generous transparent margins. Each cell 256x256 in a 1024x1024 sheet; each object occupies about 170x170 with all edges fully contained, no overlap between cells. No text, no letters, no numbers, no words, no watermark, no logo. Transparent background, no white backing or checkerboard."
}
],
"ui": {
"json_generator": "Tools/generate_home_ui.py",
"unity_builder": "AIClient/AgentScripts/BuildHomeUi.cs",
"prefabs": [
"UI_MainHUD"
],
"referenceResolution": [
1080,
1920
],
"nodesPerTheme": 83,
"eventsPerTheme": 19,
"data": "Currency, level, task, chapter and rewards are design examples; feature buttons show existing dialog feedback until actual gameplay is connected. Network status and reconnection use the existing live implementation.",
"background": "Original static camp illustration; not a new interactive 3D scene."
},
"validation": {
"unityCompile": "completed",
"homeChecks": 310,
"existingThemeChecks": 52,
"resourceCollection": "6 UI prefab addresses and font/sprite dependencies verified",
"live": "8 feature entries and home tab passed EventSystem raycasts and Bootstrap dialog feedback at 1080x1920",
"previews": [
"UI_MainHUD.png",
"UI_MainHUD_tall.png",
"UI_MainHUD_reconnect.png"
],
"liveScreenshot": "AIClient/Assets/Screenshots/home_live.png",
"scene": "Boot restored in Edit Mode, clean; previous Game View size restored",
"notRun": [
"Player build",
"mobile device validation",
"CDN deployment"
]
},
"themeRemoval": {
"date": "2026-10-14",
"activeTheme": "candy",
"removed": [
"Studio",
"Mint",
"ThemeSwitcher"
],
"note": "Earlier multi-theme checks are historical; current builder only generates Candy."
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

+41
View File
@@ -0,0 +1,41 @@
# 当前 UI 风格:Candy
2026-10-14 按用户要求删除 Studio 深绿工作室主题与 Mint 奶油薄荷绿主题。当前仅保留本项目 Candy 糖果风,设计分辨率 **1080×1920**。视觉规范见 `Doc/Design/UI_Design_Principles.md` 与 `Doc/Design/ui_design.jpg`。
## 当前资源
| 逻辑面板 | JSON | Prefab |
| --- | --- | --- |
| `UI_MainHUD` | `Doc/UIPrefabCreater/UI_MainHUD.json` | `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD.prefab` |
| `UI_ConfirmDialog` | `Doc/UIPrefabCreater/UI_ConfirmDialog.json` | `AIClient/Assets/Bundles/UI/Prefab/UI_ConfirmDialog.prefab` |
控件复用 `Texture/Common/`,营地插画与图标位于 `Texture/Home/`。2026-10-15 已接入 G0 本地玩法原型:首页资源、训练等级、教学目标和首通状态由 `PrototypeGame` 绑定,第三资源为弹珠;原登录、网络状态、确认弹窗、断线重连保留。其他支撑系统仍按基础设计待开发。
2026-10-16营地扩展:底部“营地”打开`UI_PrototypeCamp`设施/休息区页,建造台打开`UI_PrototypeBuild`三处固定装饰槽位看板。两页沿用Candy、Common九宫格、Home图标与已制伙伴/装饰肖像,继续由JSON→Prefab生成。主界面插画仍作背景,未叠加房屋点击热点或恢复其他主题。
任务/签到扩展:`MainHUD.Tasks`打开`UI_PrototypeTasks`,`MainHUD.Daily`打开`UI_PrototypeSignin`。首页新增已制作的任务红点节点;任务与签到红点仅代表可领取奖励。两页继续使用Candy、Common九宫格和已制弹珠图标,通过JSON→Prefab生成。
背包/商店扩展:`MainHUD.Bag`打开四分类`UI_PrototypeBag`;`MainHUD.Shop`打开`UI_PrototypeShop`免费页,`MainHUD.Coin`打开金币商品页。两页复用已制Home图标、伙伴/装饰肖像与Common九宫格,金币购买使用原确认弹窗;JSON→Prefab流程不变。
## 配置与加载
- 当前 UI 仅支持 `candy`。`BootSettings.UiTheme`、`BootContext.UiTheme`、远程 `version.json.uiTheme` 字段保留以兼容旧序列化和版本文件;其他值会告警并回退 Candy。
- `UiThemeCatalog.Resolve` 返回原逻辑面板名。业务仍使用 `UiManager.OpenAsync` 异步加载。
- `Art/UI` 按 Prefab 文件名收集当前面板,贴图和字体随依赖进入包。菜单为 `Tools/UI/Setup UI Bundle Collector`。
- 本地启动和 `LocalServerAutoStart` 不受影响,Boot 保留原 EventSystem。
## 生成与验证
`python Tools/generate_home_ui.py` 仅生成 Candy 主界面 JSON。通过 Unity Pipeline 执行 `AgentScripts/BuildHomeUi.cs` 的 `Build`、`Verify`、`Preview` 生成和验证 Prefab;主界面骨架继续严格使用 JSON→Prefab。
预览:`Doc/Design/UI/Home/UI_MainHUD.png`、`UI_MainHUD_tall.png`、`UI_MainHUD_reconnect.png`。实际运行截图:`AIClient/Assets/Screenshots/home_live.png`。图片生成提示词与历史验证记录见 `Doc/Design/UI/Home/home_generation.json`。
上述为主界面设计阶段的历史截图。G0 当前截图为 `AIClient/Assets/Screenshots/g0_home.png` 与 `g0_pinball.png`、`g0_pets.png`、`g0_formation.png`、`g0_battle.png`、`g0_result.png`。四个新页面沿用 Candy 与 JSON→Prefab 管线;构建与验证详见 `Doc/Design/G0_Implementation.md`,运行 `BuildPrototype.Build` 会一起更新主界面和原型资源。
已删除两套主题的四个 Prefab、独立贴图目录、JSON、预览、配置示例及专用生成/验证脚本。已停用的 `UI_ThemeSwitcher` Prefab、JSON 和脚本也已移除。Unity 资源和 `.meta` 由 Pipeline 调用 AssetDatabase 删除;`Doc/ResDesc_Picture.md` 旧条目作为历史登记保留,并注明退役。
收集配置随下一次正常资源包构建生效;本次不构建 Player,不发布 CDN。
2026-10-16 新增 `UI_PrototypeStages` 五关列表,更新伙伴技能说明、布阵关卡提示、弹珠双资源奖励和下一关结算。业务仍为Candy JSON→Prefab,数值读取服务端统一配置;使用 `BuildProgression.Build` 可仅重建这五个玩法页。实际运行截图为 `Assets/Screenshots/progression_*.png`,见实现记录中的G2章节。
删除后验证(2026-10-14):Unity 编译完成;8 个退役 Unity 目标均不存在;Candy 主界面 116 项资源/绑定/点击/触控尺寸/重连检查通过;保留的主界面与确认弹窗无退役资源依赖。Art/UI 收集描述已更新,旧 Studio/Mint 配置正确回退 Candy,无新增错误,Boot 场景保持无未保存变化。
+3 -2
View File
@@ -127,7 +127,7 @@
- 内凹深色底槽 + 高光亮色填充(绿/蓝/橙),全圆端胶囊形。
- 左端可挂圆形图标徽章,填充上叠加数值文本(如 `350/500`、`80%`),文本白色加轻描边。
- 切图:`progress_bg` + `progress_fill_*`,填充用 **Filled 或 Sliced**;脚本驱动时按 `sizeDelta.x` 或 `fillAmount` 改变。
- 切图:`progress_bg` + `progress_fill_*`,标准控件填充用 **Sliced**,按尺寸或容器裁剪驱动进度,保留端部圆角。
### 5.7 滑动条 (Slider)
@@ -201,7 +201,7 @@
- 控件优先复用 `Assets/Bundles/UI/Texture/Common` 通用切图;缺图时用 gpt-image 按本风格生成到该目录(见 `ResourceCreate.md`)。
- 新界面按 **JSON→Prefab 管线**:在 `Doc/UIPrefabCreater/` 写界面描述 JSON,Unity 自动生成 Prefab(`UnityProject.md` 第 26–46 条)。
- 文本控件统一 TextMeshPro;按钮 `transition` 优先 `SpriteSwap`;九宫格图片声明 `"imageType": "Sliced"`,进度填充可用 `"Filled"`。
- 文本控件统一 TextMeshPro;按钮 `transition` 优先 `SpriteSwap`;标准控件图片声明 `"imageType": "Sliced"` 并设置有效 Sprite Border。
- 按钮 SpriteSwap 状态对应切图:`*_normal`(Target) / `*_hover`(Highlighted) / `*_pressed`(Pressed) / `*_disabled`(Disabled)。
---
@@ -209,6 +209,7 @@
## 8. 九宫格与间距
- **九宫格 (Sliced)**:所有可拉伸容器(面板、按钮、输入框、进度条、列表项等)必须设置正确的 `Border`,保证圆角与描边在任意尺寸下不变形;`Border` 值参考 `Doc/UI_Pic_Set.md` 各切片。
- Common 当前使用 Normal Set:`UiSpriteNineSliceRules.cs` 按 `Doc/UI_Normal_Set.md` 边界与实际切图尺寸换算,包含 2px 透明留边,自动维护非零 Border 和 Full Rect;按钮各状态图均须设置。新增标准控件时同步扩展导入规则。图标、插画等完整图形按原比例显示。
- 导入设置:Texture Type = `Sprite (2D and UI)`,勾选 `Alpha Is Transparency`,Mesh Type = `Full Rect`,Filter = Bilinear。
- **间距节奏**:统一使用 8 的倍数(8 / 16 / 24 / 32)。控件内边距≥16,区块间距≥24,安全区四周≥24。
- 切图四周保留约 2px 透明边,避免双线性采样串色(项目切图已统一处理)。
+109 -1
View File
@@ -19,8 +19,116 @@ Base: `https://game.xworld.ren`(Caddy → 后端)
| --- | --- | --- | --- | --- |
| POST | `/register` | `{"username","password"}` | `{token,pid}` | `invalid_input` / `user_exists` |
| POST | `/login` | `{"username","password"}` | `{token,pid}` | `invalid_credentials` |
| GET | `/health` | — | `{ok,service,maintenance}` | — |
| GET | `/health` | — | `{ok,service,maintenance,gameProtocol:1}` | — |
| GET | `/maintenance` | — | `{enabled,message}` | — |
| GET | `/game/state` | — | 游戏快照、服务端时间、待完成活动 | 401 / 503 / 500 |
| POST | `/game/command` | 见下文 | 幂等操作结果和最新快照 | 400 / 401 / 409 / 503 / 500 |
### G1 教学玩法 API(本地已实现)
玩法接口统一使用 `Authorization: Bearer {token}`。玩家身份从 token 解析,Body 内的 `pid` 不参与寻址。维护期间读写玩法均返回 HTTP 503。此版本仅在本地 AIServer 联调通过,未部署生产服。
```json
{"requestId":"32位唯一请求号","action":"shot.begin","revision":0,"aim":5}
```
`requestId` 为 16~64 位字母、数字、下划线或短横线;客户端使用 GUID。`revision` 是最近一次快照的修订号。同一玩家、同一请求号、相同完整 JSON 内容再次提交,返回原操作结果及当前最新快照,并标记 `replayed:true`;对象字段顺序不影响比较。同一请求号更换内容返回 HTTP 409 `request_id_conflict`。已记录的业务拒绝也保持原结果,修正条件后必须创建新请求号。
| action | 额外字段 | 行为 |
| --- | --- | --- |
| `shot.begin` | `aim`:整数 -35~35 | 扣1弹珠,保存待结算活动,返回完整服务端轨迹与奖励 |
| `shot.finish` | `activityId`:begin 请求号 | 服务端到期后结算一次,首次及每十次赠券 |
| `capture` | 无 | 消耗1券;服务端随机并推进保底,返回 `result.id/pet/duplicate/tutorial/pity/shards/poolVersion` |
| `train` | 无 | 消耗 `30×level` 糖果;共享训练最高20级 |
| `evolve` | `pet`:0~4 | T1、Lv.5、碎片40、金币500;成长到T2 |
| `deploy` | `pet`:0~4,`slot`:0~1 | 唯一伙伴、占位交换,只开放中央路线 |
| `autoDeploy` | 无 | 恢复岩团团前排、火喵后排 |
| `stage.select` | `stageId`:1~5 | 保存选中关卡,只允许已解锁关卡 |
| `battle.begin` | 可选 `stageId`,省略/0使用已选关卡 | 检查解锁,冻结编队、成长和完整配置,服务端计算并保存战斗结果 |
| `battle.finish` | `activityId`:begin 请求号 | 校验活动与最短时间;服务端胜利才发一次首通奖 |
| `battle.abandon` | `activityId` | 立即结束,不发胜利奖励 |
| `goal.claim` | 无 | 通关后只发一次5弹珠 |
| `camp.place` | `item`:0~2,`slot`:0~2 | 通过1-5后购买并放置;已拥有则免费移动,目标被其他装饰占用时拒绝 |
| `camp.store` | `slot`:0~2 | 通过1-5后收回装饰,保留拥有记录,无扣费/退款 |
| `camp.interact` | `pet`:0~4 | 通过1-3后与已拥有伙伴互动,保存伙伴和次数,不发资源 |
| `daily.claim` | `item`:0~2,`day`:最近快照的 `dailyDay` | 领取已完成当日目标;跨日旧请求的新提交拒绝,已提交成功的原请求可重放 |
| `signin.claim` | `item`:0~6 | 领取累计登录已解锁项,逐项只发一次,已解锁未领奖励保留 |
| `shop.buy` | `item`:0~2,`day`:最近快照的 `dailyDay` | 按服务器价格领取/购买一份补给,校验解锁、余额和当日限购 |
| `chest.claimDaily` | 无 | 领取当日每日宝箱,只增加1个箱库存,不发箱内容 |
| `chest.open` | `chest`:0~2;自选箱另带 `choice`:0~4 | 扣除1个箱并在同一事务发放固定/自选内容 |
回应公共字段:`ok/error/replayed/action/state/serverTime/configVersion/config/result/capture/rewards`;读取时 `action` 为空,命令与重放响应保留动作名。`serverTime` 是 UTC Unix 秒。`config` 是唯一配置源 `Config/Gameplay/greenfield.json` 的内容,包含经济、弹珠、五只伙伴、捕捉池、敌人、五关波次与首通奖励、五元素关系;服务端 CMake 编译时嵌入,版本为 `greenfield-1-{源文件SHA256前12位}`,修改 JSON 后须重新构建。客户端使用返回配置,战斗使用开始时冻结配置,不能混用新旧数值。
`state` 对应客户端 `PrototypeSave`:当前schema=9,保留钱包、阵容、恢复锚点、修订号、首通/目标标志、`pendingShot/pendingBattle/lastShot/lastBattle`、`selectedStage` 和长度5的0/1数组 `clearedStages`。伙伴 `stages/shards` 长度为5,顺序为岩团团、火喵、芽芽、闪闪雀、泡泡龟;保留 `captureTutorialDone/captureCount/duplicateStreak`、营地及任务/签到字段。按顺序首次通过才解锁下一关,每关首通独立只发一次,重复战斗不发经济奖励;`cleared` 保留为1-1完成标志,用于原教学目标。
商店新增 `shopBought:[0,0,0]`,为当前 `dailyDay` 各商品已领取/购买次数,和每日任务在同一次日切事务清零。`config.shop.goods` 定义商品ID、名称/说明、金币价、每日上限、解锁关卡与 `{coins,candy,balls,tickets}` 奖励。当前ID0为免费5弹珠/每日1次;ID1为100金币换20糖果/1-1解锁/每日3次;ID2为300金币换1券/1-3解锁/每日1次。装饰仍使用`camp.place/store`,不从商店重复购买。
`shop.buy` 不接受客户端价格、奖励、解锁或库存数值,回执为 `{id,item,day,chargedCoins,reward:{coins,candy,balls,tickets}}`。金币扣除、原钱包到账、限购次数与请求日志同事务提交;新请求须携带当前日键,过期确认拒绝。原成功请求跨日重放保留原费用/奖励,不重新发放或消耗新日库存;客户端恢复“补给已到账”弹窗,标明原费用。打开确认、取消、分类切换均不提交消费请求。限购不按离线天数累积,时钟回退不刷新。免费补给可令弹珠超过自然恢复上限,但不改变原恢复规则。
背包没有新增库存接口或镜像余额,读取同一快照的`tickets/shards/decorations/campLayout`,钱包只展示原`coins/candy/balls`。当前物品均永久有效,捕捉、训练和装饰操作直接影响这些原字段;通用物品/批量使用/活动道具/宝箱协议尚未接入。
任务/签到新增 `dailyDay`、`dailyProgress:[0,0,0]`、`dailyClaimed:[0,0,0]`、`signinDays:1`、`signinClaimed:[0,0,0,0,0,0,0]`。公共响应附 `daily:{day,resetAt}`,`resetAt` 为下次重置的UTC Unix秒;`config.daily` 含 `utcOffsetSeconds:28800`、三项任务目标/奖励与七项签到奖励。服务器日键为 `floor((now+28800)/86400)`;首次进入当天的玩法读写事务会清空上日每日进度/领取标志,并将累计登录增加1(最多7),跳过多天仍只增加1。时钟回退时保留已记录的较大日键,不回滚标志或多计登录。
只有首次执行成功的 `shot.finish`、正常 `battle.finish`(胜/负均可)、`camp.interact` 分别增加三项进度,封顶3/1/1。`shot.begin/battle.begin`、主动放弃、页面打开、重放和客户端自报进度不计入;跨日活动按实际结算日计数。每日奖励未领取则在重置后失效,`daily.claim` 的 `day` 必须匹配当前日键;旧日已成功请求重放仍返回原回执,不改写新日进度/领取标志。签到按累计登录日解锁,不要求连续登录;已解锁项任意顺序领取,无付费补签和七日循环。
`daily.claim/signin.claim` 回执为 `{id,item,reward:{coins,candy,balls}}`,每日任务另含 `day`;`goal.claim` 新回执也携带 `id/reward`。领取标志、钱包和请求日志同事务提交;写入失败整体回滚,同一请求重试只返回原奖励,客户端恢复“奖励已领取”弹窗并清理已确认队列。奖励允许弹珠超过恢复上限,恢复规则不另改。旧版本已保存的教学回执可没有reward,客户端按原教学奖励兼容展示。
营地新增 `decorations:[0,0,0]` 拥有标记、`campLayout:[-1,-1,-1]` 固定位置(值为装饰ID,-1为空)、`restPet:0` 和 `campInteractions:0`。同一装饰最多放置一次,收回后进入仓库。`config.camp` 定义解锁关卡、槽数、三件装饰的名称/说明/价格;以服务端价格扣费。`camp.place/store` 回执为 `{id,item,slot,chargedCoins}`,购买/移动/收回都与钱包和日志同事务提交;重放返回原费用和原结果。预览与撤回仅改变界面,不发消费请求。确认后丢失响应时保留请求重试,客户端展示“营地已更新”回执。营地操作沿用修订号、鉴权与在途活动互斥规则。
弹珠树共用 `state.balls/ballRecoveryUnix` 与原 `recover` 规则,没有额外生产/领取接口;显示的倒计时用最近服务端时间加客户端单调时间推算,余额只在服务端快照确认后更新。伙伴互动只更新选择和累计次数,客户端驱动已制作肖像节点的缩放反馈;无资源产出。
`capture` 为当前快照的池展示:`tutorial/completed/pityReady/count/duplicateStreak/entries`,每项为 `{pet,baseProbability,probability}`,概率是0~1的小数。当前普通池五种等权,各20%;首次教学固定芽芽,不推进普通次数或保底。普通捕捉连续4次重复后,下次仅在未拥有伙伴中按权重抽取;获得新伙伴清零重复计数,集齐后保底暂停、重复计数归零。重复发20对应物种碎片。扣券、随机结果、次数、保底、碎片和操作日志同事务提交,客户端不能指定结果或随机种子。
最近一次已提交捕捉附 `lastCaptureResult`,结构与捕捉 `result` 相同;不存在时省略,不把默认pet=0视为历史结果。重放返回原回执及最新快照,不重新抽取;客户端恢复待确认的 `capture` 后展示原结果。`poolVersion` 是抽取时的配置版本,`id` 是原请求号。
尚未完成的弹珠附 `shot:{id,readyAt,path:[{x,y}],bin,candy,coins}`;挑战附 `battle:{id,readyAt,snapshot:{level,stages,formation,stageId,config,legacy}}`。最后一次战斗结果附 `lastBattleResult:{id,stageId,won,firstClear,duration,durability,defeated,reward:{coins,candy,balls}}`。`reward` 是该关首通基准,只有 `firstClear=true` 时实际发放。
schema=1/2服务端存档在首次读写事务内迁移到3。schema=1旧 `cleared=true` 只映射为1-1已通关;schema=2既有关卡进度不变。保留余额、目标、前三伙伴的拥有/进化/碎片和阵容,新增两种伙伴初始未拥有;已拥有芽芽视为完成教学,普通捕捉/保底从0开始,不补发伙伴或奖励。旧未结算弹珠继续用已保存轨迹/奖励;G1旧挑战标为 `legacy:true`,按原G1表现与原80/40/3奖励结算;G2三伙伴挑战保留冻结的三伙伴配置和原关卡奖励,新五伙伴配置不改写在途活动。未知未来schema拒绝处理,不重置账号。客户端PlayerPrefs的G0余额仍不迁入服务端。
上述schema1/2迁移后继续执行3→4迁移;既有schema3保留钱包、捕捉次数/保底/回执、伙伴、关卡和在途活动,初始化空装饰库存/布局、默认休息伙伴0和互动次数0,不扣费也不补发奖励。该阶段得到schema4,随后继续下述任务迁移。旧冻结战斗配置允许没有 `camp` 字段,新实时配置必须带营地数据。
4→5迁移保留全部钱包、教学/关卡、捕捉、营地、回执和在途活动;初始化新的每日进度/领取标志及七日领取标志,当次访问登记为首个累计登录日,不追溯旧发射/战斗/互动总数,不自动发签到奖励。该阶段得到schema5,随后继续下述商店迁移。旧冻结战斗配置允许没有 `daily` 字段,按保存的战斗数值与奖励继续结算。
商店阶段迁移执行5→6:只新增空的`shopBought`,不自动领补给、不清空每日/签到/捕捉/营地或钱包;旧未完成活动与回执保留。旧冻结战斗配置允许缺少`shop`字段,战斗仍按原配置与奖励结算。随后执行下述邮件迁移与宝箱迁移,再执行阵容扩展,当前服务端实时快照为schema9;客户端兼容schema6~9服务滚动更新,低于对应版本时邮件/宝箱入口提示稍后重进。
邮件扩展(2026-10-18):6→7只新增`mails`,按`config.mail.initial`保存初始通知/附件,`sentAt=now`、`expiresAt=now+lifetimeSeconds`。新旧账号首次迁移均只建记录,不自动发附件;schema7后读取不补发、不重建邮件。原钱包、伙伴、营地、捕捉、日常、购买次数、回执与在途活动保留。旧冻结战斗无需mail字段,仍按保存数值与奖励结算;实时schema7要求完整mail配置。
`state.mails`最多100封,每封为`{mailId,title,body,reward:{coins,candy,balls,tickets},sentAt,expiresAt,read,claimed,expired}`。ID在账号内唯一,服务端时间达到`expiresAt`即过期,已记录的`expired`不因时钟回退复活。到期和已领取记录仍保留供阅读;首页红点仅表示有效未读邮件或有效未领附件,客户端倒计时使用服务端时间加单调时钟,实际可领性仍以服务端为准。
- `mail.read`携带`mailId`:只标已读,不发附件,回执`{id,mailId}`。
- `mail.claim`携带`mailId`:领取保存的附件,忽略客户端奖励;同时标记已读/已领取,回执`{id,mailId,claimedCount:1,reward}`。
- `mail.claimAll`携带1~20个不重复的`mailIds`:逐封处理,回执`{id,claimedCount,reward,entries:[{mailId,status}]}`。`status`为`claimed/expired/already_claimed/no_attachment/not_found`,失效邮件不阻止有效附件到账;参数重复、空数组、超容量或错误类型整单拒绝为`invalid_input`。
邮件操作继续使用鉴权、revision和在途活动互斥。单封业务错误为`mail_not_found/mail_expired/mail_already_claimed/mail_no_attachment`;拒绝也持久化,条件变化须新请求。钱包、标志、批量结果及操作日志在同一事务提交;存储失败全部回滚。原成功请求在重启、跨日或邮件到期后重放仍返回原结果,不二次发附件。客户端仅在完整有效快照和匹配的邮件回执确认后清理请求,并恢复领取结果弹窗。
当前初始邮件为7天有效的欢迎补给(糖果20、弹珠5)和无附件营地通知,属于本地开发基线;尚无运营投递/群发/删除邮件接口,修改initial不会向已有schema7账号自动追加新邮件。
宝箱扩展(2026-10-19):7→8只新增`chests:[0,0,0]`与`chestDailyClaimed:0`,保留原钱包、伙伴、关卡、捕捉、营地、日常、购买次数、邮件、回执与在途活动;迁移不发放任何免费宝箱。`config.rewards`定义三种箱(`id/name/kind/description/contents/choices`)、每日箱ID与首通掉落表。当前ID0「绿野补给箱」固定内容金币60/糖果30/弹珠2,同时作为每日宝箱;ID1「伙伴碎片自选箱」为自选箱,五个选项各对应一种伙伴碎片×10;ID2「溪口大礼箱」固定内容金币150/糖果80/弹珠5/捕捉券1。首通掉落:1-1→箱0、1-3→箱1、1-5→箱2,每次首通只掉一个,重复挑战不再掉落。
箱内容使用`{coins,candy,balls,tickets,shardsPet,shards}`:`shards>0`时`shardsPet`为伙伴ID并把碎片计入`state.shards`,否则`shardsPet=-1`且`shards=0`。公共响应附`rewards:{dailyClaimed}`,与`state.chestDailyClaimed`一致。
- `chest.claimDaily`只把每日箱加入库存(回执`{id,chest,day,count:1}`),不发放箱内容;每服务器日一次,与商店限购共用UTC+8日切,时钟回退不刷新。
- `chest.open`回执`{id,chest,kind,choice?,remaining,chestReward}`,`remaining`为同类箱剩余数量;固定箱忽略`choice`,自选箱缺少或越界的选择返回`invalid_choice`。扣箱、发奖(含碎片)与操作日志同事务提交;失败整体回滚,同一请求重放返回原回执,不重复发放。
宝箱业务错误为`invalid_chest/chest_missing/chest_claimed/invalid_choice`,沿用鉴权、revision与在途活动互斥。`battle.finish`首通回执在掉落时新增`chest`字段表示获得的箱ID。客户端校验回执ID、箱ID与箱内容;JsonUtility会把缺失的嵌套奖励物化为全零对象,因此打开的箱必须包含至少一项非零奖励,每日箱回执则不得携带非零奖励。
阵容与关卡扩展(2026-10-20):8→9只把`stages/shards`扩到10项、`clearedStages`扩到20项,新伙伴全部未拥有、新关卡全部未通关,不发放伙伴、关卡首通奖或宝箱。`config.pets`现为10只:岩团团、火喵、芽芽、闪闪雀、泡泡龟、岩甲犀(岩·控制·减速)、烈焰狮(火·输出·双目标)、藤蔓灵(草·支援·治疗)、雷鸣豹(电·输出·双目标)、潮汐鲸(水·守护·护盾)。捕捉池权重十项等权10%,教学仍固定芽芽;自选箱十个选项各对应一种伙伴碎片×10。
`config.stages`现为20关,每关新增`chapter`:1-1~1-10为「绿野初程」,2-1~2-10为「溪谷守望」。每关仍为三波九个敌人、固定五类敌人;`hpScale`由1.0递增到4.0、`attackScale`由1.0递增到2.35,1-5起三路线。首通掉落扩展为1-1→箱0、1-3→箱1、1-5→箱2、1-10→箱1、1-15→箱0、1-20→箱2,仍为每关首通只掉一次。
`autoDeploy`改为按配置选择:前排优先射程最短的已拥有伙伴,后排优先射程最长的,按路线依次填充,不再依赖固定的五个伙伴ID。`camp.interact`与`evolve`的伙伴边界改为`config.pets`长度。
成功与业务拒绝均返回 HTTP 200,业务拒绝 `ok:false`,同时给出最新快照。常见错误:`stale_revision`、`pending_activity`、`insufficient_balls/candy/tickets`、`evolve_requirements`、`invalid_formation`、`activity_missing/not_ready`、`goal_incomplete/claimed`、`level_cap`、`stage_locked`、`invalid_stage`。格式错误400、鉴权失败401、请求号冲突409、维护503和存储失败500不确认业务操作;客户端保留未确认请求重试。
SQLite `game_states` 与 `game_operations` 在同一 `BEGIN IMMEDIATE` 事务中写入。请求号按玩家唯一,扣费与日志同时提交;写入失败整体回滚。客户端请求队列只保存原始操作、不保存 token,按端点与玩家隔离;401 会重新登录同一游客身份,再提交同一请求。客户端收到完整有效快照才清理请求队列,失败时禁用业务操作并提供重试。禁止回退到 G0 本地钱包。
营地业务错误包括 `camp_build_locked/camp_rest_locked`、`invalid_decoration/invalid_camp_slot/invalid_pet`、`camp_slot_occupied/camp_slot_empty`、`insufficient_coins`;缺失/错误类型字段返回已记录的 `invalid_input` 业务拒绝。
任务/签到业务错误包括 `daily_expired`、`task_incomplete`、`reward_claimed`、`signin_locked`、`invalid_task/invalid_signin`;同样持久化业务拒绝,条件变化后须新建请求号。领取沿用在途活动互斥、鉴权与修订号规则。
商店业务错误包括 `shop_expired`、`shop_limit`、`goods_locked`、`invalid_goods`、`insufficient_coins`,同样沿用修订号、在途活动互斥与持久业务拒绝;参数类型错误返回`invalid_input`业务拒绝。条件变化后重新确认并使用新请求号。
弹珠只能按服务端轨迹播放;奖励不接受客户端数值。战斗在开始时由服务端按冻结快照计算结果,完成请求不接受客户端 `won`;最早结算时间为模拟时长的一半(最高2倍速)。暂停或重进时可以重新播放已授权挑战,不再创建新挑战。此时间门槛不验证逐帧操作,当前仅适用没有战中决策的教学自动战斗;加入技能输入或新战斗规则时须扩展验证协议。
## WebSocket
+3
View File
@@ -2,6 +2,8 @@
所有生成资源须按类型登记到对应文件。每条包含:路径、简要说明(用途、生成方式等)。未登记视为流程未完成。
敌方角色标准生产与三动作登记要求见 [EnemyCharacterProduction.md](Design/Character/EnemyCharacterProduction.md),配方入口 `Config/Art/EnemyCharacters/{Name}.json`。
| 类型 | 登记文件 | 典型内容 |
| --- | --- | --- |
| model | [ResDesc_Model.md](./ResDesc_Model.md) | 3D 模型(GLB/FBX 等)及配套贴图 |
@@ -9,5 +11,6 @@
| picture | [ResDesc_Picture.md](./ResDesc_Picture.md) | 贴图、UI 图集、概念图、参考图 |
| sound | [ResDesc_Sound.md](./ResDesc_Sound.md) | 音效、BGM、语音 |
| effect | [ResDesc_Effect.md](./ResDesc_Effect.md) | 粒子、特效预制体、VFX |
| config | [ResDesc_Config.md](./ResDesc_Config.md) | 玩法规则、数值与关卡配置 |
新增资源类型时:在本表增加一行,并新建对应 `Doc/ResDesc_<Type>.md`。
+41
View File
@@ -4,3 +4,44 @@
| 资源路径 | 简要说明 |
| --- | --- |
| `Tools/output/mixamo/Male/*.fbx` | Mixamo 男骨架(Y Bot)基础动作中间件,FBX for Unity / Without Skin / 30fps。含 Idle、Walking、Running、Punching、Kick(Kicking)、SwordSlash(Stable Sword Outward Slash)、HitReaction、FallingFlatImpact。脚本:`Tools/download_mixamo_anims.py`。未入库 Bundles。 |
| `Tools/output/mixamo/Female/*.fbx` | Mixamo 女骨架(X Bot)同套动作,导出设置同上。未入库 Bundles。 |
| `Tools/output/mixamo/manifest.json` | 上述 16 个 FBX 的下载清单。 |
| `Tools/dgx3d_animal_pipeline.py` | 非人:已验收 FBX/GLB → TokenRig + UniMate Idle/Walk/Attack(不重做 DGX 模);`--caps-only` 门禁 |
| `Tools/install_animal_rigged.py` | 将 pipeline 产物拷入 `Characters/Animal/{Name}/Rigged` 与 `Anims` |
| `AIClient/AgentScripts/SetupAnimalAnimator.cs` | Generic Animator;Motion Int 0=Idle/1=Walk,Attack Trigger单次攻击;样例 `SetupRockBall`,正式敌方由配方入口调用 |
| `Tools/output/{name}_dgx/` | DGX 非人中间件(rigged_fbx / anims,不进 Bundle) |
| `Tools/output/rockball_dgx/` | 岩团团中间件;旧 `3cead72a` 19骨代理与验收低模空间不一致,已停用;当前采用同角色 `high_rig/rigged.glb` 12骨和 `walk_verified/` 单Walk验证 |
| `…/RockBall_Rigged.fbx` | TokenRig 绑骨 FBX(减面约 2k) |
| `…/anims/RockBall_{Idle,Walk,Attack}.fbx` | UniMate 三动作;入库后见 Bundles |
| `AIClient/Assets/Bundles/Characters/Animal/RockBall/Anims/RockBall_Idle.fbx` | 2026-10-20:同角色12骨专用UniMate Idle原始源动作,已替换旧19骨来源;任务 `aigame_idle_54f85e5750484ecca7d8eaf439a02f77` |
| `…/RockBall_Walk.fbx` | 2026-10-20:同角色12骨重新生成的双足直立Walk原始剪辑;未做脚底与循环修正的源数据 |
| `…/RockBall_Attack.fbx` | 2026-10-20:同角色12骨专用UniMate Attack原始源动作,已替换旧19骨;任务 `aigame_attack_40bc28cae3d24ad0bd737fae1eb6aafc` |
| `…/RockBall_Animator.controller` | 三动作Generic,默认Idle;Motion=0/1、Attack Trigger,支持Idle/Walk进入Attack并恢复请求状态,Root Motion关闭;正式入口 `Tools/enemy_character_pipeline.py` |
| `…/Clips/Walk.anim` | 2026-10-20:UniMate原始Walk+离线根骨绑定姿态校准、脚底贴地、周期接缝与短腿交替步幅编辑;1.1秒循环,步幅0.06m、抬脚0.018m;最终播放资产 |
| `…/Clips/Idle.anim` | 新12骨源动作+离线呼吸/参考姿态/贴地收尾;1.6秒循环,首尾一致 |
| `…/Clips/Attack.anim` | 新12骨源动作+离线蓄力/冲撞/恢复编辑;1秒单次,0.45秒OnEnemyAttackImpact事件,首尾恢复Idle参考 |
| `Tools/output/rockball_dgx/walk_verified/motion/` | 本次UniMate原始GLB/FBX、带高模预览、motion.npy、请求记录及日志;明确双足英文提示词,face-right=bone_8、face-left=bone_10;任务 `aigame_walk_89299832de714470b6ed70e5cc837880` |
| `Tools/generate_animal_walk.py` | 复用既有骨架生成单Walk;保留英文提示词与明确左右骨,独立远程辅助脚本,不改外部LLM3DGraphics源码 |
| `AIClient/AgentScripts/FinalizeAnimalWalk.cs` | 离线烘焙入口;可调strideMeters/liftMeters/cycleSeconds,最终保存.anim,无运行时反向旋转或程序拼动画 |
| `AIClient/AgentScripts/VerifyAnimalWalk.cs` | 核验静态形状、61帧蒙皮顶点、根骨倾角、左右脚步幅、循环接缝和Animator连续播放;报告 `Tools/output/rockball_walk_audit/verification.txt` |
| `Tools/run_rockball_walk.ps1` | 单Walk可复现入口:默认使用缓存骨架/源动作,重做权重→Pipeline导入→Setup→Finalize→Verify并更新manifest;`-Generate`重新生成源动作,`-BuildReview`重建并排验收场景 |
| `Tools/enemy_character_pipeline.py` / `Config/Art/EnemyCharacters/RockBall.json` | 敌方三动作标准入口与样例配方;同rig来源哈希、蒙皮、Pipeline导入、离线收尾、整段QA、Enemy视觉Variant与并排场景 |
| `Tools/generate_enemy_motions.py` | 按配方顺序生成指定Idle/Walk/Attack,生成成功后封存源FBX哈希与回执;失败保留旧有效产物 |
| `AIClient/AgentScripts/FinalizeEnemyMotions.cs` | 根据配方将Idle与Attack源动作离线编辑为可交付.anim,保存循环、命中事件与恢复参考姿态 |
| `AIClient/AgentScripts/VerifyEnemyMotions.cs` | 三动作各121帧实际蒙皮、根姿态、脚底、步幅、接缝、事件、控制器和Play轮播验证 |
| `Tools/output/enemy_characters/RockBall/motions/{Idle,Attack}/` | 新UniMate源GLB/FBX、带高模预览GLB、motion.npy、任务日志/回执;同rig哈希62f41bc5…6ca6c0f,与Walk一致 |
| `Tools/output/enemy_characters/RockBall/{production_manifest.json,verification.txt,motion_processing.txt,walk_processing.txt}` | 三动作来源、哈希、配方、事件时刻、生产状态与验收报告;生成源+离线编辑,不含运行时骨骼补丁 |
## 火喵 FireCat T1 伙伴三动作(2026-10-20)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `Tools/output/companions/FireCat/motions/{Idle,Walk,Attack}/` | DGXA UniMate同角色22骨源GLB/FBX、高模预览、npy、回执与日志;rig哈希62a50970…3bea一致。Idle/Walk使用CUDA,Attack首次CUDA内存不足后独立CPU任务成功,未中断其他模型服务。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/Anims/FireCat_{Idle,Walk,Attack}.fbx` | Pipeline导入上述三段同rig原始动画;Generic、共享Avatar,保留来源,不直接作最终播放。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/Clips/Idle.anim` | 1.6秒循环,源动作8%+离线轻呼吸/贴地/端点绑定姿态;最大形变约0.01596m,根倾角约1.85°。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/Clips/Walk.anim` | 1.1秒循环,全骨骼源首帧相对绑定校准、保留35%运动+交替短步/贴地/周期闭合;解决源69.5°根倾斜和坐姿腿偏移,左右步幅约0.06248/0.04547m,根倾角约4.35°。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/Clips/Attack.anim` | 1.1秒非循环,源动作12%+双爪75°抬起/小幅前伸的离线施法,0.55秒OnCompanionAttackImpact事件,恢复Idle绑定参考;根倾角约11.31°,视觉根位移<0.005m。火球/伤害未接入。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/FireCat_Animator.controller` | 默认Idle,Motion Int 0/1切换Idle/Walk,Attack Trigger单次施法后恢复请求状态;Root Motion关闭。实际Play三状态与根位置固定通过。事件接收器应位于Animator所在Model或由该处转发。 |
| `Tools/output/companions/FireCat/{production_manifest.json,verification.txt,play_verification.txt,walk_verification.txt,motion_processing.txt,walk_processing.txt}` | 完整来源与哈希、配方、出手时刻、三段各121帧蒙皮及状态切换、单Walk门禁和实际Play报告;完整入口已成功复现,status=validated。 |
| `Tools/character_animation_pipeline.py`、`Config/Art/Companions/FireCat.json` | 伙伴/敌方共享三动作入口与火喵正式配方,包含自身骨名、全骨骼Walk校准、尾部蒙皮修正、源动作幅度与施法参数;默认缓存,--generate显式推理,--generation-device cpu可选。 |
+67
View File
@@ -0,0 +1,67 @@
# 閰嶇疆璧勬簮璇存槑
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/Design/Scene/Battlefield/A/battlefield_component_prompts.json` | A路缁块噹涓夊矓鍙g殑鍦拌〃涓� 5 绫荤粍浠跺垎浠舵彁绀鸿瘝锛涗互鏂囧瓧绾︽潫鍖归厤涓荤晫闈� Candy 椋庢牸锛岄粯璁や笉涓婁紶椤圭洰鍐呴儴鍙傝€冨浘锛岀敱 `Tools/generate_battlefield_components.py` 璋冪敤 `gpt-image-2.5` 鐢熸垚銆� |
| `Doc/Design/Scene/Battlefield/**/*_gpt_image_status.json` | GPT Image 2.5 浠诲姟鍥炴墽涓庢枃浠� URL锛岃�褰曟€昏�銆佸湴琛ㄥ拰缁勪欢鍥剧殑鐢熸垚鐘舵€侊紱鐢遍」鐩�浘鍍忕敓鎴愯剼鏈�嚜鍔ㄥ啓鍏ャ€� |
| `Tools/output/battlefield/A/model_validation.json` | A 鏂规� 5 绫荤粍浠� GLB 绾圭悊鏍¢獙銆乆Pbr FBX 瀛樺湪鎬с€佺洰鏍囬潰鏁板拰鍦拌〃閰嶉�闃诲�璁板綍銆� |
## 闃靛�涓庡叧鍗℃墿灞曪紙2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Config/Gameplay/greenfield.json` 鐨� `pets` / `stages` / `capture` / `rewards` | 鎵╁埌10鍙�紮浼淬€�20鍏筹紙1-1锝�1-10 缁块噹鍒濈▼銆�2-1锝�2-10 婧�胺瀹堟湜锛夛紱姣忓厓绱犱袱鍙�紝瑕嗙洊瀹堟姢/杈撳嚭/鏀�彺/鎺у埗锛涙崟鎹夋睜鍗侀」绛夋潈锛岃嚜閫夌�鍗佷釜纰庣墖閫夐」锛岄�閫氭帀钀芥墿鍒板叚澶勩€侰Make鎸�8000瀛楄妭鍒嗗潡宓屽叆锛圡SVC鍗曞瓧闈㈤噺涓婇檺锛夛紝鐗堟湰鍝堝笇浠嶅彇鏁翠唤JSON銆俿chema8鈫�9鍙�墿鏁扮粍锛屼笉鍙戜紮浼存垨棣栭€氬�銆傚師鐢�4335椤规柇瑷€銆�227缁勫弻绔��鐓т笌闅旂�璐﹀彿瀹為檯鐐瑰嚮閫氳繃銆� |
## 瀹濈�閰嶇疆鎵╁睍锛�2026-10-19锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Config/Gameplay/greenfield.json` 鐨� `rewards` | 鎵嬪伐缂栧啓涓夌�瀹濈�锛堝浐瀹氱�銆佽嚜閫夌�鐗囩�銆佸ぇ绀肩�锛夌殑鍐呭�涓庤嚜閫夐€夐」銆佹瘡鏃ョ�ID鍙婇�閫氭帀钀借〃锛涙帀钀戒负1-1鈫掔�0銆�1-3鈫掔�1銆�1-5鈫掔�2銆傜敱CMake宓屽叆鏈嶅姟绔�苟鐢熸垚鍐呭�鍝堝笇锛屽�鎴风�璇诲彇鍚屼竴閰嶇疆銆俿chema7鈫�8鍙�柊澧炵┖绠卞簱瀛樹笌姣忔棩棰嗗彇鏍囧織锛岃縼绉讳笉鍙戝厤璐圭�銆傚師鐢�3598椤规柇瑷€銆丠TTP闅旂�骞跺彂涓庣嫭绔嬭处鍙峰疄闄呯偣鍑婚€氳繃銆� |
## 閭�欢閰嶇疆鎵╁睍锛�2026-10-18锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Config/Gameplay/greenfield.json` 鐨� `mail` | 鎵嬪伐缂栧啓鍒濆�閭�欢閰嶇疆锛�7澶╂湁鏁堟湡锛涙�杩庤ˉ缁欓檮浠剁硸鏋�20/寮圭彔5銆佹棤闄勪欢钀ュ湴閫氱煡銆傜敱CMake宓屽叆鏈嶅姟绔�苟鐢熸垚鍐呭�鍝堝笇锛屽�鎴风�璇诲彇鍚屼竴閰嶇疆銆俿chema6鈫�7浠呭垱寤洪偖浠惰�褰曪紝鏄惧紡棰嗗彇鎵嶅彂闄勪欢锛涘喕缁撴棫鎴樻枟閰嶇疆鍏佽�缂簃ail锛岄厤缃�彉鏇翠笉鍚憇chema7璐﹀彿閲嶆柊鍙戝垵濮嬩俊銆傚師鐢�1717椤规柇瑷€銆�99缁勫弻绔�垬鏂楀�鐓с€丠TTP鍙婇殧绂昏处鍙峰疄闄呯偣鍑婚€氳繃銆� |
| 鏃ユ湡 | 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- | --- |
| 2026-10-16 | `Config/Gameplay/greenfield.json` | 棣栫珷鍓嶄簲鍏崇殑鍞�竴鐜╂硶閰嶇疆婧愶紱鎵嬪伐缂栧啓JSON锛屽寘鍚�叡浜�垚闀�/缁忔祹銆佸脊鐝犲�鍔变笌鐗╃悊鍙傛暟銆佷笁鍙�紮浼淬€佷簲绫绘晫浜恒€佸厓绱犵幆銆佹尝娆′笌閫愬叧棣栭€氬�鍔便€傜敱CMake鐢熸垚鍙��C++澶村苟宓屽叆AIServer锛岃繑鍥炵粰瀹㈡埛绔�紱UI鐢熸垚鑴氭湰涔熻�鍙栨�鏂囦欢銆傜増鏈�敱婧愭枃浠禨HA256鍓�12浣嶇敓鎴愶紝淇�敼鍚庨』閲嶆柊鏋勫缓鏈嶅姟绔�€佹�鏌ュ弻绔��鐓у拰蹇呰�UI閲嶅缓銆備笉鏄疷nity搴忓垪鍖栬祫浜э紝涓嶅彟寤� `.meta`銆� |
浜斿叧浠嶄娇鐢ㄤ腑澶�矾绾裤€佷笁娉�節涓�晫浜猴紱鏃�1寰呯粨绠楁寫鎴橀€氳繃 `legacy` 璺�緞淇濈暀鍘熻〃鐜帮紝涓嶉殢鏂拌〃鏀瑰啓濂栧姳銆備笂琛ㄤ笁浼欎即璇存槑涓哄垵娆$櫥璁扮増鏈�紝鐜拌�鎵╁睍濡備笅銆�
| 鏃ユ湡 | 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- | --- |
| 2026-10-16 | `Config/Gameplay/greenfield.json` | 鎵╁睍鑷充簲浼欎即锛屾柊澧炵數绯婚棯闂�泙銆佹按绯绘场娉¢緹灞炴€т笌鎶€鑳借�鏄庯紱鏂板� `capture` 鏁欏�浼欎即銆佷簲椤规潈閲嶄笌杩炵画閲嶅�涓婇檺銆傛櫘閫氭睜鍚�20%锛�4娆¢噸澶嶅悗淇濆簳鏈�嫢鏈夛紝鏁欏�鐙�珛璁℃暟銆備粛鐢盋Make宓屽叆骞剁敓鎴愬唴瀹瑰搱甯岋紝瀹㈡埛绔�/UI鐢熸垚鍣ㄥ叡鐢�紱鏃�2涓変紮浼村湪閫旀垬鏂椾繚鐣欏喕缁撻厤缃�€傛湇鍔$�1284椤规柇瑷€銆�97缁勫弻绔�垬鏂楀�鐓т笌鐙�珛璐﹀彿瀹炴祴閫氳繃銆� |
| 2026-10-16 | `Config/Gameplay/greenfield.json` 鐨� `camp` | 钀ュ湴瑙i攣涓庡浐瀹氭Ы浣嶉厤缃�細浼戞伅鍖�1-3銆佸缓閫犲彴1-5銆�3涓�Ы浣嶏紱涓変欢瑁呴グ鍚嶇О/璇存槑涓庢祴璇曚环120/180/240閲戝竵銆傜敱鍚屼竴CMake娴佺▼宓屽叆鏈嶅姟绔�紝UI鐢熸垚鍣ㄥ拰瀹炴椂瀹㈡埛绔��鍙栵紱鍘熺粡娴�/鎴樻枟/鎹曟崏閰嶇疆涓嶅彉銆傛柊瀛樻。schema4淇濆瓨甯冨眬涓庢嫢鏈夎�褰曪紝鏈��鍔犵�浜屽�寮圭彔鐢熶骇銆� |
| 2026-10-16 | `Config/Gameplay/greenfield.json` 鐨� `daily` | 姣忔棩浠诲姟/绱��鐧诲綍閰嶇疆锛孶TC+8鏃ョ晫锛屽彂灏�3娆�/姝e父缁撴潫鍐掗櫓1鍦�/浼欎即浜掑姩1娆★紝鍚勫�鍔�5寮圭彔锛涗竷鏃ュ�鍔卞脊鐝�10/5/5/10/5/10/20銆傜敱CMake鍐呭�鍝堝笇宓屽叆锛屽�鎴风�璇诲彇鍚屼竴閰嶇疆锛泂chema5淇濆瓨褰撴棩杩涘害/棰嗗彇涓庣疮璁$櫥褰�/涓冮」棰嗗彇鏍囧織銆備笉閲囩敤瀹㈡埛绔�椂閽燂紝濂栧姳浠呯敱鏈嶅姟绔��鍙栦簨鍔″彂鏀俱€�1493椤瑰師鐢熸柇瑷€鍙�97缁勫弻绔�垬鏂楀�鐓ч€氳繃銆� |
| 2026-10-16 | `Config/Gameplay/greenfield.json` 鐨� `shop` | 涓夐」纭�畾鎬цˉ缁欙細鍏嶈垂5寮圭彔姣忔棩1娆★紱100閲戝竵鎹�20绯栨灉锛�1-1瑙i攣銆佹瘡鏃�3娆★紱300閲戝竵鎹�1鎹曟崏鍒革紝1-3瑙i攣銆佹瘡鏃�1娆°€傞厤缃�寘鎷�晢鍝両D/璇存槑銆侀噾甯佷环銆佽В閿併€侀檺璐�笌鍥涚被璧勬簮濂栧姳锛屽悓涓€CMake娴佺▼宓屽叆骞剁敓鎴愬搱甯岋紱schema6淇濆瓨涓夐」鏃ヨ喘涔版�鏁帮紝鍏辩敤dailyDay鍒锋柊銆傝皟鏁村晢鍝両D/鏁伴噺鎴栭檺璐��閲忛』鍚屾�瀛樻。杩佺Щ涓嶶I瀹归噺銆�1620椤瑰師鐢熸柇瑷€銆�98缁勫弻绔��鐓у強鐪熷疄鐐瑰嚮閫氳繃銆� |
| 2026-10-18 | `Config/Gameplay/greenfield.json` 鐨� `stages`/`pets.ability` | 涓夎矾绾垮叧鍗″紑鏀撅紙1/1/2/2/3 璺�嚎銆佹瘡璺�墠鍚庢Ы锛変笌浜斾紮浼� T1/T2 鎶€鑳介厤缃�紱鏂板� `bossControlScale` 闄愬埗棣栭�鍑忛€熸晥鏋溿€侰++ 涓� Unity 鍏变韩瑙f瀽/鏍¢獙锛屾垬鏂楀紑濮嬪喕缁撻厤缃�紱鎶€鑳藉弽棣堝�鐢ㄥ凡鐧昏� Arena/Prefab 鐗规晥鑺傜偣銆�3505 椤瑰師鐢熸柇瑷€銆�189 缁勫弻绔��鐓ч€氳繃銆� |
| 2026-10-18 | `Doc/Design/Scene/Battlefield/battlefield_scene_manifest.json` | 鎴樺満鍦烘櫙鐢熶骇娓呭崟锛氫繚瀛樹笁閫変竴缁撴灉銆佺嫭绔嬪湴琛ㄣ€佺粍浠剁被鍒�笂闄�15銆佺粍浠舵ā鍨嬭矾寰勩€佺洰鏍囬潰鏁板拰鏈€缁� Prefab 璺�緞锛涚敱 `Tools/battlefield_scene_pipeline.py` 鏍¢獙锛孶nity 鐢� `AgentScripts/BuildBattlefieldScene.cs` 鎷艰�銆� |
| 2026-10-18 | AIClient/AgentScripts/BuildBattlefieldAssets.cs | 战场模型 Unity Pipeline 导入脚本:组件 Prefab、独立地表 Prefab、材质、可读网格及非凸 MeshCollider。 |
| 2026-10-18 | Doc/Design/Scene/Battlefield/A/ground_model_ref_gpt_image_status.json | 地表模型参考图的 GPT Image 2.5 生成回执;原 ground.png 继续作为路线布局审核图。 |
| 2026-10-18 | `Doc/Design/Scene/Battlefield/A/ground_model_ref_gpt_image_status.json` | 地表模型参考图的 GPT Image 2.5 生成回执;原 `ground.png` 继续作为路线布局审核图。 |
| 2026-10-19 | `Tools/output/battlefield/A/ground_model_ref_hunyuan_status.json` | 地表单一连续地形参考图的混元网页图生 3D 回执;使用 50k 档成功生成并下载 GLB。 |
| 2026-10-20 | `Doc/Design/Scene/scene_review_manifest.json` / `Tools/output/scene_review/Battlefield_Greenfield/review_report.json` | Unity????????????`BuildSceneReview.Build`?????Battlefield Prefab???????`.unity`???ReviewCamera/KeyLight/Label???`ValidateReview`????? |
| 2026-10-20 | `Doc/Design/Scene/Battlefield/B/battlefield_component_prompts.json` | Stream Bridges ???????????????/??/????? Prefab???/??/??/??????????? 2 ???????? |
## 鏁屾柟瑙掕壊缇庢湳鐢熶骇锛�2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Config/Art/EnemyCharacters/RockBall.json` | 鏁屾柟瑙掕壊鐢熶骇閰嶆柟鏍蜂緥锛氬悓rig鏉ユ簮銆侀�鍚�/瑙e墫銆佽韩楂�/棰勭畻銆佷笁鍔ㄤ綔鏉ユ簮涓庢枃鏈�€佺�绾挎�骞呭拰鏀诲嚮闃舵�銆丒nemy瑙嗚�杈撳嚭鍙婇獙鏀跺弬鏁帮紱涓嶆敼鍙樼帺娉旹nemyConfig鏁板€笺€� |
| `Tools/output/enemy_characters/RockBall/production_manifest.json` | 鏍囧噯鍏ュ彛鐢熸垚鐨勬潵婧愬搱甯屻€佸姩浣滃洖鎵с€佸懡涓�椂鍒汇€丒dit/Play QA鍜屼氦浠樼姸鎬侊紱validated瀹屾暣閫氳繃锛宔dit_validated浠呯紪杈戞湡閫氳繃锛宐uilding鏈�畬鎴愩€� |
| `Tools/output/enemy_characters/RockBall/{verification,play_verification,motion_processing,walk_processing}.txt` | 鏈��涓夊姩浣溿€佸垏鎹€€丳lay杞�挱涓庣�绾垮埗浣滄姤鍛娿€� |
## 鐏�柕浼欎即鐢熶骇鍑嗗�锛�2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Config/Art/Companions/FireCat.draft.json` | T1浼欎即鐏�柕鐨勭敓浜ч厤鏂硅崏绋匡細浼欎即瑙嗚�杈撳嚭銆佸弻瓒充笁鍔ㄤ綔鑻辨枃鎻忚堪銆佽繙绋嬫柦娉曚簨浠朵笌璧峰�鍙傛暟銆佺嫭绔嬮獙鏀朵綅缃�€傞�鍚嶅緟鑷�韩TokenRig瀹屾垚鍚庢�鏌ュ~鍐欙紝boneMappingReady=false绂佹�璇�繍琛岋紱褰撳墠鏈�敓鎴愭ā鍨嬫垨鍔ㄧ敾銆� |
| `Tools/character_animation_pipeline.py` | 浼欎即/鏁屾柟鍏变韩涓夊姩浣滃叆鍙o紝澶嶇敤宸插瓨鍦ㄧ殑閰嶆柟鐢熶骇瀹炵幇锛涙棫鏁屾柟鍛戒护鍏煎�銆備紮浼寸敤閫斾笌鏂芥硶閫傞厤宸查€氳繃3涓猆nity鑴氭湰缂栬瘧妫€鏌ュ拰4椤筆ython娴佺▼娴嬭瘯锛岀伀鍠靛疄闄呰�瑙夐獙鏀朵粛寰呭畬鎴愩€� |
| `Config/Art/Companions/FireCat.json` | 鐏�柕T1姝e紡閰嶆柟锛�22楠ㄨ嚜韬�槧灏勩€�1998tris/0.55m銆佸悓婧愪笁鍔ㄤ綔銆乄alk鍏ㄩ�楠兼牎鍑嗐€佹祴鍦板熬閮ㄦ潈閲嶃€両dle/鏂芥硶骞呭害銆�0.55绉掍簨浠躲€佷紮浼碢refab涓庣嫭绔嬮獙鏀跺満鏅�紱瀹屾暣鍏ュ彛Edit/Play閫氳繃銆傛棫draft淇濈暀涓轰笉鍙�繍琛岀殑鍒濆�璁板綍銆� |
| `Tools/output/firecat_dgx/high_rig/rig_request.json` | rig_character_source.py璁板綍鍚岃�鑹查珮妯″拰rig鐨凷HA256銆乷riginal妯℃澘涓庝换鍔$洰褰曪紱宸查獙璇佺紦瀛樺彲閲嶇敤锛�--generate鏄惧紡缁戦�銆� |
| `Tools/output/companions/FireCat/production_manifest.json` | 浼欎即瀹屾暣鍒朵綔鏉ユ簮涓庡搱甯屻€両dle/Walk/Attack鍥炴墽锛圓ttack=CPU锛夈€佽�瑙塒refab銆佸嚭鎵嬫椂鍒汇€丒dit/Play鎶ュ憡涓巚alidated鐘舵€侊紱鐢卞叡浜�叆鍙g敓鎴愩€� |
+12
View File
@@ -4,3 +4,15 @@
| 资源路径 | 简要说明 |
| --- | --- |
## G0 战斗反馈(2026-10-15)
- 资源:`AIClient/Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 的 `Projectiles/Shot0~2` 节点。
- 用途:原型远程攻击与治疗的简易弹体反馈;伙伴攻击脉冲和敌人死亡缩放由表现层驱动。
- 生成:Unity Pipeline 执行 `AgentScripts/BuildPrototype.cs` 预制球形弹体池,复用原型材质;运行时更新已有节点的位置与可见性,不临时创建业务特效骨架。
- 范围:无新增粒子系统、Animator 或 AnimationClip;正式特效与声音后续替换。
## 五伙伴弹体池扩展(2026-10-16)
- 资源:同一 `PrototypeArena.prefab` 扩展 `Projectiles/Shot3~4`,现有池为Shot0~4。
- 用途与生成:`BuildPrototype.cs` 经Unity Pipeline预制新增伙伴对应球形弹体,复用原型材质;电系闪闪雀使用远程弹体,水系泡泡龟当前近战不显示飞行弹体。运行时只驱动已有节点,未生成新粒子/动画/音效资源。
+117 -5
View File
@@ -3,7 +3,8 @@
3D 模型及相关烘焙贴图。每条包含:路径、简要说明。
约定:
- 角色:`AIClient/Assets/Bundles/Characters/{ActorName}/`
- 人物角色:`AIClient/Assets/Bundles/Characters/Human/{英文名称}/`
- 早期平铺:`AIClient/Assets/Bundles/Characters/{ActorName}/`(仅 MaleExplorer)
- 场景分件:`AIClient/Assets/Bundles/Scenes/{类型}/{场景号}/{英文短名}/`
| 资源路径 | 简要说明 |
@@ -20,9 +21,120 @@
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/bush/` | 灌木花箱;collapse 卡住后体素重网格,减面 436;XPbr |
| `Tools/output/townsquare_3d/` | TownSquare 混元高模 GLB(不进 Bundle) |
| `Tools/output/townsquare_game/` | TownSquare 减面/烘焙中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/MaleExplorer/` | 角色 MaleExplorer 目录(寻址 Prefab=`MaleExplorer`) |
| `…/MaleExplorer.fbx` | 混元高模减面低模(约 5k tris) |
| `…/MaleExplorer_*.png` | color / normal / ao / metallic / roughness 烘焙贴图 |
| `…/MaleExplorer.prefab` | 运行时加载 Prefab(菜单 `AIGame/M3/Setup Character…` 生成) |
| `Tools/output/caocao_3d/caocao.glb` | 曹操混元高模(约 5 万面,不进 Bundle) |
| `Tools/output/caocao_game/` | 曹操减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/Human/CaoCao/` | 人物 CaoCao;Pipeline `SetupCharacter.SetupCaoCao`;运行时地址 `CaoCao` |
| `…/CaoCao.fbx` | 减面低模 **3000** tris;Y-up、底面原点、-Z 正面 |
| `…/CaoCao_base.png` / `CaoCao_mix.png` | XPbr 1024;写出时 PNG 无损压缩 |
| `…/CaoCao.prefab` | 身高 1.8m,挂 Test/XPbr |
| `Tools/output/lmgirl_3d/lmgirl.glb` | LmGirl 混元高模(49978 面,不进 Bundle) |
| `Tools/output/lmgirl_game/` | LmGirl 减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/Human/LmGirl/` | 人物 LmGirl;Pipeline `SetupCharacter.SetupLmGirl`;身高 1.65m |
| `…/LmGirl.fbx` | 减面低模 **3000** tris;Y-up、底面原点、-Z 正面 |
| `…/LmGirl_base.png` / `LmGirl_mix.png` | XPbr 1024 |
| `…/LmGirl.prefab` | 身高 1.65m,挂 Test/XPbr |
| `Tools/output/lmcat_3d/lmcat.glb` | LmCat 混元高模(49847 面,不进 Bundle) |
| `Tools/output/lmcat_game/` | LmCat 减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/Animal/LmCat/` | 动物 LmCat;Pipeline `SetupCharacter.SetupLmCat`;身高 0.42m |
| `…/LmCat.fbx` | 减面低模 **1999** tris;Y-up、底面原点、-Z 正面 |
| `…/LmCat_base.png` / `LmCat_mix.png` | XPbr 1024 |
| `…/LmCat.prefab` | 身高 0.42m,挂 Test/XPbr |
| `Doc/Design/Character/RockBall/rockball.png` | 岩团团设计图(纯白底);Cursor GenerateImage v2;混元输入 |
| `Tools/output/rockball_3d/rockball.glb` | RockBall 混元高模(50k,job `d9390f797ba94f1b9099ae4c36213f00`,不进 Bundle) |
| `Tools/output/rockball_game/` | RockBall 减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/Animal/RockBall/` | 动物 RockBall(岩团团);Pipeline `SetupCharacter.SetupRockBall`;身高 0.55m |
| `…/RockBall.fbx` | 减面低模 **1500** tris;Y-up、底面原点、-Z 正面 |
| `…/RockBall_base.png` / `RockBall_mix.png` | XPbr 1024 |
| `…/RockBall.prefab` | 身高 0.55m,挂 Test/XPbr;CharacterUnitReview 已通过(2026-10-20);开战/营地替换另开任务 |
| `…/RockBall/Rigged/RockBall_Rigged.fbx` | 已验收低模外观 + 19 骨蒙皮(`bl_transfer_skin`);tris≈1512 |
| `…/RockBall_Rigged.prefab` | 可驱动 + XPbr + Animator;Idle/Walk/Attack;`SetupAnimalAnimator.SetupRockBall` |
| `Tools/model_tools/bl_transfer_skin.py` | 把 TokenRig 骨架权重转到已验收低模(低模直绑骨过少时用) |
| `AIClient/Assets/Bundles/Scenes/Test/ModelView/ModelView.unity` | 模型观看测试场景;Pipeline `BuildModelView.Run`;4×3 摆放 LmHouses,前景为 LmGirl 与 LmCat,相机在 -Z 侧略俯视 |
| `AIClient/Assets/Bundles/Characters/MaleExplorer/` | 早期样例(平铺目录、约 5k tris,不作为新角色模板) |
| `Doc/Design/Scene/LmHouses/` | 十二栋房屋分件设计图,由用户合图按 4×3 拆出,纯白底 |
| `Tools/output/lmhouses_3d/` | LmHouses 混元高模 GLB(约 5 万面,不进 Bundle) |
| `Tools/output/lmhouses_game/` | LmHouses 减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Scenes/Test/LmHouses/` | 十二栋场景房屋;Pipeline `SetupLmHouses.Run`;Y-up、底面原点、-Z 正面、XPbr 1024 |
| `…/cream_tile/` | 浅墙灰瓦双层;2000 tris;高 7.0m |
| `…/cream_red/` | 浅墙红瓦双层;1998 tris;高 7.2m |
| `…/white_balcony/` | 白墙阳台双层;2000 tris;高 7.0m |
| `…/brown_wood/` | 木墙灰瓦和风;2000 tris;高 6.8m |
| `…/cream_porch/` | 浅墙红瓦带阳台;2000 tris;高 7.2m |
| `…/stone_balcony/` | 石基阳台双层;减面停在 3676 tris;高 7.0m |
| `…/thatched/` | 茅草平房;减面停在 3740 tris;高 4.4m |
| `…/white_blue/` | 白墙蓝瓦双层;2000 tris;高 7.0m |
| `…/wood_fence/` | 灰瓦木房带围栏;1999 tris;高 6.6m |
| `…/shop_awning/` | 蓝篷店铺;减面停在 2515 tris;高 7.0m |
| `…/picket/` | 红瓦房带白栅栏;混元 Flash 先输出 **20406** 面,再减面到 **1570**;高 6.8m |
| `…/gate/` | 灰墙双层带院门;1996 tris;高 7.0m |
| `Tools/output/male_explorer_3d/male_explorer.glb` | 混元高模中间件(不进 Bundle) |
| `Tools/output/male_explorer_game/` | 减面/烘焙中间输出(不进 Bundle) |
## G0 教学战场与原型角色(2026-10-15)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` | 开战加载的战场。伙伴、敌人、弹体、部署标记、技能表现和战斗相机仍在此预制体上。`AttachGreenfield` 把 `Battlefield_Greenfield` 嵌为 `Greenfield`,关闭方块地面/路线板/边饰/`BattleLight`,并把 Greenfield 整棵子树设为第 30 层(开战相机只画该层)。场景不摆桥。伙伴原点在脚底中心、局部 -Z 为正面。 |
| `AIClient/Assets/Bundles/Scenes/Prototype/Materials/Proto*.mat` | 十种原型材质,分别用于奶油色、岩色、橙色、叶色、深色、白色、青色、草地、路面和敌人;同一 Pipeline 构建脚本创建,URP Lit、低光滑度;Arena 依赖进入 Art/GameplayPrototype |
运行时只实例化已制作的 Arena 并驱动角色/敌人/弹体节点,不用运行时代码替代场景资产制作。正式替换角色时保留 Heroes/Hero0~2 与 Enemies/Enemy0~8 的绑定契约,或同步更新表现层。实现边界见 `Doc/Design/G0_Implementation.md`。
## 首章五伙伴扩展(2026-10-16)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 的 `Heroes/Hero3`、`Heroes/Hero4` | 新增电系闪闪雀(黄身、青翼/冠、橙喙)与水系泡泡龟(青色龟壳、圆头、四足)原型简模;Unity Pipeline 执行 `AgentScripts/BuildPrototype.cs` 持久化基础几何体制作,原点在脚底中心、Y-up、局部-Z正面。现行绑定为Hero0~4,不是正式角色美术或FBX。 |
| `AIClient/Assets/Bundles/Scenes/Prototype/Materials/ProtoYellow.mat`、`ProtoWater.mat` | 两只新伙伴的黄色与水蓝色 URP Lit 材质;同一Pipeline脚本创建并保存,复用既有深色/白色/青色/橙色材质,随Arena进入Art/GameplayPrototype。 |
五只角色、五个弹体节点与五张肖像的资产存在/绑定检查通过,新增水/电伙伴已在独立账号实战验证。
## 营地固定槽位装饰(2026-10-16)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Prototype/CampDecoration0.prefab` | 迎风小旗原型模型,旗杆/底座/橙色旗面/浅色横条;Unity Pipeline执行`AgentScripts/BuildCampAssets.Build`以基础几何体制作并持久化,复用ProtoDark/Cream/Orange/Yellow材质。用于营地装饰看板肖像,也可作为后续场景摆放资产。 |
| `AIClient/Assets/Bundles/Scenes/Prototype/CampDecoration1.prefab` | 花叶盆栽原型模型,橙色花盆、浅色盆沿、青色五瓣花与绿叶;相同Pipeline构建方式,复用既有材质。 |
| `AIClient/Assets/Bundles/Scenes/Prototype/CampDecoration2.prefab` | 暖光路灯原型模型,立柱/灯箱/黄色灯面/顶盖/底座;相同Pipeline构建方式,无额外动态灯光或真实照明收益。 |
三件均为Y-up、底面中心原点、局部-Z正面,进入现有Art/GameplayPrototype目录收集规则;当前以渲染肖像呈现在营地固定槽位看板,未放入首页背景插画或制作自由摆放场景。
| 2026-10-18 | `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/` | 新战场资产目录骨架,按 Ground、Components、Markers、Materials 分层;模型仍需在设计方案确认后经微信网页图生3D和减面流程导入,当前未登记为已完成模型资源。 |
## A·绿野三岔口战场资产(2026-10-18)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `Tools/output/battlefield/A/{tree,rock,bridge,sign,shrub}/*.glb` | A 方案 5 类组件的混元图生 3D 原始 GLB,均 50k 面数档;输入为已审核的 GPT Image 2.5 分件图,任务回执写入对应 `*_hunyuan_status.json`。 |
| `Tools/output/battlefield/A/{tree_game,rock_game,bridge_game,sign_game,shrub_game}/*_xpbr/` | 5 类组件低模与 XPbr 资源;`model_lowpoly_bake.py` 使用 Blender 5.0 减面、UV、烘焙,目标面数树700/岩石450/桥1200/路牌450/灌木450,路牌实际448、灌木实际422;每类含 FBX、`*_base.png`、`*_mix.png` 与材质信息。 |
| `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/{tree,rock,bridge,sign,shrub}/` | 5 类低模 FBX、XPbr base/mix 贴图、`Test/XPbr` 材质,以及 Pipeline `BuildBattlefieldAssets.BuildComponents` 生成的同目录 Prefab。 |
| `Doc/Design/Scene/Battlefield/A/ground.png` | A 方案路线布局审核图。混元图生 3D 使用同一目录的 `ground_model_ref.png`。 |
| 2026-10-18 | AIClient/AgentScripts/BuildBattlefieldAssets.cs | Unity Pipeline 入口:BuildComponents 导入 5 类组件;BuildGround 导入 Ground/ground.fbx,创建 GreenfieldGround.prefab,并为可读网格配置非凸 MeshCollider。模型预制体实例会先完全解开,再挂碰撞体。 |
| 2026-10-18 | Tools/output/battlefield/A/ground_hunyuan_status_latest.json | A 方案地表第 3 次混元网页图生 3D 回执;已登录并提交 50k 任务,服务端仍返回配额/任务限制,未产生 GLB。 |
| 2026-10-19 | `Tools/output/battlefield/A/ground_model_ref/ground_model_ref.glb` | A 方案独立地表的混元图生 3D 原始 GLB;输入 `ground_model_ref.png`,50k 面数档,纹理内嵌校验通过。 |
| 2026-10-19 | `Tools/output/battlefield/A/ground_game/ground_model_ref_xpbr/` | A 方案地表低模与 XPbr 资源;Blender 5.0 减面、UV、烘焙至 1200 三角面,含 FBX、base/mix 贴图和材质。 |
| 2026-10-19 | `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/A/Ground/` | 地表 FBX、XPbr base/mix 贴图与 `Test/XPbr` 材质。网格可读。 |
| 2026-10-19 | `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/GreenfieldGround.prefab` | Pipeline `BuildBattlefieldAssets.BuildGround` 生成。根节点下为解开后的地表网格,带非凸 MeshCollider。 |
| 2026-10-19 | `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield.prefab` | Pipeline `BuildBattlefieldScene.Build` 按方案 A 拼装。含 Ground、Routes/Lane0..2、Gameplay 出生点与终点、Decorations(路牌在营地侧,树/岩石/灌木在路线外;桥模型不放入场景)和 Lighting/Sun。地表实例放平后约 30.9×26.0,顶面 y=0。已嵌进 `PrototypeArena` 的 `Greenfield` 子节点,开战时随该预制体加载;整棵子树为第 30 层。 |
| 2026-10-20 | `AIClient/Assets/Screenshots/battlefield_play_battle.png` | 隔离 18081 Play Mode 开战截图(`VerifyBattlefield.Play`,1080×1920)。绿野土路与装饰可见、无桥;岩团团/火喵在中路。仅回归记录。 |
| 2026-10-20 | Doc/UIPrefabCreater/UI_PrototypeSettings.json / AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeSettings.prefab | 设置页:音乐/音效/画质/振动与账号信息;generate_prototype_ui.py settings + BuildSettings.Build;偏好本机存储,Play 验证截图 settings_page.png。 |
| 2026-10-20 | `AIClient/AgentScripts/BuildSceneReview.cs` / `AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield_Review.unity` | ?????????????Pipeline?`Battlefield_Greenfield.prefab`?????????Unity?????????????????????`Doc/Design/Scene/SceneReviewGeneration.md`? |
| 2026-10-20 | Assets/Bundles/Scenes/Review/CharacterUnitReview.unity | 角色/单位美术专用验收场景。Pipeline BuildCharacterReview 按 manifest 摆放 Human/Animal Prefab,校验身高、面数、XPbr、底面贴地;流程见 Doc/Design/Character/CharacterUnitArtProc.md。截图 character_unit_review.png。 |
| 2026-10-20 | `Tools/output/rockball_dgx/walk_verified/RockBall_Rigged.fbx` / `.skin.json` | 同角色high_rig 12骨→项目静态FBX Y-up转Blender Z-up→底面中心/等比尺寸对齐→转移权重。保留验收低模750原始顶点/1500三角面、UV与材质;权重限制4根并归一化。表面距离RMS 0.00223(模型高度约1)。生成工具 `Tools/model_tools/bl_transfer_skin.py --low-up Y --align-bounds`。 |
| 2026-10-20 | `AIClient/Assets/Bundles/Characters/Animal/RockBall/Rigged/RockBall_Rigged.fbx` / `RockBall_Rigged.prefab` | 上述12骨FBX经Pipeline导入,`SetupAnimalAnimator.SetupRockBallWalk`制作Prefab。0.55m、Y-up、底面中心、局部-Z正面,复用RockBall.mat XPbr。绑定姿态对原静态模顶点误差最大0.000031m。 |
| 2026-10-20 | `AIClient/Assets/Bundles/Scenes/Review/RockBallWalkReview.unity` / `RockBallWalkFloor.mat` | Pipeline `ReviewRockBallWalk.Build`制作的静态/Walk并排专用验收场景和地面材质;Edit与Play均可预览。 |
| 2026-10-20 | `Tools/output/rockball_walk_audit/static_for_tokenrig.glb` | `dgx3d_animal_pipeline.mesh_to_glb` 的FBX→GLB坐标转换回归样本:项目Y-up静态顶点先转Blender Z-up,再按glTF规范导出;重新导入测得高度Z=0..1.00690,未导入游戏资源目录。 |
| 2026-10-20 | `Tools/output/enemy_characters/RockBall/RockBall_Rigged.fbx` / `.skin.json` | 敌方标准入口按配方重做同角色12骨蒙皮,750源顶点/1500三角面、4权重;对齐与静态形状通过,输出来源/几何距离记录。 |
| 2026-10-20 | `AIClient/Assets/Bundles/Characters/Enemy/RockBall/RockBall_Enemy.prefab` | Pipeline `BuildEnemyReview.Publish`制作的敌方视觉Variant,复用Animal/RockBall已验收网格/XPbr/三动作Controller;外层根归一化,未包含玩法伤害/寻路组件。 |
| 2026-10-20 | `AIClient/Assets/Bundles/Scenes/Review/Enemy_RockBall_Review.unity` / `EnemyReviewFloor.mat` | Pipeline按配方制作的静态、Idle、Walk、Attack、自动轮播五组并排场景与地面材质;Additive创建,独立渲染层,保留其它场景未保存编辑。Edit与Play验证通过。 |
## 火喵 FireCat T1 伙伴(2026-10-20)
| 资源路径 | 用途与生成方式 |
| --- | --- |
| `Tools/output/firecat_3d/firecat.glb` | 用户授权后,firecat.png提交腾讯混元3D网页50k档生成的同角色高模;50186 tris、内嵌贴图解码通过,回执hunyuan_status.json。保留用于同源绑骨及权重转移。 |
| `Tools/output/firecat_game/firecat_xpbr/` | Blender5减面/UV/烘焙:1998 tris、1024贴图;含离线FBX与base/mix打包产物,制作回执bake_status.json。离线生成的mat/meta不直接写入Unity。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/FireCat.fbx`、`FireCat_base.png`、`FireCat_mix.png`、`FireCat.mat`、`FireCat.prefab` | Pipeline导入FBX/两张贴图,SetupCharacter.Run创建Test/XPbr材质与0.55m静态伙伴Prefab;Y-up、底面中心、局部-Z正面。实际高度0.549977m、底面-0.000001m、1998 tris,隔离预览正侧背面通过。 |
| `Tools/output/firecat_dgx/high_rig/rigged.glb`、`rig_request.json` | 同角色混元高模经DGXA TokenRig original模板生成22骨;保留源高模和rig哈希、任务目录与日志,后续三动作仅使用此rig。 |
| `Tools/output/companions/FireCat/FireCat_Rigged.fbx`、`.skin.json` | Y-up→Blender Z-up对齐后转移权重,保留1998 tris/1006原始顶点与UV;几何距离最大0.005568、RMS0.002045(源高约0.997),每顶点最多4权重并归一化。配方测地区域修正175个尾部顶点到根骨,避免抬爪带扁尾部;受影响范围写入skin报告。 |
| `AIClient/Assets/Bundles/Characters/Animal/FireCat/Rigged/FireCat_Rigged.fbx`、`FireCat_Rigged.prefab`、`FireCat_Companion.prefab` | Pipeline导入同源蒙皮,SetupAnimalAnimator与BuildEnemyReview.Publish创建伙伴视觉资产;0.55m、XPbr、外层根单位缩放,绑定形状最大误差0.000030m,三动作及Edit/Play验证通过。伙伴用途,无敌方Variant。 |
| `AIClient/Assets/Bundles/Scenes/Review/Companion_FireCat_Review.unity` | Pipeline按正式配方Additive构建静态、Idle、Walk、施法Attack、自动轮播五组;位置X=40,含角色名的对象/相机前缀,保留其它场景未保存内容。实际Play三状态通过并退出Play。 |
+220 -2
View File
@@ -1,7 +1,34 @@
# 璧勬簮璇存槑 路 Picture
## 鍗佷紮浼撮〉闈㈤噸鎺掞紙2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `AIClient/Assets/Bundles/UI/Texture/Prototype/proto_pet_5..9.png` | 鏂板�浜斿彧浼欎即鐨勯€忔槑鑲栧儚锛堝博鐢茬妧銆佺儓鐒扮嫯銆佽棨钄撶伒銆侀浄楦h惫銆佹疆姹愰哺锛夛紝鐢盽AgentScripts/BuildPrototype.cs`鍦║nity闅旂�鍦烘櫙鐢ㄥ師濮嬪嚑浣曚綋娓叉煋锛屼笌鏃㈡湁浜斿紶鍚屾祦绋嬶紱浠嶆槸鍘熷瀷缇庢湳銆� |
| `Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` | Arena鎵╁埌鍗佸�浼欎即绠€妯°€佸崄涓�脊浣撲笌鎶€鑳�/鎶ょ浘妲戒綅銆佸崄涓猅2鍐犻グ锛沗BuildPrototype.Build`涓巂BuildLanes.Build`閲嶅缓銆� |
| `Doc/UIPrefabCreater/UI_Prototype{Pets,Capture,Bag,Camp,Formation,Stages,Chest}.json` 鍙婂�搴擯refab | 鍗侀」鏀逛负鍙屽垪/鍙岃�鍗$墖锛�2脳5銆�5脳2锛夛紝閫夊叧椤垫敼涓轰袱涓�珷鑺傛爣绛惧悇鍗佽�锛屽疂绠辫嚜閫夋敼涓�2脳5锛沗Tools/generate_prototype_ui.py`閲嶆柊鐢熸垚锛宍BuildProgression.Build`閲嶅缓鍗佸叚涓狿refab銆� |
| `AIClient/Assets/Screenshots/roster_{stages_ch1,stages_ch2,pets,capture,chest}.png` | 1080脳1920瀹為檯EventSystem鐐瑰嚮鎴�浘锛岃�鐩栦袱绔犳爣绛俱€佸崄浼欎即銆佸崄琛屾崟鎹夋�鐜囦笌鍗侀」鑷�€夌�銆� |
## 瀹濈�濂栧姳椤碉紙2026-10-19锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypeChest.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeChest.prefab` | Candy瀹濈�闈㈡澘锛�48鑺傜偣锛�1080脳1920锛涙瘡鏃ュ疂绠卞崱銆佷笁绉嶇�鐨勬嫢鏈夋暟閲忎笌鍐呭�璇存槑銆佸浐瀹�/鑷�€夊紑鍚�寜閽�€佽嚜閫夌�鐗囧垪琛ㄣ€侀挶鍖呬笌绌虹姸鎬併€俙Tools/generate_prototype_ui.py`鐨刞chest()`鐢熸垚JSON锛孶nity Pipeline鎵ц�`AgentScripts/BuildChest.Build`璋冪敤椤圭洰杞�崲鍣ㄦ寔涔呭寲Prefab锛涘凡鍔犲叆`BuildProgression`鍏ㄩ噺閲嶅缓鍜孉rt/UI鏀堕泦銆� |
| 鏃㈡湁 `Common/ui_panel_content.png`銆乣btn_primary_*`銆乀MP瀛椾綋涓� `Home/home_ico_chest.png` | 鍏ㄩ儴澶嶇敤宸茬櫥璁拌祫婧愶紝鏈�柊澧炲�閮ㄧ敓鎴愬浘鐗�/妯″瀷/鍔ㄧ敾/闊抽�锛涢�椤礰Dot_Rewards`鑺傜偣鏀圭敱鐪熷疄瀹濈�鐘舵€侀┍鍔ㄣ€� |
| `AIClient/Assets/Screenshots/chest_{empty,daily,opened,choice,recovery}.png` | 鐙�珛18081鏈嶅姟涓巂g1live_chest_`璐﹀彿鐨勭湡瀹濫ventSystem鐐瑰嚮鎴�浘锛孭ipeline鎹曡幏1080脳1920锛涜�鐩栫┖鐘舵€併€佹瘡鏃ョ�鍏ュ簱銆佸浐瀹氱�寮€鍚�€佽嚜閫夌�鐗囦笌涓㈠け纭��鎭㈠�銆傚凡妫€鏌ュ叧閿�敾闈�紝鏃犵湡瀹炶处鍙锋搷浣溿€� |
## 灏忛晣閭�欢棣栫増锛�2026-10-18锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypeMail.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeMail.prefab` | Candy閭�欢闈㈡澘锛�42鑺傜偣锛�1080脳1920锛涗簲琛屽垎椤靛垪琛ㄣ€佹湭璇�/闄勪欢/鍒版湡鐘舵€併€佸彲婊戝姩姝f枃銆佸崟灏�/涓€閿��鍙栥€佺┖鐘舵€佸拰閽卞寘銆俙Tools/generate_prototype_ui.py`鐨刞mail()`鐢熸垚JSON锛孶nity Pipeline鎵ц�`AgentScripts/BuildMail.Build`璋冪敤椤圭洰杞�崲鍣ㄦ寔涔呭寲Prefab锛涘凡鍔犲叆`BuildProgression`鍏ㄩ噺閲嶅缓鍜孉rt/UI鏀堕泦銆� |
| 鏃㈡湁 `Common/ui_list_item_{normal,selected}.png`銆侀潰鏉夸笌鎸夐挳鍒囧浘銆乀MP瀛椾綋 | 鍏ㄩ儴澶嶇敤宸茬櫥璁拌祫婧愶紝鏍囧噯鎺т欢浣跨敤Sliced銆佹湁鏁圔order涓嶧ull Rect锛屾湭鏂板�澶栭儴鐢熸垚鍥剧墖/妯″瀷/鍔ㄧ敾/闊抽�锛涢�椤靛師`Dot_Mail`鑺傜偣鏀圭敱鐪熷疄閭�欢鐘舵€侀┍鍔ㄣ€� |
| `AIClient/Assets/Screenshots/mail_{list,detail,claimed,notice,mixed,expired,long_body,long_body_bottom,batch_result,recovery,empty}.png` | 鐙�珛18081鏈嶅姟涓巂g1live_mail_`璐﹀彿鐨勭湡瀹濫ventSystem鐐瑰嚮鎴�浘锛孭ipeline鎹曡幏1080脳1920锛涜�鐩栨湭璇�/宸茶�銆侀�鍙栥€佹棤闄勪欢銆佸垎椤�/鍒版湡銆侀暱鏂囨粴鍔ㄣ€佹壒閲忓洖鎵с€佷涪澶辩‘璁ゆ仮澶嶅強绌洪偖绠便€傚凡妫€鏌ュ叧閿�敾闈�紝鏃犵湡瀹炶处鍙烽�濂栥€� |
鍥剧墖绫昏祫婧愶紙璐村浘銆乁I 鍥鹃泦銆佹�蹇靛浘銆佸弬鑰冨浘绛夛級銆傛瘡鏉″寘鍚�細璺�緞銆佺畝瑕佽�鏄庛€�
**閫€褰圭姸鎬侊紙2026-10-14锛�**锛歋tudio / Mint 涓婚�鍙婂凡鍋滅敤鐨� UI_ThemeSwitcher 宸叉寜鐢ㄦ埛瑕佹眰鍒犻櫎銆備笅鏂囧寘鍚� `Studio`銆乣Mint`銆乣studio_*`銆乣mint_*` 鎴栦富棰樺垏鎹㈠叆鍙g殑鏉$洰鍧囦负鍘嗗彶鐢熸垚鐧昏�锛屼笉浠h〃褰撳墠鍙�敤璧勬簮銆傚綋鍓� UI 浠呬繚鐣� Candy 鐨� `UI_MainHUD`銆乣UI_ConfirmDialog`锛屼互鍙� `Texture/Common/` 鍜� `Texture/Home/`銆�
| 璧勬簮璺�緞 | 绠€瑕佽�鏄� |
| --- | --- |
| `Doc/Design/UI/Casual/casual_ui.png` | 杞绘澗浼戦棽绔栧睆 UI 璁捐�鍥撅紱gpt-image-2.5銆乣--aspect-ratio 9:16`銆佸疄娴� 940脳1672銆佸弬鑰� `Doc/Design/ui_design.jpg`銆佺函鐧藉簳 |
@@ -15,16 +42,207 @@
| `Doc/Design/Scene/TownSquare/bench.png` | TownSquare 鍒嗕欢路闀挎�锛沢pt-image-2.5銆乣1:1`銆�1254脳1254銆佸弬鑰冩€昏�銆佺函鐧藉簳 |
| `Doc/Design/Scene/TownSquare/bush.png` | TownSquare 鍒嗕欢路鐏屾湪鑺辩�锛沢pt-image-2.5銆乣1:1`銆�1254脳1254銆佸弬鑰冩€昏�銆佺函鐧藉簳 |
| `Doc/Design/Character/CaoCao/caocao.png` | 杞荤�骞绘浌鎿嶅叏韬��璁″浘锛屾�闈� T Pose锛沢pt-image-2.5銆乣2:3`銆佸疄娴� 1024脳1536銆佺函鐧藉簳 |
| `Doc/Design/Character/LmGirl/lm_girl.png` | LmGirl 鍏ㄨ韩鍙傝€冨浘锛屾�闈� T Pose銆佺函鐧藉簳锛涚敤鎴锋彁渚涳紝鐢ㄤ簬娣峰厓鍥剧敓 3D |
| `Doc/Design/Character/LmCat/lm_cat.png` | LmCat 绔欑珛鍙傝€冨浘锛岀函鐧藉簳锛涚敤鎴锋彁渚涳紝鐢ㄤ簬娣峰厓鍥剧敓 3D |
| `Doc/Design/Scene/LmHouses/*.png` | 鍗佷簩鏍嬫埧灞嬪垎浠跺浘锛坈ream_tile銆乧ream_red銆亀hite_balcony銆乥rown_wood銆乧ream_porch銆乻tone_balcony銆乼hatched銆亀hite_blue銆亀ood_fence銆乻hop_awning銆乸icket銆乬ate锛夛紱鐢辩敤鎴峰悎鍥炬媶鍑� |
| `AIClient/Assets/Bundles/Scenes/Test/LmHouses/*/*_base.png` | 鍗佷簩鏍嬫埧灞� XPbr 鍩虹�璐村浘锛�1024 |
| `AIClient/Assets/Bundles/Scenes/Test/LmHouses/*/*_mix.png` | 鍗佷簩鏍嬫埧灞� XPbr 娣峰悎璐村浘锛�1024 |
| `AIClient/Assets/Bundles/Characters/Human/LmGirl/LmGirl_base.png` | LmGirl XPbr 鍩虹�璐村浘锛圓lbedo+AO锛夛紝1024 |
| `AIClient/Assets/Bundles/Characters/Human/LmGirl/LmGirl_mix.png` | LmGirl XPbr 娣峰悎璐村浘锛�1024 |
| `AIClient/Assets/Bundles/Characters/Animal/LmCat/LmCat_base.png` | LmCat XPbr 鍩虹�璐村浘锛圓lbedo+AO锛夛紝1024 |
| `AIClient/Assets/Bundles/Characters/Animal/LmCat/LmCat_mix.png` | LmCat XPbr 娣峰悎璐村浘锛�1024 |
| Doc/Design/Character/RockBall/rockball.png | RockBall design (white bg); Cursor GenerateImage v2; Hunyuan input |
| AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall_base.png | RockBall XPbr base (Albedo+AO), 1024 |
| AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall_mix.png | RockBall XPbr mix, 1024 |
| `Tools/output/ui_simple_atlas_gpt.png` | UI Simple Set 鍥鹃泦锛沢pt-image-2.5 + 鍙傝€� `Doc/ui_design.jpg`锛涚害 1254脳1254锛涘�搴� `Doc/UI_Simple_Set.md` |
| `Tools/output/ui_normal_atlas_gpt.png` | UI Normal Set 鍥鹃泦锛沢pt-image-2-vip銆�2048脳2048銆侀€忔槑搴� + 鍙傝€冨浘锛涘�搴� `Doc/UI_Normal_Set.md` |
| `AIClient/Assets/Bundles/UI/Texture/Common/*.png` | Normal 鍥鹃泦鍒囧嚭鐨� **38** 寮� Common 鍗曞浘锛涜剼鏈� `Tools/slice_ui_normal_atlas.py` |
| `AIClient/Assets/Bundles/UI/Font/siyuan_CN_Bold.otf` | 鎬濇簮榛戜綋 CN Bold 婧愬瓧浣� |
| `AIClient/Assets/Bundles/UI/Font/siyuan_CN_Bold SDF.asset` | TMP 动态 SDF 字体资源;JSON→Prefab 默认使用;菜单 `Tools/UI/Ensure SiYuan TMP Font Asset` |
| `AIClient/Assets/Bundles/UI/Font/siyuan_CN_Bold SDF.asset` | TMP 鍔ㄦ€� SDF 瀛椾綋璧勬簮锛汮SON鈫扨refab 榛樿�浣跨敤锛涜彍鍗� `Tools/UI/Ensure SiYuan TMP Font Asset`锛汼tudio 鍒朵綔/棰勮�鏃剁敱 Unity 琛ラ綈鎵€闇€涓�嫳鏂囧瓧褰�笌鍔ㄦ€� Atlas |
| `Tools/output/male_explorer_test.png` | 鐢锋€ф帰闄╄€呰�鑹茶瘯鍋氾紱椤圭洰鏂囩敓鍥捐剼鏈� |
| `Tools/output/male_explorer_cursor.png` | 鐢锋€ф帰闄╄€呭�鐓э紱Cursor GenerateImage |
| `Tools/output/male_explorer_test.png` | 鐢锋€ф帰闄╄€呰�鑹茶瘯鍋氾紱椤圭洰鏂囩敓鍥捐剼鏈� |
| `AIClient/Assets/Bundles/Characters/MaleExplorer/MaleExplorer_*.png` | 低模烘焙贴图(color/normal/ao/metallic/roughness) |
| `AIClient/Assets/Bundles/Characters/Human/CaoCao/CaoCao_base.png` | 鏇规搷 XPbr 鍩虹�璐村浘锛圓lbedo+AO锛夛紝1024锛岀儤鐒欏悗鏃犳崯鍘嬬缉 |
| `AIClient/Assets/Bundles/Characters/Human/CaoCao/CaoCao_mix.png` | 鏇规搷 XPbr 娣峰悎璐村浘锛堟硶绾� RG + Metallic + Roughness锛夛紝1024 |
| `Doc/ui_design.jpg` | UI 瑙嗚�鍩哄噯鍥撅紱绯栨灉浼戦棽椋庢帶浠跺弬鑰冿紙`Doc/Design/ui_design.jpg` 涓哄悓鍐呭�鍓�湰锛� |
| `Doc/UI_AutoGen_Overview.md` | UI 鑷�姩鐢熸垚鏂规�鎬昏�锛圝SON鈫扨refab + 鍥鹃泦锛� |
| `Doc/UIPrefabCreater/UI_ConfirmDialog.json` | 绔栧睆纭��寮圭獥鏍蜂緥 JSON锛涘�搴� Prefab 璺�緞 `Assets/Bundles/UI/Prefab/UI_ConfirmDialog.prefab` |
| `Doc/UIPrefabCreater/UI_MainHUD.json` | M4 HUD锛堥《鏍忕姸鎬� + 鏂�嚎閲嶈繛鏉★級锛汸refab `Assets/Bundles/UI/Prefab/UI_MainHUD.prefab` |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_panel.png` | Studio 娣辩豢闈㈡澘锛氬皬鍦嗚�銆佺粏杈规�锛沀nity Pipeline 鎵ц� `AgentScripts/BuildStudioUi.cs` 纭�畾鎬у嚑浣曠粯鍒讹紝128脳128锛屼節瀹�牸 Border 鍚� 12px |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_recessed.png` | Studio 鍐呭嚬瀹瑰櫒搴曪紝渚涘悗缁�緭鍏�/鍒楄〃鎺т欢澶嶇敤锛涘悓鐢熸垚鑴氭湰锛�128脳128銆佷節瀹�牸 |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_btn_primary_*.png` | Studio 涓绘搷浣� Normal/Hover/Pressed/Disabled 鍥涙€侊紱鍚岀敓鎴愯剼鏈�紝128脳128銆佷節瀹�牸 |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_btn_secondary_*.png` | Studio 娆℃搷浣滀笌鍏抽棴鎸夐挳鍥涙€侊紱鍚岀敓鎴愯剼鏈�紝128脳128銆佷節瀹�牸 |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_ico_diamond.png` | Studio 鍝佺墝/鐘舵€佽彵褰㈢嚎妗嗗浘鏍囷紱鍚岀敓鎴愯剼鏈�紝64脳64銆佺櫧鑹查€忔槑搴曪紝鍙�煋鑹� |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_ico_close.png` | Studio 鍏抽棴绾挎�鍥炬爣锛涘悓鐢熸垚鑴氭湰锛�64脳64銆佺櫧鑹查€忔槑搴曪紝鍙�煋鑹� |
| `AIClient/Assets/Bundles/UI/Texture/Studio/studio_ico_refresh.png` | Studio 閲嶈繛鍒锋柊绾挎�鍥炬爣锛涘悓鐢熸垚鑴氭湰锛�64脳64銆佺櫧鑹查€忔槑搴曪紝鍙�煋鑹� |
| `Doc/UIPrefabCreater/UI_MainHUD_Studio.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD_Studio.prefab` | Studio 涓� HUD 涓庢柇绾块噸杩炴彁绀猴紱Python 鐢熸垚 JSON锛孶nity Pipeline 璋冪敤 JSON鈫扨refab 杞�崲鍣ㄧ敓鎴愶紝1080脳1920锛屼笌鍘� HUD 缁戝畾鍏煎� |
| `Doc/UIPrefabCreater/UI_ConfirmDialog_Studio.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_ConfirmDialog_Studio.prefab` | Studio 纭��/鍏�憡/缁存姢寮圭獥锛涚浉鍚岀敓鎴愮�绾匡紝1080脳1920锛屾�鏂囧彲婊氬姩銆佸崟/鍙屾搷浣滃竷灞€鍏煎� |
| `Doc/Design/UI/Studio/studio_hud.png` | Studio HUD + 閲嶈繛鐘舵€佺湡瀹� Prefab 棰勮�锛沀nity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920锛屼腑澶�簳鑹蹭负棰勮�鑳屾櫙锛屽疄闄� HUD 閫忔槑 |
| `Doc/Design/UI/Studio/studio_confirm.png` | Studio 鍙屾搷浣滅‘璁ゅ脊绐楅�瑙堬紱Unity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920 |
| `Doc/Design/UI/Studio/studio_notice.png` | Studio 鍗曟搷浣滅淮鎶ゅ叕鍛婇�瑙堬紱Unity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920 |
## Mint 绗�笁濂� UI锛圕ommonV30 濂舵补钖勮嵎缁匡級
| 璧勬簮璺�緞 | 绠€瑕佽�鏄� |
| --- | --- |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_panel.png` | Mint 鍦嗚�濂舵补鐧介潰鏉垮拰娴呴潚淇℃伅鍗★紱澶嶅埗 CommonV30 `cm_bg_white_50px_01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�50脳50锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_outline.png` | Mint 鎻愮ず鍖虹粏鎻忚竟锛涘�鍒� CommonV30 `cm_bg_white_50px_02.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�50脳50锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_header.png` | Mint 缁胯壊鏍囬�鏍忥紱澶嶅埗 CommonV30 `cm_bg_white_tittle_01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�70脳70锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_btn_solid.png` | Mint 缁胯壊涓绘搷浣滆兌鍥婏紱澶嶅埗 CommonV30 `cm_btn_gao82px_01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�150脳82锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_btn_outline.png` | Mint 鐏拌壊娆℃搷浣滅粏绾胯兌鍥婏紱澶嶅埗 CommonV30 `cm_btn_gao82px_02.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�150脳82锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_badge.png` | Mint 鐘舵€佺偣锛涘�鍒� CommonV30 `cm_bg_white_circle38px_01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�38脳38锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_ico_close.png` | Mint 鍏抽棴鍥炬爣锛涘�鍒� CommonV30 `cm_btn_close012.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�38脳38锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_ico_refresh.png` | Mint 閲嶈繛鍒锋柊鍥炬爣锛涘�鍒� CommonV30 `cm_btn_refresh01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�64脳64锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_ico_back.png` | Mint 杩斿洖鍥炬爣锛堝�浠堕�鐣欙級锛涘�鍒� CommonV30 `cm_bottom_bt_back.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�49脳48锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_ico_help.png` | Mint 绯荤粺閫氱煡鏍囪�锛涘�鍒� CommonV30 `cm_icon_question_mark.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�36脳36锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_ico_check.png` | Mint 纭��鎻愮ず瀵瑰嬀锛涘�鍒� CommonV30 `cm_icon_choose01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�48脳40锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_divider.png` | Mint 姝f枃鍒嗛殧绾匡紱澶嶅埗 CommonV30 `cm_line01.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�50脳2锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `AIClient/Assets/Bundles/UI/Texture/Mint/mint_card_border.png` | Mint 缁胯壊瑙掓�锛堝�浠堕�鐣欙級锛涘�鍒� CommonV30 `cm_bg_border001.png` 鍘熷浘锛岄€氳繃 `BuildMintUi.cs` / Unity Pipeline 瀵煎叆锛�120脳120锛屼繚鐣欐簮 Border銆佹柊 GUID |
| `Doc/UIPrefabCreater/UI_MainHUD_Mint.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD_Mint.prefab` | Mint HUD 鍜屾柇绾块噸杩炴彁绀猴紱Python 鐢熸垚 JSON锛孶nity Pipeline 璋冪敤 JSON鈫扨refab 杞�崲鍣ㄥ埗浣滐紝1080脳1920 |
| `Doc/UIPrefabCreater/UI_ConfirmDialog_Mint.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_ConfirmDialog_Mint.prefab` | Mint 纭��/鍏�憡/缁存姢寮圭獥锛屾�鏂囧彲婊氬姩锛屾敮鎸佸崟/鍙屾搷浣滃竷灞€锛汸ython 鐢熸垚 JSON锛孶nity Pipeline 璋冪敤 JSON鈫扨refab 杞�崲鍣ㄥ埗浣滐紝1080脳1920 |
| `Doc/Design/UI/Mint/mint_hud.png` | Mint HUD 涓庨噸杩炵姸鎬佺湡瀹� Prefab 棰勮�锛沀nity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920 |
| `Doc/Design/UI/Mint/mint_confirm.png` | Mint 鍙屾搷浣滅‘璁ゅ脊绐楃湡瀹� Prefab 棰勮�锛沀nity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920 |
| `Doc/Design/UI/Mint/mint_notice.png` | Mint 鍗曟搷浣滅淮鎶ゅ叕鍛婄湡瀹� Prefab 棰勮�锛沀nity 闅旂�鍦烘櫙娓叉煋锛�1080脳1920 |
| `Doc/Design/UI/mint_sources.json` / `Doc/Design/UI/Mint/UI_Mint_Design.md` | Mint 鎺т欢婧愬浘銆佸昂瀵搞€丅order 鍜岃�瑙夎�鑼冩竻鍗� |
| `TempResource/commonv30_reference_sheet.png` | CommonV30 鎺т欢鏌ラ槄鑱旂郴鍥撅紱鍙��鍘� PNG锛孭ython/Pillow 鎺掔増锛岀敤浜庨�鏍兼�鏌� |
## 杩愯�涓�富棰樺叆鍙�
| 璧勬簮璺�緞 | 绠€瑕佽�鏄� |
| --- | --- |
| `Doc/UIPrefabCreater/UI_ThemeSwitcher.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_ThemeSwitcher.prefab` | 涓変富棰樺垏鎹㈠叆鍙h祫婧愶紱宸叉寜鐢ㄦ埛瑕佹眰浠庡惎鍔ㄧ晫闈㈡挙涓嬶紝璧勬簮鏆傜暀銆俙Tools/generate_theme_switcher.py` 鐢熸垚 JSON锛孭ipeline 杞� Prefab锛�1080脳1920锛屽�鐢� Mint 鎺т欢鍒囧浘 |
| `AIClient/Assets/Screenshots/theme_switch_live.png` | 鍘嗗彶 Play Mode 鐧诲綍/WebSocket 鎴愬姛銆丮int HUD 涓庝笁涓婚�鍏ュ彛鎴�浘锛堟寜閽�幇宸叉挙涓嬶級锛沀nity Pipeline `capture_game_view --source screen` 鐢熸垚 |
| `AIClient/Assets/Screenshots/theme_config_only.png` | 椋庢牸鎸夐挳鎾や笅鍚庣殑瀹為檯 Play Mode 鎴�浘锛汬UD 姝e父鍔犺浇銆佹棤涓婚�鎸夐挳鏍忥紝淇濈暀閰嶇疆涓婚�锛沀nity Pipeline 鎴�浘鐢熸垚 |
| `AIClient/Assets/Scenes/Boot.unity`锛圗ventSystem锛� | 鍘� Boot 鍦烘櫙閫氳繃 Pipeline 琛ラ綈 EventSystem + StandaloneInputModule锛屼互鏀�寔 UI 鐐瑰嚮锛涗繚鐣欐棦鏈� Boot/鐩告満/鐏�厜閰嶇疆 |
## 钀ュ湴涓荤晫闈�紙2026-10-14锛�
鍙傝€冦€奀lash of Critters / 濉斿�鍐掗櫓闃熴€嬬殑钀ュ湴灞曠ず銆佷晶杈瑰叆鍙e強搴曢儴瀵艰埅甯冨眬锛岄噰鐢ㄦ湰椤圭洰瑙嗚�瑙勮寖銆備互涓嬩富鐣岄潰鐧昏�鏇夸唬涓婃柟鍘嗗彶 M4 HUD 鎻忚堪锛涘師寮圭獥鍜屼富棰橀厤缃�户缁�娇鐢ㄣ€備腑澶�洰鍓嶄负鍘熷垱闈欐€佽惀鍦版彃鐢伙紝璧勬簮銆佺瓑绾с€佷换鍔°€佺珷鑺傚強濂栧姳鏁板€间负璁捐�绀轰緥锛涘姛鑳藉叆鍙f樉绀哄缓璁句腑鎻愮ず锛岀綉缁滅姸鎬佷笌閲嶈繛缁х画浣跨敤鍘熺湡瀹為€昏緫銆�
| 璧勬簮璺�緞 | 绠€瑕佽�鏄� |
| --- | --- |
| `Doc/Design/UI/Home/home_camp_source.png` / `AIClient/Assets/Bundles/UI/Texture/Home/home_camp.png` | 鍘熷垱灏忛晣钀ュ湴鑳屾櫙锛氬ザ娌瑰眿澧欍€佹�绾㈢摝灞嬮《銆佸柗娉夈€佺尗鍜�拰鎺㈤櫓鑰咃紱鍐呯疆 ImageGen 鐢熸垚锛屾簮鍥� 941脳1672锛汸ipeline 瀵煎叆鍗曞浘 Sprite锛屾棤 Mipmap銆佹棤鎹熴€丅ilinear銆丗ull Rect |
| `Doc/Design/UI/Home/home_icons_source.png` | 鍐呯疆 ImageGen 鐢熸垚鐨勯€忔槑 4脳4 鍔熻兘鍥炬爣鍘熷浘锛�1254脳1254锛涚敤浜� Unity 鍒囧浘锛屽師鍥惧畬鏁翠繚鐣� |
| `AIClient/Assets/Bundles/UI/Texture/Home/home_ico_*.png` | 16 寮犵嫭绔嬮€忔槑 Sprite锛歝oin銆乨iamond銆乪nergy銆乤vatar銆乼asks銆乬ift銆乵ail銆乼rophy銆乥ag銆乭ome銆乥attle銆乸ets銆乧hest銆乧alendar銆乻ettings銆乸inball锛涢€氳繃 `AgentScripts/BuildHomeUi.cs` / Pipeline 鎸夌綉鏍兼彁鍙栵紝娓呴櫎閭绘牸瀛ょ珛纰庣墖锛�313/314px 鍒囩墖锛涗繚鎸佸師鍥惧儚绱犲強 Alpha锛屾棤鎹熴€佹棤 Mipmap銆丅ilinear銆丗ull Rect |
| `Doc/UIPrefabCreater/UI_MainHUD.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD.prefab` | Candy 钀ュ湴涓荤晫闈�細澶村儚/璧勬簮銆佷粖鏃ョ洰鏍囥€佷袱渚у叚鍏ュ彛銆佸叧鍗″�鍔�/缁胯壊涓绘搷浣溿€佷簲瀵艰埅銆佹柇绾块噸杩烇紱澶嶇敤 Common 鎺т欢锛�1080脳1920锛�83 鑺傜偣銆�19 浜嬩欢锛汸ython 鐢熸垚 JSON锛孭ipeline 璋冮」鐩�浆鎹㈠櫒鐢熸垚 Prefab |
| `Doc/UIPrefabCreater/UI_MainHUD_Studio.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD_Studio.prefab` | 鐩稿悓钀ュ湴甯冨眬鐨� Studio 娣辩豢涓婚�锛涘�鐢� Studio 闈㈡澘鍜屾寜閽�紝缁戝畾/浜嬩欢涓� Candy 涓€鑷达紱鐩稿悓 JSON鈫扨refab 绠$嚎 |
| `Doc/UIPrefabCreater/UI_MainHUD_Mint.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD_Mint.prefab` | 鐩稿悓钀ュ湴甯冨眬鐨� Mint 濂舵补钖勮嵎缁夸富棰橈紱澶嶇敤 CommonV30 闈㈡澘/鑳跺泭鎸夐挳锛岀粦瀹�/浜嬩欢涓€鑷达紱鐩稿悓 JSON鈫扨refab 绠$嚎 |
| `Doc/Design/UI/Home/UI_MainHUD.png` / `UI_MainHUD_Studio.png` / `UI_MainHUD_Mint.png` | 涓変富棰樼湡瀹� Prefab 鐨� 1080脳1920 棰勮�锛沀nity 闅旂�棰勮�鍦烘櫙娓叉煋 |
| `Doc/Design/UI/Home/UI_MainHUD_tall.png` | Candy 1080脳2400 闀垮睆棰勮�锛涗笂涓嬪尯鍩熺嫭绔嬮敋瀹氥€佸�搴﹀尮閰嶏紝Unity 闅旂�鍦烘櫙娓叉煋 |
| `Doc/Design/UI/Home/UI_MainHUD_reconnect.png` | Candy 鏂�嚎鎻愮ず棰勮�锛屼繚鐣欏簳閮ㄥ�鑸�拰鍘熼噸杩炵粦瀹氾紱Unity 闅旂�鍦烘櫙娓叉煋 |
| `AIClient/Assets/Screenshots/home_live.png` | 鐪熷疄 Play Mode 1080脳1920 涓荤晫闈㈡埅鍥撅紱鐧诲綍鍙� WebSocket 宸茶繛鎺ワ紝缁忚繃 EventSystem 鐐瑰嚮鍏ュ彛鍙婂脊绐楅獙璇侊紝Pipeline `capture_game_view --source screen` 鐢熸垚 |
| `Doc/Design/UI/Home/home_generation.json` | 鍐呯疆 ImageGen 鐨勫畬鏁存彁绀鸿瘝銆佸弬鑰冩潵婧愩€佸浘鏍囬『搴忋€佺敓鎴愯矾寰勩€侀獙璇佺粨鏋滀笌涓氬姟鑼冨洿璁板綍 |
楠岃瘉锛歎nity 缂栬瘧瀹屾垚锛�310 椤逛富鐣岄潰璧勬簮/鑺傜偣/鐐瑰嚮/瑙︽帶灏哄�/閲嶈繛妫€鏌ワ紝52 椤圭幇鏈変富棰樺洖褰掓�鏌ワ紝6 涓� UI Prefab 瀵诲潃鍙婁緷璧栨�鏌ラ€氳繃锛涚湡瀹炶繍琛� 8 涓�姛鑳藉叆鍙e強钀ュ湴椤电�鍛戒腑 EventSystem銆佸脊绐楁墦寮€鍏抽棴閫氳繃銆傛渶缁堣繍琛�/棰勮�鏃犳柊澧炶繍琛岄敊璇�紱杩囩▼涓�竴娆℃埅鍥剧浉瀵硅矾寰勫弬鏁版嫆缁濈殑鍘嗗彶鏃ュ織鏈�竻闄ゃ€侭oot 鍦烘櫙淇濇寔鏃犳湭淇濆瓨鍙樺寲锛屽凡閫€鍑烘祴璇� Play銆佹仮澶嶅師 Game View銆傛湭鏋勫缓 Player 鎴栧彂甯冭祫婧愬寘銆�
## 鏍囧噯 UI 鎺т欢涔濆�鏍间慨姝o紙2026-10-14锛�
| 璧勬簮璺�緞 | 绠€瑕佽�鏄� |
| --- | --- |
| `AIClient/Assets/Bundles/UI/Texture/Common/{ui_panel_main,ui_panel_popup,ui_panel_content,ui_panel_header}.png` | 4 寮犻潰鏉�/鏍囬�鏍忓簳鍥撅紱淇濈暀鍘� PNG 涓� GUID锛岄€氳繃 Unity Pipeline 鍜� `UiSpriteNineSliceRules.cs` 鑷�姩瀵煎叆锛岃�缃�湁鏁堥潪闆� Border銆丗ull Rect |
| `AIClient/Assets/Bundles/UI/Texture/Common/{btn_primary_normal,btn_primary_pressed,btn_primary_disabled,btn_secondary_normal,btn_secondary_pressed,btn_small_normal,btn_small_pressed}.png` | 7 寮犳寜閽�姸鎬佸簳鍥撅紱鐩稿悓涔濆�鏍煎�鍏ヨ�鍒欙紝鍖呭惈鏅�€�/鎸変笅/绂佺敤鎬侊紝闃叉�鍒囨崲鐘舵€佸悗鍦嗚�鎷変几 |
| `AIClient/Assets/Bundles/UI/Texture/Common/{input_bg_normal,input_bg_focus,ui_list_item_normal,ui_list_item_selected,tab_active,tab_inactive,toast_bg}.png` | 7 寮犺緭鍏�/鍒楄〃/椤电�/鎻愮ず搴曞浘锛涚浉鍚屼節瀹�牸瀵煎叆瑙勫垯 |
| `AIClient/Assets/Bundles/UI/Texture/Common/{progress_bg,progress_fill,slider_track,slider_fill,scrollbar_track_v,scrollbar_thumb_v,toggle_bg_off,toggle_bg_on}.png` | 8 寮犺繘搴�/婊戞潯/婊氬姩鏉�/寮€鍏冲簳鍥撅紱鐩稿悓涔濆�鏍煎�鍏ヨ�鍒� |
| `Doc/UIPrefabCreater/{UI_MainHUD,UI_ConfirmDialog}.json` / `AIClient/Assets/Bundles/UI/Prefab/{UI_MainHUD,UI_ConfirmDialog}.prefab` | 鍘� JSON 缁� Pipeline 璋� `JsonUIPrefabBuilder` 閲嶆柊鐢熸垚锛�27 涓�爣鍑嗘帶浠� Image 浣跨敤 Sliced锛屽苟妫€鏌� 6 涓�寜閽�姸鎬� Sprite锛涜浆鎹㈠櫒鏂板� Image 绫诲瀷銆丼prite 鍜� Border 鏍¢獙锛岀渷鐣ユ爣鍑嗘帶浠剁被鍨嬫椂榛樿� Sliced |
| `Doc/Design/UI/Home/{UI_MainHUD,UI_MainHUD_tall,UI_MainHUD_reconnect}.png` | 鏇存柊鐪熷疄 Prefab 涔濆�鏍奸�瑙堬紱Pipeline 璋� `BuildHomeUi.Preview` 鍦ㄩ殧绂婚�瑙堝満鏅�覆鏌擄紝1080脳1920 / 1080脳2400 |
| `AIClient/Assets/Editor/UI/UiSpriteNineSliceRules.cs` / `AIClient/AgentScripts/FixUiNineSlice.cs` / `Tools/output/ui_nine_slice_verification.json` | 鏍囧噯鎺т欢鑷�姩瀵煎叆瑙勫垯銆丳ipeline 淇��/楠岃瘉鍏ュ彛鍜屾�鏌ヨ�褰曪紱杈圭晫浠� Normal Set 瑙勫垝鎸夊疄闄呭昂瀵告崲绠楋紝鍖呭惈 2px 閫忔槑鐣欒竟锛孶nity Vector4 椤哄簭 L,B,R,T |
楠岃瘉锛歎nity 缂栬瘧鎴愬姛锛�298 椤逛節瀹�牸妫€鏌ラ€氳繃锛岃�鐩� 26 寮犳帶浠� Border/Full Rect銆�27 涓� Prefab 鎺т欢 Image銆�6 涓�寜閽�姸鎬佸浘銆佷笁绉嶅昂瀵镐笅涔濆�鏍肩綉鏍肩殑鍥哄畾瑙掕竟銆侀敊璇� Image 绫诲瀷鎷掔粷涓庨噸澶嶆墽琛岄浂鍙樻洿锛涘彟鏈� 116 椤逛富鐣岄潰璧勬簮/缁戝畾/鐐瑰嚮/閲嶈繛鍥炲綊妫€鏌ラ€氳繃銆傚凡鏍稿�涓荤晫闈㈠拰闀垮睆棰勮�銆傚浘鏍囧拰钀ュ湴鎻掔敾淇濇寔鏁村浘鏄剧ず锛涙湭淇�敼 PNG 鍍忕礌銆佹湭鏋勫缓鎴栧彂甯冭祫婧愬寘銆�
## Studio / Mint 閫€褰硅�褰曪紙2026-10-14锛�
鎸夌敤鎴疯�姹傚垹闄ゅ洓涓�富棰� Prefab銆佷袱濂楄创鍥剧洰褰曘€佺浉搴� JSON銆佽�璁¢�瑙堛€侀厤缃�ず渚嬪強涓撶敤鐢熸垚鑴氭湰锛涘悓鏃跺垹闄ゅ凡鍋滅敤鐨勪富棰樺垏鎹� Prefab/JSON/鑴氭湰銆俇nity 璧勪骇涓庡厓鏁版嵁閫氳繃 `AgentScripts/RemoveAlternateUi.cs` / Pipeline 鍒犻櫎銆備繚鐣� Candy 涓荤晫闈€€佺‘璁ゅ脊绐椼€丆ommon/Home 璐村浘鍙婄櫥褰�/閲嶈繛閫昏緫锛涙棫涓婚�閰嶇疆鍥為€€ Candy銆傜紪璇戙€�116 椤� Candy 妫€鏌ヤ笌淇濈暀璧勬簮渚濊禆/Art 鏀堕泦妫€鏌ラ€氳繃锛屾棤鏂板�閿欒�銆備笂鏂逛富棰樻潯鐩�负鍘嗗彶鐧昏�銆�
## G0 鐜╂硶鐣岄潰涓庤倴鍍忥紙2026-10-15锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypePinball.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypePinball.prefab` | 鍙�瀯鍑嗗脊鐝犲彴銆佽建杩圭悆銆�20 涓�脊鐗囥€佷簲涓��鍔卞尯銆佽祫婧愪笌鎹曟崏鍏ュ彛锛沗Tools/generate_prototype_ui.py` 鐢熸垚 JSON锛孶nity Pipeline 璋冪敤椤圭洰杞�崲鍣ㄧ敓鎴� Prefab锛�1080脳1920 |
| `Doc/UIPrefabCreater/UI_PrototypePets.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypePets.prefab` | 涓夊彧浼欎即銆佸叡浜��缁冦€佽繘鍖栨潯浠跺拰缂栭槦鍏ュ彛锛涚浉鍚� JSON鈫扨refab 绠$嚎 |
| `Doc/UIPrefabCreater/UI_PrototypeFormation.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeFormation.prefab` | 鐐归€変紮浼翠笌鍓嶅悗鎺掔珯浣嶃€佸崰浣嶄氦鎹€€佹帹鑽愰樀瀹瑰強鏁欏�鍏冲叆鍙o紱鐩稿悓 JSON鈫扨refab 绠$嚎 |
| `Doc/UIPrefabCreater/UI_PrototypeBattle.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeBattle.prefab` | 3D 鎴樻枟鍙犲姞 HUD銆佽€愪箙/娉㈡�/浼欎即鐢熷懡銆佹殏鍋�/閫熷害/閫€鍑猴紝浠ュ強鎸佷箙鍖栫殑鑳滆礋缁撶畻瀛愰潰鏉匡紱鐩稿悓绠$嚎 |
| `AIClient/Assets/Bundles/UI/Texture/Prototype/proto_pet_0.png` / `proto_pet_1.png` / `proto_pet_2.png` | 宀╁洟鍥€€佺伀鍠点€佽娊鑺界殑閫忔槑 256脳256 鍘熷瀷鑲栧儚锛涚敱 `BuildPrototype.cs` 鍦� Unity 闅旂�棰勮�鍦烘櫙浠庡�搴旂畝妯℃覆鏌擄紝鏃犲�閮ㄥ浘鐗囩敓鎴愭湇鍔★紱鍗曞浘 Sprite銆丗ull Rect銆佹棤 Mipmap銆佹棤鎹� |
| `Doc/UIPrefabCreater/UI_MainHUD.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD.prefab` | G0 鎺ュ叆鏇存柊锛氱�涓夎祫婧愭敼涓哄脊鐝狅紝绛夌骇/璧勬簮/鏁欏�鐩�爣璇诲彇鍘熷瀷璐﹀彿瀛樻。锛涢�閫氬�鍔辨敼涓洪噾甯�80銆佺硸鏋�40銆佸脊鐝�3锛涗繚鐣� Candy 涓庣綉缁�/閲嶈繛缁戝畾锛屽師闈欐€佽�璁¤�鏄庡睘浜庡巻鍙茬増鏈� |
| `AIClient/Assets/Screenshots/g0_pinball.png` / `g0_pets.png` / `g0_formation.png` / `g0_battle.png` / `g0_result.png` / `g0_home.png` | 瀹為檯 Play Mode 鐨勫脊鐝犮€佷紮浼淬€佸竷闃点€佹垬鏂椼€佺粨绠椾笌棣栭〉鎴�浘锛涚敱 Pipeline 鐨� `capture_game_view` 鍚庡彴鐢婚潰瀹炵幇鐢熸垚锛�1080脳1920锛涗笟鍔$偣鍑婚獙璇佷娇鐢ㄧ嫭绔嬩复鏃惰处鍙� |
鏍囧噯鎺т欢澶嶇敤 Common 涔濆�鏍间笌 TMP 瀛椾綋锛涗笟鍔¢�鏋跺叏閮ㄦ潵鑷� JSON锛屾湭鎭㈠� Studio/Mint銆傚師鍨嬭祫婧愪笌楠岃瘉鑼冨洿瑙� `Doc/Design/G0_Implementation.md`銆�
## 棣栫珷浜斿叧鐣岄潰锛�2026-10-16锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypeStages.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeStages.prefab` | Candy浜斿叧閫夊叧椤碉紝鏄剧ず瑙i攣銆侀€氬叧璁板綍銆佹晫浜哄厓绱犮€佽�缁冨缓璁�€侀€愬叧棣栭€氬�鍔卞強鍏冪礌鍏崇郴锛沗generate_prototype_ui.py`鈫抈BuildProgression.Build`鈫掗」鐩�浆鎹㈠櫒锛�1080脳1920锛孋ommon涔濆�鏍�/TMP锛孉rt/UI鎸夌洰褰曟敹闆� |
| `UI_PrototypePinball` / `UI_PrototypePets` / `UI_PrototypeFormation` / `UI_PrototypeBattle` 鐨勬棦鏈塉SON涓嶱refab璺�緞 | 鏇存柊浜斾釜钀藉尯鐨勭硸鏋�/閲戝竵鍙屽�鍔便€侀厤缃�寲浼欎即鎶€鑳借�鏄庛€侀€夊叧杩斿洖鍏ュ彛鍜屾晫浜�/濂栧姳鎻愮ず銆佸叧鍗℃爣棰樸€侀厤缃�寲缁撶畻鍙婁笅涓€鍏虫寜閽�紱鍚屼竴JSON鈫扨refab绠$嚎锛屽�鐢ㄥ凡鐧昏�鍒囧浘銆佽倴鍍忎笌鎴樺満锛屼笉鐢熸垚鏂版ā鍨� |
| `AIClient/Assets/Screenshots/progression_stages_locked.png` / `progression_stages_progress.png` / `progression_pets.png` / `progression_formation1.png` / `progression_formation2.png` / `progression_result1.png` / `progression_result2.png` / `progression_home.png` | 鐙�珛娴嬭瘯鏈嶅姟/璐︽埛鐨勫疄闄呰繍琛屾埅鍥撅紝鐢盪nity Pipeline灞忓箷鎹曡幏鐢熸垚锛�1080脳1920锛岀敤浜庨攣瀹�/瑙i攣銆佹妧鑳借�鏄庛€佸叧鍗″噯澶囥€佺粨绠楀拰棣栭〉鍔ㄦ€佸�鍔辩殑瑙嗚�楠屾敹 |
## 浜斾紮浼翠笌棣栫珷鎹曟崏椤碉紙2026-10-16锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `AIClient/Assets/Bundles/UI/Texture/Prototype/proto_pet_3.png`銆乣proto_pet_4.png` | 闂�棯闆€銆佹场娉¢緹閫忔槑256脳256鑲栧儚锛沗BuildPrototype.cs` 缁廢nity Pipeline鍦ㄩ殧绂婚�瑙堝満鏅�粠瀵瑰簲鍘熷垱鍑犱綍绠€妯℃覆鏌擄紝`RefreshNewPortraits`璋冩暣楦熷啝鍙栨櫙锛涘崟鍥維prite/Full Rect/鏃燤ipmap锛岄潪澶栭儴鍥剧墖鐢熸垚銆傛棦鏈�0锝�2鑲栧儚鐢辩浉鍚屾瀯寤哄櫒閲嶆覆鏌撱€� |
| `Doc/UIPrefabCreater/UI_PrototypeCapture.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeCapture.prefab` | 鏂板�Candy浼欎即鎹曟崏椤碉細浜斾紮浼磋倴鍍忋€佹櫘閫�/鏈��姒傜巼銆佸凡鎷ユ湁/纰庣墖銆佹崟鎹夊埜銆佹暀瀛�/淇濆簳/闆嗛綈璇存槑銆佹渶杩戠粨鏋溿€俙generate_prototype_ui.py`鐢熸垚JSON锛孭ipeline鎵ц�`BuildProgression.Build`璋冪敤杞�崲鍣ㄥ埗浣淧refab锛�1080脳1920锛孋ommon鏈夋晥涔濆�鏍�/TMP銆� |
| `Doc/UIPrefabCreater/UI_PrototypePets.json`銆乣UI_PrototypeFormation.json` 鍙婂悓鍚� `AIClient/Assets/Bundles/UI/Prefab/` Prefab | 浼欎即鍒楄〃鎵╁睍浜斿紶鍗$墖锛屼笁琛屽睘鎬�/鎶€鑳戒俊鎭�紱甯冮樀鎵╁睍浜斾釜鍙�€変紮浼达紝浠嶄娇鐢ㄤ腑澶�矾绾垮墠鍚庝袱妲姐€傜浉鍚孞SON鈫扨refab绠$嚎锛岃倴鍍忔暣鍥炬樉绀猴紱Pinball鎹曟崏鍏ュ彛鏀逛负鍏堟墦寮€姒傜巼椤点€傚叚涓�帺娉昉refab瀛椾綋/涔濆�鏍兼�鏌ラ€氳繃銆� |
| `AIClient/Assets/Screenshots/collection_tutorial.png`銆乣collection_pity.png`銆乣collection_water_result.png`銆乣collection_pets.png`銆乣collection_complete.png`銆乣collection_duplicate_result.png`銆乣collection_formation.png`銆乣collection_battle.png`銆乣collection_recovery.png` | 鐙�珛18081鏈嶅姟/璐﹀彿鐨勭湡瀹濸lay Mode鎴�浘锛岀敱Pipeline鍚庡彴Game View鎹曡幏锛�1080脳1920锛涜�鐩栨暀瀛︾┖鍘嗗彶銆�100%缂哄け浼欎即淇濆簳銆佹崟鎹夌粨鏋溿€侀泦榻�/纰庣墖銆佷簲浼欎即鍒楄〃銆佹按鐢甸槦浼嶄笂闃典笌鍘熸崟鎹夊洖鎵ф仮澶嶃€傛棭鏈熸暀瀛﹁繃绋嬫埅鍥綻progression_capture_tutorial.png`涓轰慨姝g┖鍘嗗彶鏄剧ず鍓嶇殑鍘嗗彶妫€鏌ュ浘锛岀幇浠�collection_tutorial.png`涓哄噯銆傛棤鐪熷疄璐﹀彿娴嬭瘯鎵h垂銆� |
## 钀ュ湴璁炬柦涓庤�楗扮湅鏉匡紙2026-10-16锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `AIClient/Assets/Bundles/UI/Texture/Prototype/proto_decor_0.png`銆乣proto_decor_1.png`銆乣proto_decor_2.png` | 灏忔棗/鐩嗘牻/璺�伅鐨勯€忔槑256脳256鑲栧儚锛汸ipeline鎵ц�`BuildCampAssets.cs`鍦ㄩ殧绂婚�瑙堝満鏅�粠瀵瑰簲Prefab鍑犱綍浣撴覆鏌擄紝瀵煎叆Single Sprite銆丗ull Rect銆佹棤Mipmap銆佹棤鎹熷帇缂┿€傛湭璋冪敤澶栭儴鍥剧墖鐢熸垚鏈嶅姟銆� |
| `Doc/UIPrefabCreater/UI_PrototypeCamp.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeCamp.prefab` | Candy钀ュ湴鐢熸椿椤碉細璁炬柦鍏ュ彛/瑙i攣鐘舵€併€佽祫婧�/鎭㈠�鍊掕�鏃躲€佷簲浼欎即浼戞伅閫夋嫨銆佷簰鍔ㄦ�鏁板拰鍔ㄤ綔鍙嶉�銆俙generate_prototype_ui.py`鈫扨ipeline `BuildCampAssets.Build`鎴朻BuildProgression.Build`鈫掗」鐩甁SON杞�崲鍣�紱1080脳1920锛屽�鐢℉ome鍥炬爣銆佸師浜旇倴鍍忋€丆ommon鏈夋晥涔濆�鏍间笌TMP瀛椾綋銆� |
| `Doc/UIPrefabCreater/UI_PrototypeBuild.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeBuild.prefab` | Candy瑁呴グ璐�拱涓庝笁妲界湅鏉匡紝鏄剧ず鐩�綍/浠锋牸/鎷ユ湁浣嶇疆銆佸崐閫忔槑棰勮�銆佽垂鐢ㄧ‘璁ゃ€佹挙鍥炲拰浠撳簱鏀跺洖锛涘悓涓€JSON鈫扨refab绠$嚎銆傞€氳繃鍙��鎬�/鏂囧瓧/棰滆壊鏇存柊鏃㈡湁鑺傜偣锛屾湭杩愯�鏃舵嫾涓氬姟楠ㄦ灦銆� |
| `AIClient/Assets/Screenshots/camp_locked.png`銆乣camp_rest.png`銆乣camp_unlocked.png`銆乣camp_catalogue.png`銆乣camp_preview.png`銆乣camp_placed.png`銆乣camp_warehouse.png`銆乣camp_recovery.png`銆乣camp_restored.png`銆乣camp_insufficient.png` | Unity Pipeline鎹曡幏鐙�珛18081鏈嶅姟/璐﹀彿瀹為檯EventSystem鐐瑰嚮鐢婚潰锛�1080脳1920锛涜�鐩栭攣瀹�/瑙i攣銆佷紤鎭�簰鍔ㄣ€佺洰褰曘€侀�瑙堛€佺‘璁ゆ墸璐广€佹敹鍥炪€佹柇绾垮洖鎵с€侀噸杩涘竷灞€鍜屼綑棰濅笉瓒炽€傞�瑙堢暀鐧藉井璋冨悗宸查噸鏂版崟鑾穈camp_preview`涓巂camp_insufficient`锛涘叾浣欏浘淇濈暀瀵瑰簲閫氳繃鐨勪笟鍔$姸鎬併€� |
璧勪骇楠岃瘉銆佸叓涓�帺娉昉refab瀛椾綋/涔濆�鏍煎拰瀹為檯鐐瑰嚮鍧囬€氳繃銆傞�椤碘€滆惀鍦扳€濇寜閽�繚鐣檂MainHUD.Home`浜嬩欢濂戠害锛岀敱`GameplayBootstrap`璺�敱鑷矯amp鍏ュ彛锛屽師棣栭〉Prefab楠ㄦ灦涓嶅彉銆�
## 姣忔棩浠诲姟涓庝竷鏃ョ�鍒帮紙2026-10-16锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypeTasks.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeTasks.prefab` | Candy浠诲姟涓庣洰鏍囬〉锛�40鑺傜偣锛氶暱鏈熸暀瀛︾洰鏍囥€佷笁椤规瘡鏃ヨ繘搴�/濂栧姳銆侀�鍙�/鍓嶅線銆侀噸缃�€掕�鏃跺拰绛惧埌鍏ュ彛銆俙generate_prototype_ui.py`鐢熸垚JSON锛孶nity Pipeline鎵ц�`BuildDaily.Build`鎴朻BuildProgression.Build`璋冪敤椤圭洰杞�崲鍣ㄥ埗浣淧refab锛�1080脳1920锛屽�鐢–ommon鏈夋晥涔濆�鏍间笌TMP銆� |
| `Doc/UIPrefabCreater/UI_PrototypeSignin.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeSignin.prefab` | Candy涓冩棩绱��鐧诲綍椤碉紝54鑺傜偣锛屾樉绀轰竷椤瑰�鍔便€佹湭瑙i攣/鍙��/宸查�銆佺疮璁¤繘搴﹀拰瑙勫垯锛涘悓涓€JSON鈫扨refab绠$嚎锛屽�鐢╜Home/home_ico_pinball.png`锛屾湭鐢熸垚鏂拌创鍥俱€� |
| `Doc/UIPrefabCreater/UI_MainHUD.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_MainHUD.prefab` | `generate_home_ui.py`澧炲姞宸插埗浣滅殑`Dot_Tasks`鑺傜偣锛屽�鐢╜toggle_knob`绾㈣壊鏁村浘锛沗BuildDaily.Build`閲嶆柊鐢熸垚鍘熼�椤礟refab銆傛暀瀛�/姣忔棩浠诲姟涓庣�鍒扮孩鐐瑰彧鍦ㄥ彲棰嗘椂浜�捣锛岄�椤典簨浠�/閲嶈繛濂戠害涓嶤andy鎻掔敾淇濈暀銆� |
| `AIClient/Assets/Screenshots/daily_home.png`銆乣daily_signin1.png`銆乣daily_signin_reward.png`銆乣daily_tasks_empty.png`銆乣daily_shot_ready.png`銆乣daily_battle_ready.png`銆乣daily_rest_ready.png`銆乣daily_tasks_claimed.png`銆乣daily_signin3.png`銆乣daily_recovery.png`銆乣daily_signin_complete.png`銆乣daily_home_claimed.png` | 鐙�珛18081璐﹀彿鐪熷疄Play Mode鐢婚潰锛孶nity Pipeline鍚庡彴Game View鎹曡幏锛�1080脳1920锛涜�鐩栭�鏃ュ�鍔�/閿佸畾銆佺湡瀹炲彂灏�/鍐掗櫓/浜掑姩浠诲姟銆佸凡棰嗙姸鎬併€佺疮璁$櫥褰曞す鍏枫€佷涪澶辩‘璁ゅ師鍥炴墽鍙婄孩鐐规竻闄ゃ€傛渶缁堣�鏄庢枃瀛楁洿鏂板悗閲嶆媿`daily_tasks_claimed/signin_complete/home_claimed`锛屽叾浠栧浘涓哄�搴斾笟鍔¢獙鏀惰繃绋嬭�褰曘€� |
鍗佷釜鐜╂硶Prefab瀛椾綋/涔濆�鏍笺€�115椤归�椤佃祫婧�/缁戝畾/鐐瑰嚮/閲嶈繛妫€鏌ラ€氳繃銆傛棤鏂板�妯″瀷銆侀煶鏁堛€丄nimationClip鎴栧�閮ㄧ敓鎴愬浘鐗囥€�
## 鍐掗櫓鑳屽寘涓庤ˉ缁欏晢搴楋紙2026-10-16锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/UIPrefabCreater/UI_PrototypeBag.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeBag.prefab` | Candy鍥涘垎绫昏儗鍖咃紝85鑺傜偣锛屾樉绀烘崟鎹夊埜銆佷簲绉嶄紮浼寸�鐗囥€佷笁浠惰�楗扮殑鏁伴噺/鏉ユ簮/鐢ㄩ€�/姘镐箙鏈夋晥璇存槑锛屼互鍙婃椿鍔ㄩ亾鍏风┖鐘舵€侊紱瀹氫綅鎹曟崏銆佸煿鍏汇€佸竷缃�拰琛ョ粰鍏ュ彛銆俙generate_prototype_ui.py`鐢熸垚JSON锛孭ipeline鎵ц�`BuildInventory.Build`鎴朻BuildProgression.Build`缁忛」鐩�浆鎹㈠櫒鐢熸垚Prefab锛�1080脳1920銆� |
| `Doc/UIPrefabCreater/UI_PrototypeShop.json` / `AIClient/Assets/Bundles/UI/Prefab/UI_PrototypeShop.prefab` | Candy琛ョ粰鍟嗗簵锛�61鑺傜偣锛屽厤璐�/閲戝竵/瑁呴グ涓夐〉绛撅紝鍟嗗搧鍐呭�/浠锋牸/鍏冲崱鏉′欢/褰撴棩鍓╀綑銆佸敭缃�/浣欓�涓嶈冻銆侀噸缃�椂闂村拰鑳屽寘鍏ュ彛锛涢噾甯佺‘璁や笌鍘熺粨鏋滄仮澶嶅�鐢╜UI_ConfirmDialog`銆傜浉鍚孞SON鈫扨refab绠$嚎锛屾湭杩愯�鏃舵嫾涓氬姟楠ㄦ灦銆� |
| 涓ら〉寮曠敤鐨勬棦鏈� `Common/`銆乣Home/home_ico_{pinball,gift,pets}.png`銆乣Prototype/proto_pet_0锝�4.png`銆乣proto_decor_0锝�2.png`銆乀MP瀛椾綋 | 鍏ㄩ儴澶嶇敤宸茬櫥璁拌祫婧愶紱鏍囧噯鎺т欢Sliced涓庢湁鏁圔order/Full Rect锛屽浘鏍�/鑲栧儚淇濇寔鏁村浘姣斾緥銆傛棤鏂板�璐村浘鐢熸垚銆佹ā鍨嬨€丄nimationClip鎴栭煶鏁堛€� |
| `AIClient/Assets/Screenshots/inventory_bag_empty.png`銆乣inventory_materials_empty.png`銆乣inventory_events_empty.png`銆乣inventory_free.png`銆乣inventory_locked.png`銆乣inventory_free_claimed.png`銆乣inventory_confirm.png`銆乣inventory_recovery.png`銆乣inventory_sold_out.png`銆乣inventory_bag_ticket.png`銆乣inventory_materials.png`銆乣inventory_shop_decor.png`銆乣inventory_bag_decor.png`銆乣inventory_insufficient.png`銆乣inventory_refreshed.png` | 鐙�珛18081鏈嶅姟/璐﹀彿鐪熷疄EventSystem鐐瑰嚮鐢婚潰锛孭ipeline鍚庡彴Game View鎹曡幏锛�1080脳1920锛涜�鐩栫┖搴撳瓨/鍒嗙被銆侀攣瀹�/鍏嶈垂銆佽喘涔扮‘璁�/鍥炴墽銆佸敭缃勩€佷娇鐢ㄥ悗搴撳瓨銆佽�楗颁綅缃�€佷綑棰濅笉瓒冲拰鍒锋柊銆傚叏閮ㄦ潵鑷�殧绂绘祴璇曟暟鎹�紝鐪熷疄璐﹀彿鏈�敤浜庢秷璐归獙璇併€� |
鍗佷簩涓�帺娉昉refab瀛椾綋/涔濆�鏍笺€�115椤归�椤甸潤鎬佹�鏌ヤ笌鍏�釜棣栭〉鍏ュ彛/钀ュ湴瀹為檯鐐瑰嚮鍥炲綊閫氳繃銆傞�椤礟refab楠ㄦ灦鏈�敼鍙橈紝鍟嗗簵銆佽儗鍖呬笌閲戝竵鍏ュ彛鐢盽PrototypeFlow`鎺ョ�銆�
| 2026-10-18 | `AIClient/Assets/Screenshots/battle-after-fix.png` | Unity Game View 楠岃瘉鎴�浘锛氭垬鏂楀満鏅�樉绀哄博鍥㈠洟涓庣伀鍠佃�鑹层€佷笁鏉¤矾绾夸笌鎶€鑳藉啝楗帮紱閫氳繃 Pipeline 鎴�彇锛屼粎鐢ㄤ簬鍥炲綊璁板綍銆� |
| 2026-10-18 | `Doc/Design/Scene/Battlefield/Battlefield_Design_A_GreenFork.png`銆乣Battlefield_Design_B_StreamBridges.png`銆乣Battlefield_Design_C_OldGarden.png` | 鎴樺満璁捐�闃舵�涓夐€変竴鏂规�鍥撅紱A 宸茬敱 `Tools/generate_battlefield_designs.py` 璋冪敤 `Tools/gpt_image_generate.py` 浣跨敤 `gpt-image-2.5` 鐢熸垚骞惰�鐩栵紝瀹炴祴 1254脳1254锛屾彁绀鸿瘝瑙� `Doc/Design/Scene/Battlefield/battlefield_design_prompts.json`銆侭/C 浠嶅緟鐢熸垚銆� |
| 2026-10-18 | `Doc/Design/Scene/Battlefield/A/ground.png`銆乣A/parts/{tree,rock,bridge,sign,shrub}.png` | A路缁块噹涓夊矓鍙e湴琛ㄤ笌缁勪欢鎷嗗垎璁捐�鍥撅紱`Tools/generate_battlefield_components.py` 浣跨敤 `gpt-image-2.5`锛屼互鎻愮ず璇嶆弿杩� Candy 涓荤晫闈㈤�鏍硷紙鏈�笂浼犻」鐩�唴閮ㄥ弬鑰冨浘锛夛紝瀹炴祴鍧囦负 1254脳1254锛涘湴琛ㄤ负淇��璺�嚎鍥撅紝缁勪欢涓虹函鐧借儗鏅�崟浠� 3/4 瑙嗗浘锛岀姸鎬佹枃浠朵笌鐩�爣闈㈡暟宸茬櫥璁般€� |
| 2026-10-18 | `Doc/Design/Scene/Battlefield/A/ground_model_ref.png` | 为混元图生3D优化的单一连续地表参考图;GPT Image 2.5,1:1,3/4等距视角,整块地形平台,避免原俯视路线审核图在网页端被判定为“主体不明确”。 |
| 2026-10-19 | `Doc/Design/Scene/Battlefield/A/ground_model_ref_gpt_image_status.json` | 地表模型参考图由 GPT Image 2.5 生成的回执;用于混元图生 3D,不替代路线布局审核图。 |
## 宀╁洟鍥� Walk 楠岃瘉锛�2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `AIClient/Assets/Screenshots/rockball_walk_review.png` | Pipeline capture_game_view 1400脳850锛汻ockBallWalkReview鍦烘櫙锛屽乏涓洪獙鏀堕潤鎬佹ā锛屽彸涓轰慨姝e悗鐨�12楠╓alk銆� |
| `Tools/output/rockball_walk_audit/{bind,walk_0,walk_1,walk_2,walk_3}.png` | Pipeline鎵ц�AuditAnimalWalk.Capture锛屽湪闅旂�PreviewScene涓�覆鏌撶粦瀹氬Э鎬佷笌鍥涗釜璧拌矾鐩镐綅锛涚敤浜庢�鏌�-up銆佹�闈€€佽创鍥句笌钂欑毊褰㈠彉銆� |
| `AIClient/Assets/Screenshots/rockball_walk_play.png` | 鍚屼竴骞舵帓鍦烘櫙鐨凱lay Mode鎴�浘锛沄erifyAnimalWalk.Live鍦ㄥ疄闄呮挱鏀剧害16鍦堝悗閫氳繃锛岄殢鍚庨€€鍑篜lay銆� |
## 鏁屾柟涓夊姩浣滃埗浣滄爣鍑嗭紙2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `AIClient/Assets/Screenshots/enemy_rockball_review.png` | Pipeline鎵ц�BuildEnemyReview.Capture锛�1900脳760骞舵帓娓叉煋闈欐€佸�鐓с€両dle銆乄alk銆丄ttack鍛戒腑甯т笌杞�挱鏍蜂緥锛涗笁涓�簮鍔ㄤ綔鍚屽睘12楠�紝绂荤嚎缂栬緫鍚庨獙鏀躲€� |
| `AIClient/Assets/Screenshots/enemy_rockball_play.png` | 鏍囧噯鍏ュ彛--play-check鍦ㄥ疄闄匬lay Mode瑙傚療鍒癐dle/Walk/Attack骞朵繚鎸侀€昏緫鏍瑰浐瀹氬悗鎴�浘锛岄殢鍚庤嚜鍔ㄩ€€鍑篜lay銆� |
## 鐏�柕 T1 浼欎即鍒朵綔锛�2026-10-20锛�
| 璧勬簮璺�緞 | 鐢ㄩ€斾笌鐢熸垚鏂瑰紡 |
| --- | --- |
| `Doc/Design/Character/FireCat/firecat.png` | 涓嬩竴浣嶄紮浼寸伀鍠礣1鍥剧敓3D璁捐�鍘熺ǹ锛�1086脳1448锛屽唴缃甶magegen鍙傝€冨博鍥㈠洟椋庢牸涓巔roto_pet_1韬�唤閰嶈壊鐢熸垚锛涚煭鑵垮弻瓒炽€佸疄浣撶伀鐒板熬灏栥€侀潚鑹查�鍦堬紝鐧藉簳鍥涜�RGB鏈€灏�253銆傜敓鎴愭彁绀轰笌鑼冨洿瑙佸悓鐩�綍design_prompt.txt銆丳roductionBrief.md銆� |
| `Tools/output/companions/FireCat/static_audit/{front,side,back,perspective}.png` | AuditCharacterVisual.Capture缁廝ipeline鍦ㄩ殧绂籔reviewScene娓叉煋鐏�柕闈欐€佹ā鐨勫洓涓�柟鍚戯紝640脳640锛涙牳瀵�1998 tris浣庢ā鐨勬�闈�/閫犲瀷/XPbr鍜岃创鍦帮紝鏈�敼鍔ㄦ墦寮€鍦烘櫙銆� |
| `AIClient/Assets/Screenshots/companion_firecat_review.png` | Pipeline BuildEnemyReview.Capture鎸塩ompanion閰嶆柟鐢熸垚1900脳760姝e紡骞舵帓楠屾敹锛歋tatic/Idle/Walk/鏂芥硶鍑烘墜/杞�挱銆傚熬閮ㄦ潈閲嶄笌鎶�埅淇��鍚庨噸鎷嶃€� |
| `AIClient/Assets/Screenshots/companion_firecat_play.png` | 缁熶竴鍏ュ彛瀹為檯Play楠岃瘉瑙傚療鍒癐dle/Walk/Attack銆侀€昏緫鏍瑰浐瀹氬悗鎴�浘锛岄殢鍚庨€€鍑篜lay銆� |
| `Tools/output/companions/FireCat/attack_audit/{front,side,back,perspective}.png` | 淇��灏鹃儴钂欑毊鍜屽弻鐖�柦娉曞悗鐨勫嚭鎵嬪抚闅旂�娓叉煋锛�640脳640锛涙牳瀵瑰弻鐖�墠鎺ㄤ笌灏鹃儴浣撶Н銆� |
+5
View File
@@ -4,3 +4,8 @@
| 资源路径 | 简要说明 |
| --- | --- |
| `AIClient/Assets/Bundles/Sound/BGM/CandyCamp_MainMenu_Loop.ogg` | 2026-10-20:Candy 营地主界面 BGM《糖果营地》,按 `D:/UD/AI/XModel/DGX音乐_AI调用指南.md` 调用 DGXA ACE-Step 1.5 XL SFT,50 步、单首、空歌词生成。温暖轻快的原声木琴/马林巴、拨弦、木吉他与柔和木管方向;90.9 秒、48 kHz、立体声 Vorbis,约 1.55 MiB。由94秒原曲裁掉尾部衰减并做1.8秒首尾等功率交叠,峰值约 -3.17 dBFS;仅完成技术衔接平滑,音乐听感待人工试听。Unity Pipeline 导入为 CompressedInMemory、后台加载、不预加载;收集到 Art/Sound,地址 `CandyCamp_MainMenu_Loop`,PackSeparately。未接入运行时播放、未构建或发布。生成与验证详见 `Doc/Design/Sound/MainMenu/ProductionBrief.md`。 |
| `Doc/Design/Sound/MainMenu/CandyCamp_MainMenu_Source.mp3` | 同批 DGX 原始成品保留稿;94 秒、48 kHz、立体声 MP3 128 kbps,无歌词;不进入 Bundle。种子 `1430014797`,LM 规划200 BPM、C大调、三拍(规划值,未经人工节拍确认)。原始服务元数据 `server_metadata.json`,提示词/后期参数/校验值 `generation.json`,Unity 回执 `unity_validation.json`。 |
| `AIClient/Assets/Bundles/Sound/BGM/MeadowBreeze_MainMenu_Loop.ogg` | 2026-10-20:用户确认正式选用的主界面BGM《微风小镇》。温暖钢琴、疏朗木管、薄弦乐与少量竖琴方向,不引用既有电影旋律。依DGX指南使用ACE-Step 1.5 XL SFT、50步、单首、空歌词生成;84秒、48 kHz立体声Vorbis,1,408,223字节。首尾2秒交叠平滑、RMS约-24.00 dBFS、峰值约-9.17 dBFS。Unity Pipeline导入验证通过,Art/Sound,地址 `MeadowBreeze_MainMenu_Loop`。通过 `MainMenuMusic.prefab` 接入菜单循环、音乐开关独立暂停/续播,战斗与弹珠暂停。旧版留档,未构建或发布。详见 `Doc/Design/Sound/MainMenuSoft/ProductionBrief.md`。 |
| `Doc/Design/Sound/MainMenuSoft/MeadowBreeze_MainMenu_Source.mp3` | 《微风小镇》DGX原曲留档,87秒、48 kHz立体声MP3 128 kbps;种子 `2085836397`。LM规划120 BPM、E大调、4拍,属服务规划值,未经人工节拍确认。提示词 `prompt.txt`、原始元数据 `server_metadata.json`、生成及音频检查 `generation.json`、Unity导入回执 `unity_validation.json` 同目录保留;不进入Bundle。 |
| `AIClient/Assets/Bundles/Sound/Prefab/MainMenuMusic.prefab` | 2026-10-20:《微风小镇》独立播放器,Unity Pipeline执行 `AgentScripts/BuildMainMenuMusic.cs` 制作。AudioSource持久引用84秒OGG;2D、loop=true、playOnAwake=false、volume=1,可在Prefab调节音量。`GameplayBootstrap`经YooAsset异步加载并持有,`MainMenuMusic`组件控制音乐偏好与页面暂停/续播。Art/Sound按地址 `MainMenuMusic` 单独收集。验证见 `playback_assets.json`、`playback_validation.json`;未构建或发布。 |
+2 -1
View File
@@ -57,7 +57,8 @@ Canvas、CanvasScaler、GraphicRaycaster、CanvasGroup、Image、TextMeshProUGUI
- 糖果风:大圆角、描边、顶部高光;配色见 Design Principles。
- 优先复用 Common 切图名(`ui_panel_*`、`btn_primary_*` 等)。
- 可拉伸控件 `"imageType": "Sliced"`;图标 Simple。
- 标准控件底图(面板、按钮及各状态、输入框、列表项、页签、进度/滑条/滚动条、Toast、开关底)必须九宫格:`"imageType": "Sliced"`,对应 Sprite 必须有有效的非零 `Border`,Mesh Type=`Full Rect`;图标、插画等整图用 Simple。
- Common 标准控件导入由 `UiSpriteNineSliceRules` 自动设置 Border;现有资源修复菜单为 `Tools/UI/Apply Standard Control Nine-Slice`。新增标准控件须补充切图清单和导入规则,不得只填 Sliced 而留 Border 为 0。
- 文字仅 `TextMeshProUGUI`;浅色字加 Outline/Shadow(`#102033` / `#0B1724`)。
- 按钮优先 SpriteSwap;缺 hover 图可用 ColorTint。
- 缺图时在 `description` 标明,按 `ResourceCreate.md` 生成并登记 `Doc/ResDesc_Picture.md`。
+8
View File
@@ -56,8 +56,16 @@ Canvas、CanvasScaler、GraphicRaycaster、CanvasGroup、Image、TextMeshProUGUI
### 按钮 / 列表模板
- 按钮:`Image`(Sliced)+ `Button`(SpriteSwap:normal/pressed/disabled;无 hover 切图可用 ColorTint)。
- `Button.transition: ColorTint` 支持 `normalColor` / `highlightedColor` / `pressedColor` / `selectedColor` / `disabledColor` / `fadeDuration`;不填时沿用 Unity 默认。可选 `targetGraphic` 为 Graphic 节点名,可将点击区域与实际变色的子图标分开(Mint 关闭按钮)。
- 列表:`ScrollRect` → Viewport(RectMask2D)→ Content(VerticalLayoutGroup + ContentSizeFitter)→ Item_Template。
### 标准控件九宫格(必须)
- 面板、按钮及所有状态、输入框、列表项、页签、进度条、滑条/滚动条、Toast、开关底图必须使用 `Image.imageType: Sliced`,Sprite 配置有效的非零 `Border` 和 `Full Rect`。
- `UiSpriteNineSliceRules.cs` 自动维护 Common 的标准控件导入设置;已有资源执行 `Tools/UI/Apply Standard Control Nine-Slice` 后重建对应 JSON Prefab。边界取自 `UI_Normal_Set.md` 并按实际切图尺寸换算,包含 2px 透明留边;Unity 的 Border Vector4 顺序为 L,B,R,T。
- 转换器检查标准控件的 Image 类型、Sprite 及 Border(包含 Button 状态图);省略 Image 类型时默认 Sliced。
- 新增标准控件须扩展切图清单与导入规则。图标、插画、带完整符号的关闭/返回图等整图保持 Simple、等比显示。
## Part C - 接管与排错
1. 确认自动转换开启,或执行 `Convert Changed JSON Prefabs Now`。
+8 -1
View File
@@ -39,7 +39,7 @@
- `referenceResolution`: `[1080, 1920]`
- 文字:仅 TextMeshPro,默认字体 `Assets/Bundles/UI/Font/siyuan_CN_Bold SDF.asset`(由 `siyuan_CN_Bold.otf` 生成,动态图集);浅色字描边/阴影非纯黑。
- 九宫格:`imageType: Sliced`
- 标准控件底图必须九宫格:`imageType: Sliced` + Sprite 有效非零 `Border` + `Full Rect`;按钮状态图同样设置。Common 导入规则:`UiSpriteNineSliceRules.cs`;修复菜单:`Tools/UI/Apply Standard Control Nine-Slice`。
- 按钮:SpriteSwap 优先
- `MonoBehaviour.typeName` 指向 HotUpdate 类型
@@ -48,6 +48,13 @@
- **一律异步**(YooAsset);禁止新写同步加载热更资源。
- Prefab/贴图路径建议带 `Assets/Bundles/...`。
## UI 风格
- 当前仅使用 Candy 糖果风;Studio / Mint 主题与停用的切换入口已删除。
- `BootSettings.UiTheme` / 远程 `version.json.uiTheme` 保留用于旧配置兼容,其他值回退 Candy。
- 业务按逻辑名异步打开:`UiManager.OpenAsync`。
- UI Prefab 收集进 Art/UI,图片与字体作为依赖进入资源包。
## 与图集方案关系
- 现阶段允许 Common 下单图 Sprite 直接被 Prefab 引用。
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+997
View File
@@ -0,0 +1,997 @@
{
"schemaVersion": 1,
"prefabName": "UI_PrototypeBattle",
"prefabPath": "Assets/Bundles/UI/Prefab/UI_PrototypeBattle.prefab",
"description": "G0 玩法原型 / Candy。JSON→Prefab;PrototypeFlow 绑定节点并更新表现,不运行时拼接业务骨架。",
"canvas": {
"canvasScaler": {
"referenceResolution": [
1080,
1920
],
"matchWidthOrHeight": 0
}
},
"assets": {
"sprites": {
"btn_primary_disabled": "Assets/Bundles/UI/Texture/Common/btn_primary_disabled.png",
"btn_primary_normal": "Assets/Bundles/UI/Texture/Common/btn_primary_normal.png",
"btn_primary_pressed": "Assets/Bundles/UI/Texture/Common/btn_primary_pressed.png",
"btn_secondary_normal": "Assets/Bundles/UI/Texture/Common/btn_secondary_normal.png",
"btn_secondary_pressed": "Assets/Bundles/UI/Texture/Common/btn_secondary_pressed.png",
"ui_panel_content": "Assets/Bundles/UI/Texture/Common/ui_panel_content.png",
"ui_panel_popup": "Assets/Bundles/UI/Texture/Common/ui_panel_popup.png"
}
},
"nodes": [
{
"name": "UI_PrototypeBattle",
"parent": null,
"active": true,
"rect": {
"anchorMin": [
0,
0
],
"anchorMax": [
1,
1
],
"offsetMin": [
0,
0
],
"offsetMax": [
0,
0
]
},
"components": [
{
"type": "Canvas",
"sortingOrder": 300
},
{
"type": "CanvasScaler",
"referenceResolution": [
1080,
1920
],
"matchWidthOrHeight": 0
},
{
"type": "GraphicRaycaster"
}
]
},
{
"name": "Top",
"parent": "UI_PrototypeBattle",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
32,
-48
],
"sizeDelta": [
1016,
246
]
},
"components": [
{
"type": "Image",
"sprite": "ui_panel_content",
"imageType": "Sliced",
"color": "#FFFFFF",
"raycastTarget": false,
"preserveAspect": false
}
]
},
{
"name": "Txt_BattleTitle",
"parent": "Top",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
30,
-24
],
"sizeDelta": [
740,
62
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "绿野初程 · 营地防守",
"fontSize": 40,
"color": "#5A4632",
"alignment": "Left",
"raycastTarget": false
}
]
},
{
"name": "Txt_BattleInfo",
"parent": "Top",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
30,
-108
],
"sizeDelta": [
956,
98
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "第 1 波 / 3\n防线 10 / 10",
"fontSize": 32,
"color": "#5A4632",
"alignment": "Left",
"raycastTarget": false
}
]
},
{
"name": "Btn_Abandon",
"parent": "UI_PrototypeBattle",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
822,
-76
],
"sizeDelta": [
188,
84
]
},
"components": [
{
"type": "Image",
"sprite": "btn_secondary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_secondary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.Abandon"
}
]
},
{
"name": "Txt_Abandon",
"parent": "Btn_Abandon",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
164,
72
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "离开",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
},
{
"name": "Bottom",
"parent": "UI_PrototypeBattle",
"active": true,
"rect": {
"anchorMin": [
0.5,
0
],
"anchorMax": [
0.5,
0
],
"pivot": [
0.5,
0
],
"anchoredPosition": [
0,
64
],
"sizeDelta": [
1016,
414
]
},
"components": [
{
"type": "Image",
"sprite": "ui_panel_content",
"imageType": "Sliced",
"raycastTarget": false
}
]
},
{
"name": "Txt_Party",
"parent": "Bottom",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
30,
-18
],
"sizeDelta": [
956,
220
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "伙伴状态",
"fontSize": 25,
"color": "#5A4632",
"alignment": "Left",
"raycastTarget": false
}
]
},
{
"name": "Btn_Pause",
"parent": "Bottom",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
30,
-264
],
"sizeDelta": [
450,
110
]
},
"components": [
{
"type": "Image",
"sprite": "btn_secondary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_secondary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.Pause"
}
]
},
{
"name": "Txt_Pause",
"parent": "Btn_Pause",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
426,
98
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "暂停",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
},
{
"name": "Btn_Speed",
"parent": "Bottom",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
520,
-264
],
"sizeDelta": [
466,
110
]
},
"components": [
{
"type": "Image",
"sprite": "btn_primary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_primary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.Speed"
}
]
},
{
"name": "Txt_Speed",
"parent": "Btn_Speed",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
442,
98
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "速度 ×1",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
},
{
"name": "Result",
"parent": "UI_PrototypeBattle",
"active": false,
"rect": {
"anchorMin": [
0,
0
],
"anchorMax": [
1,
1
],
"offsetMin": [
0,
0
],
"offsetMax": [
0,
0
]
},
"components": [
{
"type": "Image",
"color": "#0B1724CC",
"raycastTarget": true
}
]
},
{
"name": "ResultPanel",
"parent": "Result",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
100,
-440
],
"sizeDelta": [
880,
1010
]
},
"components": [
{
"type": "Image",
"sprite": "ui_panel_popup",
"imageType": "Sliced",
"color": "#FFFFFF",
"raycastTarget": false,
"preserveAspect": false
}
]
},
{
"name": "Txt_ResultTitle",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
40,
-40
],
"sizeDelta": [
800,
82
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "守护成功",
"fontSize": 52,
"color": "#5A4632",
"alignment": "Center",
"raycastTarget": false
}
]
},
{
"name": "Txt_ResultInfo",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
50,
-150
],
"sizeDelta": [
780,
180
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "奖励",
"fontSize": 30,
"color": "#5A4632",
"alignment": "Center",
"raycastTarget": false
}
]
},
{
"name": "Txt_BattleReport",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
42,
-350
],
"sizeDelta": [
796,
290
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "战斗统计",
"fontSize": 25,
"color": "#687C8C",
"alignment": "Center",
"raycastTarget": false
}
]
},
{
"name": "Btn_NextStage",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
40,
-680
],
"sizeDelta": [
800,
104
]
},
"components": [
{
"type": "Image",
"sprite": "btn_primary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_primary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.NextStage"
}
]
},
{
"name": "Txt_NextStage",
"parent": "Btn_NextStage",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
776,
92
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "下一关",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
},
{
"name": "Btn_Retry",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
40,
-836
],
"sizeDelta": [
380,
112
]
},
"components": [
{
"type": "Image",
"sprite": "btn_secondary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_secondary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.Retry"
}
]
},
{
"name": "Txt_Retry",
"parent": "Btn_Retry",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
356,
100
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "调整阵容",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
},
{
"name": "Btn_Home",
"parent": "ResultPanel",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
460,
-836
],
"sizeDelta": [
380,
112
]
},
"components": [
{
"type": "Image",
"sprite": "btn_primary_normal",
"imageType": "Sliced",
"raycastTarget": true
},
{
"type": "Button",
"transition": "SpriteSwap",
"spritePressed": "btn_primary_pressed",
"spriteDisabled": "btn_primary_disabled",
"onClick": "Prototype.Home"
}
]
},
{
"name": "Txt_Home",
"parent": "Btn_Home",
"active": true,
"rect": {
"anchorMin": [
0,
1
],
"anchorMax": [
0,
1
],
"pivot": [
0,
1
],
"anchoredPosition": [
12,
-6
],
"sizeDelta": [
356,
100
]
},
"components": [
{
"type": "TextMeshProUGUI",
"text": "返回营地",
"fontSize": 32,
"color": "#FFFFFF",
"alignment": "Center",
"raycastTarget": false
},
{
"type": "Outline",
"effectColor": "#102033CC",
"effectDistance": [
1.2,
-1.2
]
}
]
}
],
"bindings": [
"Txt_BattleTitle",
"Txt_BattleInfo",
"Btn_Abandon",
"Txt_Abandon",
"Txt_Party",
"Btn_Pause",
"Txt_Pause",
"Btn_Speed",
"Txt_Speed",
"Txt_ResultTitle",
"Txt_ResultInfo",
"Txt_BattleReport",
"Btn_NextStage",
"Txt_NextStage",
"Btn_Retry",
"Txt_Retry",
"Btn_Home",
"Txt_Home"
],
"events": [
{
"name": "Prototype.Abandon",
"node": "Btn_Abandon"
},
{
"name": "Prototype.Pause",
"node": "Btn_Pause"
},
{
"name": "Prototype.Speed",
"node": "Btn_Speed"
},
{
"name": "Prototype.NextStage",
"node": "Btn_NextStage"
},
{
"name": "Prototype.Retry",
"node": "Btn_Retry"
},
{
"name": "Prototype.Home",
"node": "Btn_Home"
}
]
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More