88 lines
6.5 KiB
Markdown
88 lines
6.5 KiB
Markdown
# 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
|