From 1f4c19904f34717d40246221a9d76ceeeb2e1f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Fri, 9 Oct 2026 22:06:36 +0800 Subject: [PATCH] 1 --- ...gZhanShenRes_BundledAssetGroupSchema.asset | 2 +- .../TurretChiBangZhanShenRes.asset | 316 +----------------- .../Windows/addressables_content_state.bin | Bin 102333 -> 154499 bytes Assets/MyGame/Scripts/Turret/SitPosData.cs | 104 +++++- .../Scripts/fishResources/TurretResources.cs | 239 ++++++++++--- ...n_14080.png => display_14080_0_DaTing.png} | Bin ...g.meta => display_14080_0_DaTing.png.meta} | 0 ...n_14082.png => display_FishEntry_4022.png} | Bin ...g.meta => display_FishEntry_4022.png.meta} | 0 ...n_14081.png => display_FishEntry_6004.png} | Bin ...g.meta => display_FishEntry_6004.png.meta} | 0 ...901.png => display_wargod_14901_0_dev.png} | Bin ...ta => display_wargod_14901_0_dev.png.meta} | 0 ...902.png => display_wargod_14902_0_dev.png} | Bin ...ta => display_wargod_14902_0_dev.png.meta} | 0 ....png => display_wargod_in_14053_0_dev.png} | Bin ...=> display_wargod_in_14053_0_dev.png.meta} | 0 .../aa/UI/Atlases/PaoTaiSprite.spriteatlas | 115 +++++++ .../UI/Atlases/PaoTaiSprite.spriteatlas.meta | 8 + .../aa/UI/Atlases/ZhanShenSprite.spriteatlas | 76 +++++ .../Atlases/ZhanShenSprite.spriteatlas.meta | 8 + .../aa/UI/Atlases/chibangSprite.spriteatlas | 116 +++++++ .../UI/Atlases/chibangSprite.spriteatlas.meta | 8 + .../aa/UI/Game/GameMainPanel_FishBase.cs | 6 + .../UI/Home/Sub/UIHome_BY_ItemListPanels.cs | 88 ++++- 25 files changed, 715 insertions(+), 371 deletions(-) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14080.png => display_14080_0_DaTing.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14080.png.meta => display_14080_0_DaTing.png.meta} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14082.png => display_FishEntry_4022.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14082.png.meta => display_FishEntry_4022.png.meta} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14081.png => display_FishEntry_6004.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14081.png.meta => display_FishEntry_6004.png.meta} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14901.png => display_wargod_14901_0_dev.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14901.png.meta => display_wargod_14901_0_dev.png.meta} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14902.png => display_wargod_14902_0_dev.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14902.png.meta => display_wargod_14902_0_dev.png.meta} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14053.png => display_wargod_in_14053_0_dev.png} (100%) rename Assets/MyGame/aa/Game/ZhanShen/Icon/{WarGodHeadIcon_14053.png.meta => display_wargod_in_14053_0_dev.png.meta} (100%) create mode 100644 Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas create mode 100644 Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas.meta create mode 100644 Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas create mode 100644 Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas.meta create mode 100644 Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas create mode 100644 Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas.meta diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/TurretChiBangZhanShenRes_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/TurretChiBangZhanShenRes_BundledAssetGroupSchema.asset index 5e2d1866b..d87d63781 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Schemas/TurretChiBangZhanShenRes_BundledAssetGroupSchema.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/TurretChiBangZhanShenRes_BundledAssetGroupSchema.asset @@ -37,7 +37,7 @@ MonoBehaviour: m_Id: 2dc81615c3947e64493d7c6552a3f24d m_LoadPath: m_Id: 6bd5fad857b09dd439c8b71f4ae1a9d8 - m_BundleMode: 0 + m_BundleMode: 1 m_AssetBundleProviderType: m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider diff --git a/Assets/AddressableAssetsData/AssetGroups/TurretChiBangZhanShenRes.asset b/Assets/AddressableAssetsData/AssetGroups/TurretChiBangZhanShenRes.asset index efd6a02e2..4f824cf0b 100644 --- a/Assets/AddressableAssetsData/AssetGroups/TurretChiBangZhanShenRes.asset +++ b/Assets/AddressableAssetsData/AssetGroups/TurretChiBangZhanShenRes.asset @@ -24,13 +24,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 0233946f0c4584846aa517b3c3fd44c3 - m_Address: paotai11005 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 03a13fd733cabb145ab955ff6418f64d m_Address: Assets/MyGame/aa/Game/Turrets/paotai11006.prefab m_ReadOnly: 0 @@ -45,8 +38,15 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 098d43abfc1006e44acbd9822deb09bb - m_Address: paotai11018 + - m_GUID: 0508b432151cafb488105a9c157dad8d + m_Address: Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas + m_ReadOnly: 0 + m_SerializedLabels: + - Default + - PTCBZS + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 0866d7cf8d02e054098a519554ef8a43 + m_Address: Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas m_ReadOnly: 0 m_SerializedLabels: - Default @@ -73,13 +73,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 15ed386cee52ebc439d2290ba9c612da - m_Address: paotai11034 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 1618becd075eee742ac5619257814ae7 m_Address: Assets/MyGame/aa/Game/Turrets/paotai11001.prefab m_ReadOnly: 0 @@ -87,13 +80,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 16c009b483e78364ca859c3be882bc42 - m_Address: paotai11033 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 171c124c1d6ab2941b0f8823fa60d526 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17033.png m_ReadOnly: 0 @@ -171,13 +157,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 270274fc851bfcd4b83a3a48cfd58924 - m_Address: paotai11019 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 270cf29515c75574a8513c21289ca7d8 m_Address: Assets/MyGame/aa/Game/ZhanShen/MeiRenYu/display_FishEntry_6004.prefab m_ReadOnly: 0 @@ -185,13 +164,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 2890b76ba375ba948a73f1058220edaa - m_Address: paotai11006 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 2a06ddc2b6df9454b9b5c8d39117a75b m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17015.png m_ReadOnly: 0 @@ -213,13 +185,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 2fef7572fe9392d48b4fa8040029859c - m_Address: paotai11021 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 3002bf23f86178142b830b43bdba22a7 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang17037.prefab m_ReadOnly: 0 @@ -297,13 +262,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 46a32cd561da5b443b80feaafb4e4f06 - m_Address: paotai11015 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 47af3cd36cbd6b44bbb0c77f1935ed95 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang17002.prefab m_ReadOnly: 0 @@ -332,20 +290,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 58d6c583854d4a94bb0aaf4cf305072b - m_Address: paotai11028 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 598795f8ee8efe945b21525d42cecc14 - m_Address: paotai11027 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 59ff990509b91d742a1c5942343c87c3 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17009.png m_ReadOnly: 0 @@ -360,20 +304,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 5bc7ee217f99ebd459216f2c08311bbc - m_Address: paotai11001 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 5bec01646b74aec4895fbd83494ed19f - m_Address: paotai11037 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 5f77689521c5f7e42bff3ec9a294569c m_Address: Assets/MyGame/aa/Game/Turrets/paotai11038.prefab m_ReadOnly: 0 @@ -402,13 +332,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 63d3cb139a0c40043aab063639266e72 - m_Address: paotai11016 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 63dadb73d8560bd4f928125809742234 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17013.png m_ReadOnly: 0 @@ -416,13 +339,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 64508e66cdd421e42b0422d7ee49ed1c - m_Address: paotai11035 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 646b01713265d4340af82ae6725364a9 m_Address: Assets/MyGame/aa/Game/ZhanShen/DaQiao/display_wargod_in_14053_0_dev.prefab m_ReadOnly: 0 @@ -472,22 +388,8 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 7155c77aef0a7aa4b9aee91968db0c60 - m_Address: paotai11041 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 72196431bdb830542be0fb94f40011ae - m_Address: paotai11036 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 756d775cf03c4fb4f8d7cb3654fc79e7 - m_Address: paotai11044 + - m_GUID: 72008a1238b2b5f48b76ec9f8bb16892 + m_Address: Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas m_ReadOnly: 0 m_SerializedLabels: - Default @@ -514,13 +416,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 799389f1fc628394cb8d5030967d2535 - m_Address: paotai11040 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 7c3f4b08bdbaf2540b7baf15c749dd8d m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17017.png m_ReadOnly: 0 @@ -549,13 +444,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 82dedb83fc04a5c45b3bd01ed2d6d64a - m_Address: paotai11024 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 840a48356f951834cb0d3871d6089b39 m_Address: Assets/MyGame/aa/Game/Turrets/paotai11024.prefab m_ReadOnly: 0 @@ -591,13 +479,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 879078866c383ec418496cebbf48d63d - m_Address: paotai11012 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 880e680de116b4d4d8fac3a31f99f985 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17022.png m_ReadOnly: 0 @@ -605,13 +486,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 894fce34a8f961c4385fa03e267e6009 - m_Address: paotai11032 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 8956a6732ec8b45408cf133d27c34c5d m_Address: Assets/MyGame/aa/Game/Turrets/paotai11018.prefab m_ReadOnly: 0 @@ -640,20 +514,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 8dc0814926948af45ac390a6a1e36613 - m_Address: paotai11030 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 8e864412df60c9648b8ab2c6837dc2c6 - m_Address: paotai11003 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 8ea133904ecd05e47a71995fa7efcdc8 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17008.png m_ReadOnly: 0 @@ -675,20 +535,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 91975cae1b7b29b46ad3ccab45f9efad - m_Address: paotai11031 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 923621881011f3b4eae7c836e048afc9 - m_Address: paotai11025 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 9265d731e0440e546bc43128c2f8d975 m_Address: Assets/MyGame/aa/Game/Turrets/paotai11022.prefab m_ReadOnly: 0 @@ -759,13 +605,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 9af3561f85630aa4b8280cee66eeb0a6 - m_Address: paotai11017 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 9e05ce7f2fc019f458c55476d32576ec m_Address: Assets/MyGame/aa/Game/Turrets/paotai11021.prefab m_ReadOnly: 0 @@ -780,13 +619,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: 9f2fe4d8325b1c54489e87ff0b00f962 - m_Address: paotai11026 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: a1a9b7ab7e8ed234fa3c71e80304d0ec m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17045.png m_ReadOnly: 0 @@ -843,13 +675,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: aa20d1ffa138eb74ebbb2666d215397c - m_Address: paotai11020 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: aa7d3523102354f4cb8290648facf303 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang17029.prefab m_ReadOnly: 0 @@ -898,13 +723,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: ae29fff35afc8ab4bb5afbe82d009920 - m_Address: paotai11043 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: af52d63dc03d7ed4e909feaf07412d7a m_Address: Assets/MyGame/aa/Game/ChiBang/chibang17030.prefab m_ReadOnly: 0 @@ -933,13 +751,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: b3a4393229be999448ca7aa65d93811b - m_Address: paotai11039 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: b54d2dca67f52504c80dec631f783bdf m_Address: Assets/MyGame/aa/Game/Turrets/paotai11041.prefab m_ReadOnly: 0 @@ -961,13 +772,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: b9e3729cca6ffcb4cb6d4fab51dd7eea - m_Address: paotai11023 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: bbe341fae0eebde4a877ecd56ce2a749 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang17047.prefab m_ReadOnly: 0 @@ -1024,13 +828,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: c38b5ecdda8cb924bb65905500834cc8 - m_Address: paotai11013 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: c4e2c42c620e3e34ba25353b9e6391a5 m_Address: Assets/MyGame/aa/Game/Turrets/paotai11004.prefab m_ReadOnly: 0 @@ -1045,20 +842,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: c8f17a53c456a094c925ed6b5d0c5fc3 - m_Address: paotai11042 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: ca50562a6437ff645ab9babfbc5ff62b - m_Address: paotai11014 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: ca8e87a020a0a794da39ace6272f6dde m_Address: Assets/MyGame/aa/Game/Turrets/paotai11025.prefab m_ReadOnly: 0 @@ -1115,27 +898,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: d93de63344587384fb14f3ff45381f28 - m_Address: paotai11011 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: d973011aa0edb0d498af4cd25a4321e9 - m_Address: paotai11007 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: d9987b80bdec5db4cb5fb7a628569d63 - m_Address: paotai11008 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: d9fbfa83d49f2e748aca525ca409e482 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17035.png m_ReadOnly: 0 @@ -1150,13 +912,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: db1e75ab94596fe438c7ccce9e927100 - m_Address: paotai11009 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: db5657a4d01fd0e4f808862e9afe54ce m_Address: Assets/MyGame/aa/Game/Turrets/paotai11020.prefab m_ReadOnly: 0 @@ -1227,20 +982,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: e5c795ee32b1c6f4da546aa5b6f112ec - m_Address: paotai11010 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: e82167568bd20264a8d958000f831d5b - m_Address: paotai11045 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: e93f4ba58a94580478170c21710a5818 m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17012.png m_ReadOnly: 0 @@ -1269,27 +1010,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: f0a59ae3f69ff7b4994056c890bce8e2 - m_Address: paotai11002 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: f26a5b78050def843a39dd018a06768a - m_Address: paotai11038 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: f273626ec5b802c448a2b5331af8a980 - m_Address: paotai11029 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: f3c68cecf1b289b46a99a3687cd02fed m_Address: Assets/MyGame/aa/Game/ChiBang/chibang/chibang17016.png m_ReadOnly: 0 @@ -1311,20 +1031,6 @@ MonoBehaviour: - Default - PTCBZS FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: f9c72cbb6d886e54eab455352d067697 - m_Address: paotai11022 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: fbe77e7b89992564fa949297c8e45388 - m_Address: paotai11004 - m_ReadOnly: 0 - m_SerializedLabels: - - Default - - PTCBZS - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: fd46c83304608134492d5cb82cc0aaef m_Address: Assets/MyGame/aa/Game/Turrets/paotai11007.prefab m_ReadOnly: 0 diff --git a/Assets/AddressableAssetsData/Windows/addressables_content_state.bin b/Assets/AddressableAssetsData/Windows/addressables_content_state.bin index faa31dd15446fe0893f06505d0e58a9e67d34f73..129d6939ec442f5cfbcaf8f9fe814e01fe274a2e 100644 GIT binary patch literal 154499 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 GhW`idu5MBQ delta 24242 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 bpLH;rVHdyXP^p=%K(炮台加载序号(防加载期间再次切换的竞态) + private int _turretLoadSeq = 0; + + ///

炮台异步按需加载协程:AcquireTurretPrefabAsync 完成后实例化(原同步逻辑后半段) + private IEnumerator LoadTurretRoutine(int turretNumber, int seq) + { GameObject prefab = TurretResourcesData.GetTurretPrefab(turretNumber); if (prefab == null) { - Debug.LogWarning($"[SitPosData] 炮台预制体未加载: #{turretNumber}"); - return; + var task = TurretResourcesData.AcquireTurretPrefabAsync(turretNumber); + while (!task.IsCompleted) yield return null; + if (seq != _turretLoadSeq) // 期间又切换了炮台 → 丢弃并归还引用 + { + TurretResourcesData.ReleaseTurretPrefab(turretNumber); + yield break; + } + prefab = task.Result; + } + if (prefab == null) + { + TurretResourcesData.ReleaseTurretPrefab(turretNumber); + Debug.LogWarning($"[SitPosData] 炮台预制体未加载: #{turretNumber}(检查 PT{turretNumber} 标签配置)"); + yield break; } // 克隆到父节点 @@ -1451,11 +1472,14 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { Debug.LogError($"[SitPosData] 预制体上未找到 TurretData 组件: #{turretNumber}"); Destroy(instance); - return; + yield break; } currentTurret.turretNumber = turretNumber; + // ⭐ 战神装备中判断:异步加载完成后实时读(原方法开头局部变量 zhanShenActive 不能跨协程) + bool zhanShenActive = currentZhanShenData != null; + // 缓存旋转节点:优先用 TurretData.tra_RotationPivot,否则回退父节点 tra_CurrTurret = GetTurretRotationPivot(currentTurret); @@ -1591,12 +1615,30 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler // 先清理已有翅膀 ClearWing(); - // 从 TurretResourcesData 拿预制体 + // ⭐ 散包按需加载(异步):缓存没有时按 PT{编号} 标签取,完成后实例化 + StartCoroutine(LoadWingRoutine(turretNumber, ++_turretLoadSeq)); + } + + /// 翅膀异步按需加载协程(模式同炮台:seq 防竞态) + private IEnumerator LoadWingRoutine(int turretNumber, int seq) + { GameObject prefab = TurretResourcesData.GetTurretPrefab(turretNumber); if (prefab == null) { - Debug.LogWarning($"[SitPosData] 翅膀预制体未加载: #{turretNumber}"); - return; + var task = TurretResourcesData.AcquireTurretPrefabAsync(turretNumber); + while (!task.IsCompleted) yield return null; + if (seq != _turretLoadSeq) + { + TurretResourcesData.ReleaseTurretPrefab(turretNumber); + yield break; + } + prefab = task.Result; + } + if (prefab == null) + { + TurretResourcesData.ReleaseTurretPrefab(turretNumber); + Debug.LogWarning($"[SitPosData] 翅膀预制体未加载: #{turretNumber}(检查 PT{turretNumber} 标签配置)"); + yield break; } // 克隆到 wingParent,保持预制体原始位置/旋转/缩放 @@ -1637,20 +1679,52 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler /// (渲染由座位预设的 Camera + RawImage 完成,显示节点挂在 turretRotate 下会跟随瞄准旋转)。 /// ⭐ 炮台/战神显示二选一:加载战神后隐藏 turretParent(仅游戏内,切换面板 UI 不受影响)。 /// + /// 战神加载序号(防加载期间再次切换的竞态:旧协程完成后丢弃结果) + private int _zsLoadSeq = 0; + public void LoadZhanShen(int zhanShenNumber) { // XJMH 模式没有战神概念,直接跳过(和翅膀一致) if (turretControlMode == TurretControlMode.XJMH) return; - // 先清理已有战神(保留预设的 Camera,它是用来渲染战神到 RawImage 的) - ClearZhanShenInstance(); + // ⭐ 切换战神:释放上一个的按需资源引用(别的座位还在用同一个战神则只减计数不卸载) + int prevNumber = currentZhanShenNumber; + ClearZhanShenInstance(); // 先清理已有战神实例(保留预设的 Camera) + if (prevNumber > 0 && prevNumber != zhanShenNumber) + TurretResourcesData.ReleaseZhanShen(prevNumber, ZhanShenUsage.GamePlay); - // 从 TurretResourcesData 拿游戏内使用的战神预制体 - GameObject prefab = TurretResourcesData.GetZhanShenPrefab(zhanShenNumber, ZhanShenUsage.GamePlay); + // ⭐ 异步按需加载(不再阻塞主线程):散包模式下战神不预载,这里现取 + StartCoroutine(LoadZhanShenRoutine(zhanShenNumber, ++_zsLoadSeq)); + } + + /// + /// 战神异步加载协程:等 AcquireZhanShenAsync 完成后实例化。 + /// 加载期间座位被销毁 / 又切换了别的战神 → 丢弃本次结果并归还引用。 + /// + private IEnumerator LoadZhanShenRoutine(int zhanShenNumber, int seq) + { + var task = TurretResourcesData.AcquireZhanShenAsync(zhanShenNumber, ZhanShenUsage.GamePlay); + while (!task.IsCompleted) + yield return null; + + // 竞态丢弃:期间又切换了战神(seq 变了)→ 归还本次引用 + if (seq != _zsLoadSeq) + { + TurretResourcesData.ReleaseZhanShen(zhanShenNumber, ZhanShenUsage.GamePlay); + yield break; + } + + GameObject prefab = task.Result; if (prefab == null) { - Debug.LogWarning($"[SitPosData] 战神使用预制体未加载: #{zhanShenNumber}(检查 ZSYX 标签配置)"); - return; + // 标签未配置(散包未拆):回退全量字典(启动 PT+ZSYX 加载的) + prefab = TurretResourcesData.GetZhanShenPrefab(zhanShenNumber, ZhanShenUsage.GamePlay); + } + if (prefab == null) + { + TurretResourcesData.ReleaseZhanShen(zhanShenNumber, ZhanShenUsage.GamePlay); + Debug.LogWarning($"[SitPosData] 战神使用预制体未加载: #{zhanShenNumber}(检查 ZS{zhanShenNumber}+ZSYX 标签配置)"); + yield break; } // 克隆到 zhanShenParent,保持预制体原始位置/旋转/缩放 @@ -1702,7 +1776,11 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler /// 清除战神并恢复普通炮台显示(炮台/战神显示二选一的另一半) public void ClearZhanShen() { + // ⭐ 卸下战神:释放按需资源引用(归零才真正卸包) + int prevNumber = currentZhanShenNumber; ClearZhanShenInstance(); + if (prevNumber > 0) + TurretResourcesData.ReleaseZhanShen(prevNumber, ZhanShenUsage.GamePlay); currentZhanShenNumber = 0; // 恢复普通炮台显示(特殊鱼炮台使用中不显示:等 RestoreTurretVisual 统一恢复) diff --git a/Assets/MyGame/Scripts/fishResources/TurretResources.cs b/Assets/MyGame/Scripts/fishResources/TurretResources.cs index 5c3a32392..0a1787103 100644 --- a/Assets/MyGame/Scripts/fishResources/TurretResources.cs +++ b/Assets/MyGame/Scripts/fishResources/TurretResources.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; +using UnityEngine.U2D; using static UnityEngine.AddressableAssets.Addressables; /// @@ -50,6 +51,156 @@ public class TurretResourcesData // ---- 保留的 AA Handle(不释放,避免 Build 下资源被卸载)---- private static readonly List _loadedHandles = new List(); + // ==================== 战神按需加载(散包:用哪个加载哪个) ==================== + // 每个战神单独打标签 ZS{编号}(如 ZS14901),展示 prefab = ZS{id}+Default,游戏内 = ZS{id}+ZSYX。 + // 战神 prefab 不再带 PTCBZS 标签 → 启动全量加载(PT+Default/PT+ZSYX)不再拉出战神, + // turretchibangzhanshenres 包只剩炮台/翅膀/sprite,战神包按需单独加载。 + + /// 战神 prefab 缓存:(编号, 用途) → prefab + private static readonly Dictionary<(int id, ZhanShenUsage usage), GameObject> _zsPrefabCache + = new Dictionary<(int, ZhanShenUsage), GameObject>(); + /// 战神加载句柄:(编号, 用途) → handle(卸载用;LoadAssetsAsync 返回 IList 句柄) + private static readonly Dictionary<(int id, ZhanShenUsage usage), AsyncOperationHandle>> _zsHandles + = new Dictionary<(int, ZhanShenUsage), AsyncOperationHandle>>(); + /// 战神引用计数:(编号, 用途) → 使用中的座位/预览数(归零才真正卸载,防止多座位共用误卸) + private static readonly Dictionary<(int id, ZhanShenUsage usage), int> _zsRefCount + = new Dictionary<(int, ZhanShenUsage), int>(); + + /// + /// ⭐ 按需获取单个战神 prefab(异步 + 引用计数)。 + /// 用途:进房/换战神(GamePlay)、大厅预览(Display)。 + /// 每次调用引用 +1;切换/关闭时配对调用 ReleaseZhanShen(-1), + /// 引用归零才真正卸载战神包 —— 多个座位用同一个战神不会互相误卸。 + /// 标签:ZS{编号} + Default(展示)/ZSYX(游戏内) 交集;标签未配置时返回 null + /// (调用方可回退 GetZhanShenPrefab 查全量字典,平滑迁移)。 + /// + public static async Task AcquireZhanShenAsync(int turretNumber, ZhanShenUsage usage) + { + var key = (turretNumber, usage); + _zsRefCount[key] = _zsRefCount.TryGetValue(key, out int c) ? c + 1 : 1; + if (_zsPrefabCache.TryGetValue(key, out var cached)) return cached; + + var keys = new List { "ZS" + turretNumber, usage == ZhanShenUsage.GamePlay ? zhanShenGameSubLabel : defaultSubLabel }; + var handle = Addressables.LoadAssetsAsync(keys, null, MergeMode.Intersection); + await handle.Task; + if (handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null && handle.Result.Count > 0) + { + // 展示/游戏内同名靠标签区分,交集结果取第一个 + _zsPrefabCache[key] = handle.Result[0]; + _zsHandles[key] = handle; + return handle.Result[0]; + } + // 加载失败(标签未配置等):归还引用计数,不缓存句柄 + if (handle.IsValid()) Addressables.Release(handle); + _zsRefCount[key] = c; // 还原为进入时的值 + if (_zsRefCount[key] <= 0) _zsRefCount.Remove(key); + return null; + } + + /// + /// ⭐ 按需获取炮台/翅膀 prefab(异步 + 引用计数,标签 PT{编号},如 PT11001)。 + /// 散包模式下启动不再全量加载 prefab,座位装炮台/大厅预览时按需取。 + /// 与 ReleaseTurretPrefab 配对(切换/关闭时 -1,归零卸包)。 + /// + public static async Task AcquireTurretPrefabAsync(int turretNumber) + { + _ptRefCount[turretNumber] = _ptRefCount.TryGetValue(turretNumber, out int c) ? c + 1 : 1; + if (_ptPrefabCache.TryGetValue(turretNumber, out var cached)) return cached; + + var handle = Addressables.LoadAssetsAsync(new List { "PT" + turretNumber }, null, MergeMode.Intersection); + await handle.Task; + if (handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null && handle.Result.Count > 0) + { + _ptPrefabCache[turretNumber] = handle.Result[0]; + _ptHandles[turretNumber] = handle; + return handle.Result[0]; + } + if (handle.IsValid()) Addressables.Release(handle); + _ptRefCount[turretNumber] = c; + if (_ptRefCount[turretNumber] <= 0) _ptRefCount.Remove(turretNumber); + return null; + } + + /// 释放炮台/翅膀 prefab 引用(与 AcquireTurretPrefabAsync 配对,归零卸包) + public static void ReleaseTurretPrefab(int turretNumber) + { + if (!_ptRefCount.TryGetValue(turretNumber, out int c) || c <= 0) return; + if (c > 1) { _ptRefCount[turretNumber] = c - 1; return; } + _ptRefCount.Remove(turretNumber); + if (_ptHandles.TryGetValue(turretNumber, out var h) && h.IsValid()) + Addressables.Release(h); + _ptHandles.Remove(turretNumber); + _ptPrefabCache.Remove(turretNumber); + } + + /// 按需缓存:炮台/翅膀 prefab(PT{编号} 标签) + private static readonly Dictionary _ptPrefabCache = new Dictionary(); + private static readonly Dictionary>> _ptHandles = new Dictionary>>(); + private static readonly Dictionary _ptRefCount = new Dictionary(); + + /// + /// 强制卸载按需加载的炮台/翅膀 prefab(离房时调用,忽略引用计数)。 + /// + public static void UnloadAllTurretPrefabs() + { + var keys = new List(_ptHandles.Keys); + foreach (var k in keys) + { + if (_ptHandles[k].IsValid()) + Addressables.Release(_ptHandles[k]); + } + _ptHandles.Clear(); + _ptPrefabCache.Clear(); + _ptRefCount.Clear(); + if (keys.Count > 0) + Debug.Log($"[TurretResourcesData] 卸载炮台/翅膀按需 prefab {keys.Count} 项"); + } + + /// + /// 释放战神引用(切换战神/关闭预览时调用,与 AcquireZhanShenAsync 配对)。 + /// 引用归零才真正卸载包;标签未配置走全量回退时此调用无害(没有计数项直接跳过)。 + /// + public static void ReleaseZhanShen(int turretNumber, ZhanShenUsage usage) + { + var key = (turretNumber, usage); + if (!_zsRefCount.TryGetValue(key, out int c) || c <= 0) return; + if (c > 1) + { + _zsRefCount[key] = c - 1; + return; + } + // 归零:真正卸载 + _zsRefCount.Remove(key); + if (_zsHandles.TryGetValue(key, out var h) && h.IsValid()) + Addressables.Release(h); + _zsHandles.Remove(key); + _zsPrefabCache.Remove(key); + } + + /// + /// 强制卸载按需加载的战神资源(离房时清游戏内的;面板关闭可清展示的)。 + /// usage 传 null 清全部。忽略引用计数(离房场景所有引用者都已销毁)。 + /// + public static void UnloadAllZhanShen(ZhanShenUsage? usage = null) + { + var toRemove = new List<(int, ZhanShenUsage)>(); + foreach (var kv in _zsHandles) + { + if (usage == null || kv.Key.usage == usage.Value) + toRemove.Add(kv.Key); + } + foreach (var k in toRemove) + { + if (_zsHandles[k].IsValid()) + Addressables.Release(_zsHandles[k]); + _zsHandles.Remove(k); + _zsPrefabCache.Remove(k); + _zsRefCount.Remove(k); + } + if (toRemove.Count > 0) + Debug.Log($"[TurretResourcesData] 卸载战神按需资源 {toRemove.Count} 项(usage={usage?.ToString() ?? "全部"})"); + } + static TurretResourcesData() { Init(); @@ -147,54 +298,58 @@ public class TurretResourcesData Addressables.Release(zsDepHandle); Debug.Log("[TurretResourcesData] 战神游戏内依赖资源预下载完成!"); - // ---- 加载炮台 Prefab(展示用)---- - var prefabHandle = Addressables.LoadAssetsAsync(labels, prefab => - { - if (turretPrefabPathDic.TryGetValue(prefab.name, out int id)) - { - turretPrefabDic[id] = prefab; - Debug.Log($"[TurretResourcesData] 加载 Prefab: {prefab.name} (ID={id})"); - } - }, MergeMode.Intersection); + // ⭐ 散包模式:炮台/翅膀/战神的 prefab 不再启动全量加载(每个资源一个小包, + // 全量会把上百个散包全部拉起 —— 刚登录 194 个包的根源)。 + // prefab 全部按需:炮台/翅膀走 AcquireTurretPrefabAsync(PT{编号} 标签), + // 战神走 AcquireZhanShenAsync(ZS{编号}+Default/ZSYX 标签)。 + // 启动只加载列表小图 Sprite(若 Sprite 与 prefab 同包仍会拉起散包, + // 应把列表小图合入图集 —— 见 SpriteAtlasBuilderWindow 工具)。 - await prefabHandle.Task; - // 不释放!保留 Handle 以保持资源存活 - _loadedHandles.Add(prefabHandle); - Debug.Log($"[TurretResourcesData] 炮台 Prefab 加载完成,共 {turretPrefabDic.Count} 个"); - - // ---- 加载战神游戏内 Prefab(ZSYX 子标签;与展示同名,靠标签区分)---- - var zsPrefabHandle = Addressables.LoadAssetsAsync(zsGameLabels, prefab => - { - if (turretPrefabPathDic.TryGetValue(prefab.name, out int id) - && turretDataDic.TryGetValue(id, out var data) - && data.turretType == 2) // 只收战神(turretType==2)的游戏内使用预制体 - { - turretGamePrefabDic[id] = prefab; - Debug.Log($"[TurretResourcesData] 加载战神游戏内 Prefab: {prefab.name} (ID={id})"); - } - }, MergeMode.Intersection); - - await zsPrefabHandle.Task; - // 不释放!保留 Handle 以保持资源存活 - _loadedHandles.Add(zsPrefabHandle); - Debug.Log($"[TurretResourcesData] 战神游戏内 Prefab 加载完成,共 {turretGamePrefabDic.Count} 个"); - - // ---- 加载炮台 Sprite ---- + // ---- 加载炮台 Sprite(列表图标,全量保留)---- var spriteHandle = Addressables.LoadAssetsAsync(labels, data => { if (turretSpritePathDic.TryGetValue(data.name, out int id)) { turretSpriteDic[id] = data; - Debug.Log($"[TurretResourcesData] 加载 Sprite: {data.name} (ID={id})"); } }, MergeMode.Intersection); await spriteHandle.Task; // 不释放!保留 Handle 以保持资源存活 _loadedHandles.Add(spriteHandle); - Debug.Log($"[TurretResourcesData] 炮台 Sprite 加载完成,共 {turretSpriteDic.Count} 个"); - Debug.Log("[TurretResourcesData] 所有炮台资源加载完毕!"); + // ⭐ 图集兜底:列表小图已合入 SpriteAtlas 且 sprite 从组里移除(标签查不到)时, + // 按图集标签 "TurretAtlas" 加载图集,用 GetSprite(名) 填表。 + // (图集方式下 sprite 仍在图集里保留原名 = prefabTurretResourcesPath) + if (turretSpriteDic.Count == 0) + { + try + { + var atlasHandle = Addressables.LoadAssetsAsync("TurretAtlas", null); + await atlasHandle.Task; + if (atlasHandle.Status == AsyncOperationStatus.Succeeded + && atlasHandle.Result != null && atlasHandle.Result.Count > 0) + { + var atlas = atlasHandle.Result[0]; + foreach (var kv in turretSpritePathDic) + { + var sp = atlas.GetSprite(kv.Key); + if (sp != null) + turretSpriteDic[kv.Value] = sp; + } + _loadedHandles.Add(atlasHandle); + Debug.Log($"[TurretResourcesData] 图集方式加载 Sprite 完成,共 {turretSpriteDic.Count} 个(来自 {atlas.name})"); + } + } + catch (Exception e) + { + Debug.LogWarning($"[TurretResourcesData] 图集兜底加载失败(未找到 TurretAtlas 标签的图集?): {e.Message}"); + } + } + else + { + Debug.Log($"[TurretResourcesData] 炮台 Sprite 加载完成,共 {turretSpriteDic.Count} 个(prefab 已改按需加载)"); + } } /// @@ -229,22 +384,28 @@ public class TurretResourcesData return turretDataDic != null && turretDataDic.TryGetValue(turretNumber, out var data) ? data : null; } - /// 根据 ID 获取炮台 Prefab。 + /// 根据 ID 获取炮台 Prefab。⭐ 优先查按需缓存(PT{编号} 标签),回退全量字典(已不再填充,恒空)。 public static GameObject GetTurretPrefab(int turretNumber) { - return turretPrefabDic != null && turretPrefabDic.TryGetValue(turretNumber, out var prefab) ? prefab : null; + if (_ptPrefabCache.TryGetValue(turretNumber, out var prefab)) return prefab; + return turretPrefabDic != null && turretPrefabDic.TryGetValue(turretNumber, out var fullLoad) ? fullLoad : null; } /// /// 根据战神编号获取战神预制体(两种情况二选一)。 /// - Display:展示用(大厅/商城预览,与 GetTurretPrefab 返回同一个展示模型); /// - GamePlay:游戏内用(座位上替代普通炮台的使用模型)。 - /// 未加载、非战神或未配置使用预制体时返回 null。 + /// ⭐ 优先查按需加载缓存(散包);未加载时回退全量加载的字典(标签未拆时的平滑迁移)。 /// public static GameObject GetZhanShenPrefab(int turretNumber, ZhanShenUsage usage = ZhanShenUsage.Display) { + // 按需缓存优先 + if (_zsPrefabCache.TryGetValue((turretNumber, usage), out var prefab)) + return prefab; + + // 回退:全量加载的字典(战神 prefab 未去 PTCBZS 标签时仍会被启动全量加载进来) var dic = usage == ZhanShenUsage.GamePlay ? turretGamePrefabDic : turretPrefabDic; - return dic != null && dic.TryGetValue(turretNumber, out var prefab) ? prefab : null; + return dic != null && dic.TryGetValue(turretNumber, out var fullLoad) ? fullLoad : null; } /// 根据 ID 获取炮台 Sprite。 diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14080.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_14080_0_DaTing.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14080.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_14080_0_DaTing.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14080.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_14080_0_DaTing.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14080.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_14080_0_DaTing.png.meta diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14082.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_4022.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14082.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_4022.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14082.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_4022.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14082.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_4022.png.meta diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14081.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_6004.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14081.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_6004.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14081.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_6004.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14081.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_FishEntry_6004.png.meta diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14901.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14901_0_dev.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14901.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14901_0_dev.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14901.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14901_0_dev.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14901.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14901_0_dev.png.meta diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14902.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14902_0_dev.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14902.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14902_0_dev.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14902.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14902_0_dev.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14902.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_14902_0_dev.png.meta diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14053.png b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_in_14053_0_dev.png similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14053.png rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_in_14053_0_dev.png diff --git a/Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14053.png.meta b/Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_in_14053_0_dev.png.meta similarity index 100% rename from Assets/MyGame/aa/Game/ZhanShen/Icon/WarGodHeadIcon_14053.png.meta rename to Assets/MyGame/aa/Game/ZhanShen/Icon/display_wargod_in_14053_0_dev.png.meta diff --git a/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas new file mode 100644 index 000000000..43b6635e5 --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas @@ -0,0 +1,115 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!687078895 &4343727234628468602 +SpriteAtlas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PaoTaiSprite + m_EditorData: + serializedVersion: 2 + textureSettings: + serializedVersion: 2 + anisoLevel: 1 + compressionQuality: 50 + maxTextureSize: 2048 + textureCompression: 0 + filterMode: 1 + generateMipMaps: 0 + readable: 0 + crunchedCompression: 0 + sRGB: 1 + platformSettings: + - serializedVersion: 3 + m_BuildTarget: Android + m_MaxTextureSize: 1024 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + m_BuildTarget: iPhone + m_MaxTextureSize: 1024 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + packingSettings: + serializedVersion: 2 + padding: 4 + blockOffset: 1 + allowAlphaSplitting: 0 + enableRotation: 1 + enableTightPacking: 1 + enableAlphaDilation: 0 + secondaryTextureSettings: {} + variantMultiplier: 1 + packables: + - {fileID: 2800000, guid: 5bc7ee217f99ebd459216f2c08311bbc, type: 3} + - {fileID: 2800000, guid: f0a59ae3f69ff7b4994056c890bce8e2, type: 3} + - {fileID: 2800000, guid: 8e864412df60c9648b8ab2c6837dc2c6, type: 3} + - {fileID: 2800000, guid: fbe77e7b89992564fa949297c8e45388, type: 3} + - {fileID: 2800000, guid: 0233946f0c4584846aa517b3c3fd44c3, type: 3} + - {fileID: 2800000, guid: 2890b76ba375ba948a73f1058220edaa, type: 3} + - {fileID: 2800000, guid: d973011aa0edb0d498af4cd25a4321e9, type: 3} + - {fileID: 2800000, guid: d9987b80bdec5db4cb5fb7a628569d63, type: 3} + - {fileID: 2800000, guid: db1e75ab94596fe438c7ccce9e927100, type: 3} + - {fileID: 2800000, guid: e5c795ee32b1c6f4da546aa5b6f112ec, type: 3} + - {fileID: 2800000, guid: d93de63344587384fb14f3ff45381f28, type: 3} + - {fileID: 2800000, guid: 879078866c383ec418496cebbf48d63d, type: 3} + - {fileID: 2800000, guid: c38b5ecdda8cb924bb65905500834cc8, type: 3} + - {fileID: 2800000, guid: ca50562a6437ff645ab9babfbc5ff62b, type: 3} + - {fileID: 2800000, guid: 46a32cd561da5b443b80feaafb4e4f06, type: 3} + - {fileID: 2800000, guid: 63d3cb139a0c40043aab063639266e72, type: 3} + - {fileID: 2800000, guid: 9af3561f85630aa4b8280cee66eeb0a6, type: 3} + - {fileID: 2800000, guid: 098d43abfc1006e44acbd9822deb09bb, type: 3} + - {fileID: 2800000, guid: 270274fc851bfcd4b83a3a48cfd58924, type: 3} + - {fileID: 2800000, guid: aa20d1ffa138eb74ebbb2666d215397c, type: 3} + - {fileID: 2800000, guid: 2fef7572fe9392d48b4fa8040029859c, type: 3} + - {fileID: 2800000, guid: f9c72cbb6d886e54eab455352d067697, type: 3} + - {fileID: 2800000, guid: b9e3729cca6ffcb4cb6d4fab51dd7eea, type: 3} + - {fileID: 2800000, guid: 82dedb83fc04a5c45b3bd01ed2d6d64a, type: 3} + - {fileID: 2800000, guid: 923621881011f3b4eae7c836e048afc9, type: 3} + - {fileID: 2800000, guid: 9f2fe4d8325b1c54489e87ff0b00f962, type: 3} + - {fileID: 2800000, guid: 598795f8ee8efe945b21525d42cecc14, type: 3} + - {fileID: 2800000, guid: 58d6c583854d4a94bb0aaf4cf305072b, type: 3} + - {fileID: 2800000, guid: f273626ec5b802c448a2b5331af8a980, type: 3} + - {fileID: 2800000, guid: 8dc0814926948af45ac390a6a1e36613, type: 3} + - {fileID: 2800000, guid: 91975cae1b7b29b46ad3ccab45f9efad, type: 3} + - {fileID: 2800000, guid: 894fce34a8f961c4385fa03e267e6009, type: 3} + - {fileID: 2800000, guid: 16c009b483e78364ca859c3be882bc42, type: 3} + - {fileID: 2800000, guid: 15ed386cee52ebc439d2290ba9c612da, type: 3} + - {fileID: 2800000, guid: 64508e66cdd421e42b0422d7ee49ed1c, type: 3} + - {fileID: 2800000, guid: 72196431bdb830542be0fb94f40011ae, type: 3} + - {fileID: 2800000, guid: 5bec01646b74aec4895fbd83494ed19f, type: 3} + - {fileID: 2800000, guid: f26a5b78050def843a39dd018a06768a, type: 3} + - {fileID: 2800000, guid: b3a4393229be999448ca7aa65d93811b, type: 3} + - {fileID: 2800000, guid: 799389f1fc628394cb8d5030967d2535, type: 3} + - {fileID: 2800000, guid: 7155c77aef0a7aa4b9aee91968db0c60, type: 3} + - {fileID: 2800000, guid: c8f17a53c456a094c925ed6b5d0c5fc3, type: 3} + - {fileID: 2800000, guid: ae29fff35afc8ab4bb5afbe82d009920, type: 3} + - {fileID: 2800000, guid: 756d775cf03c4fb4f8d7cb3654fc79e7, type: 3} + - {fileID: 2800000, guid: e82167568bd20264a8d958000f831d5b, type: 3} + bindAsDefault: 1 + isAtlasV2: 0 + cachedData: {fileID: 0} + packedSpriteRenderDataKeys: [] + m_MasterAtlas: {fileID: 0} + m_PackedSprites: [] + m_PackedSpriteNamesToIndex: [] + m_RenderDataMap: {} + m_Tag: PaoTaiSprite + m_IsVariant: 0 diff --git a/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas.meta b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas.meta new file mode 100644 index 000000000..d662a468f --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0508b432151cafb488105a9c157dad8d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4343727234628468602 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas new file mode 100644 index 000000000..912b0bc9a --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!687078895 &4343727234628468602 +SpriteAtlas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ZhanShenSprite + m_EditorData: + serializedVersion: 2 + textureSettings: + serializedVersion: 2 + anisoLevel: 1 + compressionQuality: 50 + maxTextureSize: 2048 + textureCompression: 0 + filterMode: 1 + generateMipMaps: 0 + readable: 0 + crunchedCompression: 0 + sRGB: 1 + platformSettings: + - serializedVersion: 3 + m_BuildTarget: Android + m_MaxTextureSize: 2048 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + m_BuildTarget: iPhone + m_MaxTextureSize: 2048 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + packingSettings: + serializedVersion: 2 + padding: 4 + blockOffset: 1 + allowAlphaSplitting: 0 + enableRotation: 1 + enableTightPacking: 1 + enableAlphaDilation: 0 + secondaryTextureSettings: {} + variantMultiplier: 1 + packables: + - {fileID: 2800000, guid: 7567a70f6ccea3b45b705973b24c0832, type: 3} + - {fileID: 2800000, guid: 71c9749eb6ba3fc47bb2edca35a9a31b, type: 3} + - {fileID: 2800000, guid: 16ab7a0b63cd4634da7050e12dc6b53e, type: 3} + - {fileID: 2800000, guid: 11856430d23b062489300a32ed378b37, type: 3} + - {fileID: 2800000, guid: e3465109cd9a7dc4ab52c0c25127c927, type: 3} + - {fileID: 2800000, guid: f0277d5948835d94bae3af07480375d6, type: 3} + bindAsDefault: 1 + isAtlasV2: 0 + cachedData: {fileID: 0} + packedSpriteRenderDataKeys: [] + m_MasterAtlas: {fileID: 0} + m_PackedSprites: [] + m_PackedSpriteNamesToIndex: [] + m_RenderDataMap: {} + m_Tag: ZhanLing 1 + m_IsVariant: 0 diff --git a/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas.meta b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas.meta new file mode 100644 index 000000000..d454cb771 --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 72008a1238b2b5f48b76ec9f8bb16892 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4343727234628468602 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas b/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas new file mode 100644 index 000000000..d3313c8b8 --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas @@ -0,0 +1,116 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!687078895 &4343727234628468602 +SpriteAtlas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: chibangSprite + m_EditorData: + serializedVersion: 2 + textureSettings: + serializedVersion: 2 + anisoLevel: 1 + compressionQuality: 50 + maxTextureSize: 2048 + textureCompression: 0 + filterMode: 1 + generateMipMaps: 0 + readable: 0 + crunchedCompression: 0 + sRGB: 1 + platformSettings: + - serializedVersion: 3 + m_BuildTarget: Android + m_MaxTextureSize: 1024 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + m_BuildTarget: iPhone + m_MaxTextureSize: 1024 + m_ResizeAlgorithm: 0 + m_TextureFormat: 50 + m_TextureCompression: 1 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 1 + m_IgnorePlatformSupport: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + packingSettings: + serializedVersion: 2 + padding: 4 + blockOffset: 1 + allowAlphaSplitting: 0 + enableRotation: 1 + enableTightPacking: 1 + enableAlphaDilation: 0 + secondaryTextureSettings: {} + variantMultiplier: 1 + packables: + - {fileID: 2800000, guid: 863c088e99429f344869e04b240b23d3, type: 3} + - {fileID: 2800000, guid: 9a9db9608a2c5c643bb11a5b81643a1e, type: 3} + - {fileID: 2800000, guid: 43503eff704b97d41ac25c28a3e88881, type: 3} + - {fileID: 2800000, guid: 3d6a02b558c7d1649bc126514a9e65f8, type: 3} + - {fileID: 2800000, guid: 03de765eedf0f1247887cf2e9a4daf35, type: 3} + - {fileID: 2800000, guid: ee5817ea14648ae42be707fe28b60b5c, type: 3} + - {fileID: 2800000, guid: a679ef26467ed774d8a9ba9eebfd4036, type: 3} + - {fileID: 2800000, guid: 8ea133904ecd05e47a71995fa7efcdc8, type: 3} + - {fileID: 2800000, guid: 59ff990509b91d742a1c5942343c87c3, type: 3} + - {fileID: 2800000, guid: 8b968e74f973daf4798f855ab146786b, type: 3} + - {fileID: 2800000, guid: e0f7145448cd3ec42a5d0843cc075684, type: 3} + - {fileID: 2800000, guid: e93f4ba58a94580478170c21710a5818, type: 3} + - {fileID: 2800000, guid: 63dadb73d8560bd4f928125809742234, type: 3} + - {fileID: 2800000, guid: 348d8e5f8160ffd47937310c7ead66bb, type: 3} + - {fileID: 2800000, guid: 2a06ddc2b6df9454b9b5c8d39117a75b, type: 3} + - {fileID: 2800000, guid: f3c68cecf1b289b46a99a3687cd02fed, type: 3} + - {fileID: 2800000, guid: 7c3f4b08bdbaf2540b7baf15c749dd8d, type: 3} + - {fileID: 2800000, guid: 7c484709abee44345944dc68126b711c, type: 3} + - {fileID: 2800000, guid: b0eb338d047310243b4dad1c593386f4, type: 3} + - {fileID: 2800000, guid: 5b04fff8d2b56b34981172ccdce49f3b, type: 3} + - {fileID: 2800000, guid: 46867c8c51cf56640b5a0337c9777036, type: 3} + - {fileID: 2800000, guid: 880e680de116b4d4d8fac3a31f99f985, type: 3} + - {fileID: 2800000, guid: 26d0bee55e9a6054f828b26b76f5c5ef, type: 3} + - {fileID: 2800000, guid: e165363b79759074b9cdb3a253341704, type: 3} + - {fileID: 2800000, guid: 627cf4a5663098a40ba348946f68baaf, type: 3} + - {fileID: 2800000, guid: 93cf1663d5965bf4d80cf672d0876bc1, type: 3} + - {fileID: 2800000, guid: dd9459c351017174da2da6bef012e33d, type: 3} + - {fileID: 2800000, guid: 9274b7593e675454c9644377822df3c8, type: 3} + - {fileID: 2800000, guid: c53b74d40436cac4db8899d0959f5d35, type: 3} + - {fileID: 2800000, guid: 996a29fe8f89d284e8b9614d842f3ed1, type: 3} + - {fileID: 2800000, guid: 959863a11fd21034bb40d77e59476fcb, type: 3} + - {fileID: 2800000, guid: d67909e63b1fede43a61aeb16e1a80d9, type: 3} + - {fileID: 2800000, guid: 171c124c1d6ab2941b0f8823fa60d526, type: 3} + - {fileID: 2800000, guid: 621503d5230c4b24fa0b14210443337a, type: 3} + - {fileID: 2800000, guid: d9fbfa83d49f2e748aca525ca409e482, type: 3} + - {fileID: 2800000, guid: b0c2f3bd5eff64141adb44d30c7f1bf0, type: 3} + - {fileID: 2800000, guid: ab9dc349303dacd40baedf099a9aa5de, type: 3} + - {fileID: 2800000, guid: c14bf38721dbb154190e83c4a764a1db, type: 3} + - {fileID: 2800000, guid: bdf809b5cc15f2c43afbb82e6ce47649, type: 3} + - {fileID: 2800000, guid: 1ec5bcf9142fcc542a2963649b135804, type: 3} + - {fileID: 2800000, guid: ce9d6c8fffba38b4194b4e4694ec0870, type: 3} + - {fileID: 2800000, guid: aad8eaf3562feb1408ae3b38e3376f4d, type: 3} + - {fileID: 2800000, guid: 32cdf55c95b4c134da0350097872df65, type: 3} + - {fileID: 2800000, guid: 86e712b881109e548be6fe63a7ad9fb1, type: 3} + - {fileID: 2800000, guid: a1a9b7ab7e8ed234fa3c71e80304d0ec, type: 3} + - {fileID: 2800000, guid: 364821d288eed2f4d98173e9b0204eca, type: 3} + bindAsDefault: 1 + isAtlasV2: 0 + cachedData: {fileID: 0} + packedSpriteRenderDataKeys: [] + m_MasterAtlas: {fileID: 0} + m_PackedSprites: [] + m_PackedSpriteNamesToIndex: [] + m_RenderDataMap: {} + m_Tag: chibangSprite + m_IsVariant: 0 diff --git a/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas.meta b/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas.meta new file mode 100644 index 000000000..ac316315b --- /dev/null +++ b/Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0866d7cf8d02e054098a519554ef8a43 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4343727234628468602 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs index e57c0c4d7..6a4135074 100644 --- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs +++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs @@ -1396,6 +1396,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base await AudioResourcesData.UnLoadAudioGame(); if (flow != _resourceFlowToken) return; UnLoadBulletClip(); // ⭐ 释放开火音效句柄(引用计数归零) + TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内) + TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab await MonsterMoveLine.UnLoadBezier(); if (flow != _resourceFlowToken) return; // ⭐ 清空子弹池 + 特效池(鱼池已在 UnLoadFishAssetsData 内清理) @@ -1445,6 +1447,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base await FishResourcesData.UnLoadFishAssetsData(); await AudioResourcesData.UnLoadAudioGame(); UnLoadBulletClip(); + TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); + TurretResourcesData.UnloadAllTurretPrefabs(); await MonsterMoveLine.UnLoadBezier(); Debug.Log("[ChangeRoom] 切房失败,游戏资源已补卸载"); } @@ -1530,6 +1534,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base SetUnloadProgress(0.4f); await AudioResourcesData.UnLoadAudioGame(); UnLoadBulletClip(); // ⭐ 释放开火音效句柄(引用计数归零) + TurretResourcesData.UnloadAllZhanShen(ZhanShenUsage.GamePlay); // ⭐ 卸载按需加载的战神(游戏内) + TurretResourcesData.UnloadAllTurretPrefabs(); // ⭐ 卸载按需加载的炮台/翅膀 prefab SetUnloadProgress(0.6f); await MonsterMoveLine.UnLoadBezier(); diff --git a/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs b/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs index 8979c3360..de6103ac1 100644 --- a/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs +++ b/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_ItemListPanels.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -464,6 +465,7 @@ public class UIHome_BY_ItemListPanels : SubUIBase private void ClearItemList() { + ReleasePreviewAcquired(); // ⭐ 切列表/关面板:释放当前预览的按需资源 foreach (var toggle in _instantiatedToggles) { if (toggle != null) @@ -659,6 +661,7 @@ public class UIHome_BY_ItemListPanels : SubUIBase private void ClearZhanShenItemList() { + ReleasePreviewAcquired(); // ⭐ 切列表/关面板:释放当前预览的按需资源 foreach (var toggle in _instantiatedZSItemToggles) { if (toggle != null) @@ -725,12 +728,8 @@ public class UIHome_BY_ItemListPanels : SubUIBase if (rawImg_DetailPreview != null) rawImg_DetailPreview.gameObject.SetActive(true); - // ---- 预览(和翅膀一样实例化预制体到预览区)---- - if (resData != null && previewParent != null && prefab != null) - { - _currentPreviewObj = Instantiate(prefab, previewParent); - _currentPreviewObj.SetActive(true); - } + // ---- 预览(⭐按需加载:点哪个战神加载哪个,切走自动释放上一个)---- + ShowPreviewOnDemand(turretNumber, true); } // ==================== 战神选择按钮 ==================== @@ -994,14 +993,12 @@ public class UIHome_BY_ItemListPanels : SubUIBase rawImg_DetailPreview.gameObject.SetActive(_currentSelectType != ItemPanelSelect.Turrect); // ---- 预览 ---- - if (resData != null && previewParent != null && prefab != null) + // ---- 预览(⭐按需加载:点哪个加载哪个,切走自动释放上一个)---- + ShowPreviewOnDemand(turretNumber, false, obj => { - _currentPreviewObj = Instantiate(prefab, previewParent); - _currentPreviewObj.SetActive(true); - - if (_currentSelectType == ItemPanelSelect.Turrect) + if (obj != null && _currentSelectType == ItemPanelSelect.Turrect) { - var rt = _currentPreviewObj.GetComponent(); + var rt = obj.GetComponent(); if (rt != null) { rt.anchorMin = new Vector2(0.5f, 0f); @@ -1010,7 +1007,7 @@ public class UIHome_BY_ItemListPanels : SubUIBase rt.localScale = Vector3.one * 2.5f; } } - } + }); } /// 清除预览区当前展示的实例。 @@ -1023,6 +1020,71 @@ public class UIHome_BY_ItemListPanels : SubUIBase } } + // ==================== 预览按需加载(点哪个加载哪个,切走释放上一个) ==================== + + private int _previewSeq = 0; + /// 当前预览已 Acquire 的编号(切走时释放) + private int _previewAcquiredId = 0; + private bool _previewAcquiredIsZS = false; + + /// + /// ⭐ 按需加载并显示预览模型:释放上一个的按需引用 → 异步获取当前 → 实例化。 + /// 战神走 ZS{编号}+Display 标签,炮台/翅膀走 PT{编号} 标签。 + /// 快速连续点击由 seq 竞态丢弃(只显示最后点的那一个)。 + /// onLoaded:实例化后的回调(炮台预览的 RectTransform 特殊处理等)。 + /// + private void ShowPreviewOnDemand(int turretNumber, bool isZhanShen, System.Action onLoaded = null) + { + StartCoroutine(ShowPreviewRoutine(turretNumber, isZhanShen, onLoaded, ++_previewSeq)); + } + + private IEnumerator ShowPreviewRoutine(int turretNumber, bool isZhanShen, System.Action onLoaded, int seq) + { + // 释放上一个预览的按需引用(归零卸包 → 内存里同时只有一个预览资源) + ReleasePreviewAcquired(); + + if (turretNumber <= 0 || previewParent == null) + { + ClearPreview(); + onLoaded?.Invoke(null); + yield break; + } + + var task = isZhanShen + ? TurretResourcesData.AcquireZhanShenAsync(turretNumber, ZhanShenUsage.Display) + : TurretResourcesData.AcquireTurretPrefabAsync(turretNumber); + while (!task.IsCompleted) + yield return null; + + // 期间又点了别的 → 丢弃本次并归还引用 + if (seq != _previewSeq) + { + if (isZhanShen) TurretResourcesData.ReleaseZhanShen(turretNumber, ZhanShenUsage.Display); + else TurretResourcesData.ReleaseTurretPrefab(turretNumber); + yield break; + } + + GameObject prefab = task.Result; + ClearPreview(); + if (prefab != null) + { + _previewAcquiredId = turretNumber; + _previewAcquiredIsZS = isZhanShen; + _currentPreviewObj = Instantiate(prefab, previewParent); + _currentPreviewObj.SetActive(true); + } + onLoaded?.Invoke(_currentPreviewObj); + } + + /// 释放当前预览的按需引用(面板关闭/切列表时调用,归零卸包) + private void ReleasePreviewAcquired() + { + if (_previewAcquiredId <= 0) return; + if (_previewAcquiredIsZS) TurretResourcesData.ReleaseZhanShen(_previewAcquiredId, ZhanShenUsage.Display); + else TurretResourcesData.ReleaseTurretPrefab(_previewAcquiredId); + _previewAcquiredId = 0; + } + /// 根据道具数据生成特殊效果描述。 private static string GetSpecialEffectText(TurretResourcesData resData, TurretData turretData, BaseUserProp userProp = null) {