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 透明边,避免双线性采样串色(项目切图已统一处理)。