Files
5.24BuYu/Assets/MyGame/CHANGELOG.md
T
2026-06-08 21:23:40 +08:00

88 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CHANGELOG - MyGame 脚本变更记录
## 2026-06-05
### 新增:UIHome_BY_ItemToggleDisplay.cs
- **文件**:`Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemToggleDisplay.cs`
- **内容**:TurretPanel 中 Toggle 模板节点(图层 17)的展示组件脚本
- **功能**:
- 支持三种展示模式:Sprite(静态图片)、Spine(骨骼动画,反射方式避免硬引用)、RawImage3D(3D投影 RenderTexture)
- 提供 SetSprite / SetSpine / SetRawImage3D / ClearDisplay 接口
- 锁定状态控制(lockMask / lockIcon)
- 背景(底板/品质框)设置接口
- 选中勾标识显隐控制
- **原因**:pao 子节点后续可能用图片/Spine/3D投影 RawImage,需要统一管理切换逻辑
### 重写:UIHome_BY_ItemListPanels.cs
- **文件**:`Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs`
- **内容**:从基础框架扩展为完整的炮台/翅膀/战神面板脚本
- **变更摘要**:
- 新增 `TurretItemInfo` 数据模型(id/name/category/displayType/sprite/spineAsset/renderTex3D/isUnlocked 等)
- 新增 `ItemSubType` 枚举(品质分类:普通/稀有/史诗/传说 + 战神独有攻击/防御/辅助)
- 分类 Tab 切换:`UpdateSelectType` 驱动全链路更新(高亮→Dropdown→列表重建→详情)
- Dropdown 动态刷新:不同分类显示不同子类型选项(炮台10级品质、翅膀品质线、战神三系)
- 列表重建:`RebuildItemList` 从 TurretItemInfo 数据生成 Toggle 实例,绑定 UIHome_BY_ItemToggleDisplay 展示
- 选中事件:`OnItemSelectedCallback` 回调 + 右边详情面板联动
- 获取/装备:`OnClickGet` 根据解锁状态分叉到 EquipItem / TryUnlockItem
- `Show(args)` 支持传入 `ItemPanelSelect` 指定默认选中分类,无参数默认炮台
- **原因**:补充炮台/翅膀/战神三个分支的完整业务逻辑,与 TurretPanel.prefab 的 UI 结构对齐
### 重写:TurretResources.cs(fishResources)
- **文件**:`Assets/MyGame/Scripts/fishResources/TurretResources.cs`
- **内容**:参照 FishResourcesData 模式重写,匹配 tbturretresources.json 的完整字段
- **变更摘要**:
- 字段对齐 JSON:新增 `attackAudioID`(攻击音效ID)、`bulletID`(子弹ID列表),原 `attackAudio`→`attackAudioID`
- Addressables 标签:三标签(TurretPrefab/TurretSpine/TurretSprite)合并为统一标签 `PT` + `Default`(Intersection 加载)
- 新增 `UnLoadTurretAssetsData()` 卸载方法(参照 AudioResourcesData 的 Load/Unload 对称模式)
- 新增查询接口:`GetAllTurretData()` 获取全量、`GetTurretDataByType(int turretType)` 按类型筛选(1=炮台/2=战神/3=翅膀)
- 所有 Debug.Log 前缀统一为 `[TurretResourcesData]`
- **原因**:标签改为 PT+Default 匹配 Addressables 配置,字段对齐 JSON 实际数据,补充卸载和查询能力
### 扩展:TurretData.cs(UI面板属性)
- **文件**:`Assets/MyGame/Scripts/Turret/TurretData.cs`
- **内容**:原只有游戏内战斗属性,新增 `[Header("UI面板属性")]` 区段
- **新增 Inspector 字段**:
- `turretNumber`(int)— 炮台编号,桥接 TurretResourcesData
- `turretType`(int)— 1=普通炮台 2=战神 3=翅膀
- `displayName`(string)— UI 展示名称
- `quality`(int, Range 1-5)— 品质等级
- `unlockLevel`(int)— 解锁所需等级(0=默认拥有)
- `uiIconSprite`(Sprite)— UI 缩略图
- `description`(string, TextArea)— 描述文字
- **新增运行时状态**(NonSerialized):
- `isUnlocked` / `isEquipped` / `ownStarLevel` — 由服务器或 UI 面板读写
- **新增方法**:
- `GetResourcesData()` → 便捷获取关联的 TurretResourcesData(表里没有返回 null,不报错)
- `GetAttackAudioID()` / `GetBulletIDs()` / `GetAnimationType()` → 安全读取,表里没有就用 TurretData 自身的 Inspector 默认值
- **原因**:TurretPanel 需要从 TurretData 读取展示/解锁/装备信息,实现游戏对象 ↔ UI 面板的数据桥接
### 加固:TurretResourcesData.Init() + TurretData 容错
- **TurretResourcesData.Init()**:json 文件不存在或解析失败时不再 NPE 崩溃,改为 `Debug.LogWarning` 后降级为空字典
- **TurretData**:新增 `GetAttackAudioID()` / `GetBulletIDs()` / `GetAnimationType()` 安全方法,表里查不到就用 Inspector 默认值(0 / 空列表 / currTurretType)
- **原因**:表里没有配置的 turretNumber 不应报错——用组件自身的默认值即可
### 炮台UI图片提取 + AA标签配置
- **图片提取**:从 `#TurretResources.xlsx` 解析 DISPIMG 内嵌图片,按 prefabTurretResourcesPath 命名
- 输出目录:`Assets/MyGame/aa/Game/Turrets/Sprites/paotai11001~11045.png`(共 45 张)
- 命名规则:`paotai` + turretNumber,与 JSON 的 `prefabTurretResourcesPath` 字段一致
- 映射逻辑:DISPIMG ID → Drawing XML pic name → rId → xl/media/imageXX.png
- **Editor 脚本**:`Assets/Editor/TurretSpriteAALabeler.cs`
- 菜单:Tools → 炮台 → 配置AA标签(PT+Default)
- 功能:遍历 Sprites/ 下所有 paotai*.png,添加 Addressable 标签 PT + Default,地址 = 文件名
- 放入 "Default Local Group",确保 TextureImporter 为 Sprite 模式
- **运行时加载链**(无需手动绑定 Prefab):
`TurretResourcesData.LoadTurretAssetsData()` → `Addressables.LoadAssetsAsync<Sprite>("PT","Default")` → `turretSpriteDic[turretNumber]` → `toggleDisplay.SetSprite()`
- **原因**:项目使用 Addressables,图片通过标签 PT+Default 运行时加载,TurretResourcesData.GetTurretSprite() 提供查询,不依赖直接引用
### 融合:UIHome_BY_ItemListPanels ↔ TurretResourcesData
- **文件**:`Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs`
- **核心变更**:去掉中间数据模型 `TurretItemInfo`,面板直读 `TurretResourcesData`
- **数据流**:
`UpdateSelectType(type)` → `TurretResourcesData.GetTurretDataByType(turretType)` → `RebuildItemList` → 每个 Toggle 调用 `GetTurretSprite(id)` 拿到 AA 加载的 Sprite → `toggleDisplay.SetSprite()`
- **简化项**:
- 删除 `TurretItemInfo` 类、`SetItemData()`、`_allItemData`
- `ItemPanelSelect` ↔ `turretType` 映射:Turrect→1, ZS→2, Wing→3
- `OnItemSelectedCallback` 回调改为传 `int turretNumber`
- Dropdown 暂简化为"全部XX"(品质数据由服务器提供后恢复)
- **原因**:去掉无用的中间层,让面板直接消费 TurretResourcesData + AA 加载的 Sprite