# 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("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