diff --git a/Assets/AddressableAssetsData/Windows/addressables_content_state.bin b/Assets/AddressableAssetsData/Windows/addressables_content_state.bin index f8a6a8b33..8b9436820 100644 Binary files a/Assets/AddressableAssetsData/Windows/addressables_content_state.bin and b/Assets/AddressableAssetsData/Windows/addressables_content_state.bin differ diff --git a/Assets/Editor/AtlasPackingFix.cs b/Assets/Editor/AtlasPackingFix.cs new file mode 100644 index 000000000..d03d8a702 --- /dev/null +++ b/Assets/Editor/AtlasPackingFix.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +/// +/// 一键修复图集"渗色 / 串图 / 边缘被邻居图片填充"问题。 +/// +/// 症状:圆形等带透明边缘的图片,四周被其他图片的像素填充;正方形区域采样/裁剪时会取到邻居图。 +/// 成因:padding 过小 + 紧致打包(透明边被裁掉) + 未开 Alpha 扩张 + 图集可能被降采样。 +/// +/// 本工具对图集的 packingSettings 统一设置: +/// padding 4 → 8 相邻 sprite 之间留出大于压缩块的间隙 +/// enableTightPacking off 不再裁掉透明边,sprite 保持完整矩形(正方形区域只含自己) +/// enableRotation off 不在图集内旋转贴图,避免采样方向错乱(串图) +/// enableAlphaDilation on 边缘颜色向外扩张,滤色采样不会取到邻居像素 +/// +/// 改完必须:重建 Addressables 内容 → 重出包。 +/// +public static class AtlasPackingFix +{ + private const int Padding = 8; + private const bool KeepRotation = false; // 需要省图集空间时可改回 true + + [MenuItem("Tools/图集工具/修复所有图集(渗色·串图)")] + public static void FixAll() + { + var list = new List(); + foreach (var f in Directory.GetFiles("Assets", "*.spriteatlasv2", SearchOption.AllDirectories)) + list.Add(f.Replace('\\', '/')); + foreach (var f in Directory.GetFiles("Assets", "*.spriteatlas", SearchOption.AllDirectories)) + list.Add(f.Replace('\\', '/')); + + if (list.Count == 0) { Debug.LogWarning("[图集修复] 没找到任何图集"); return; } + Apply(list); + } + + [MenuItem("Tools/图集工具/修复选中图集(渗色·串图)")] + public static void FixSelected() + { + var list = new List(); + foreach (var guid in Selection.assetGUIDs) + { + var p = AssetDatabase.GUIDToAssetPath(guid); + if (p.EndsWith(".spriteatlas") || p.EndsWith(".spriteatlasv2")) + list.Add(p); + } + if (list.Count == 0) + { + Debug.LogWarning("[图集修复] 请先在 Project 里选中至少一个 .spriteatlas / .spriteatlasv2"); + return; + } + Apply(list); + } + + private static void Apply(List paths) + { + int ok = 0, skip = 0; + try + { + AssetDatabase.StartAssetEditing(); + foreach (var path in paths) + { + var importer = AssetImporter.GetAtPath(path); + if (importer == null) { skip++; continue; } + + // 用反射拿 packingSettings,避免不同 Unity 版本字段可见性差异导致编译问题 + var prop = importer.GetType().GetProperty("packingSettings"); + if (prop == null || !prop.CanRead || !prop.CanWrite) + { + Debug.LogWarning($"[图集修复] 跳过(无 packingSettings): {path}"); + skip++; + continue; + } + + object boxed = prop.GetValue(importer); // 装箱的结构体副本 + var st = boxed.GetType(); + SetField(st, boxed, "padding", Padding); + SetField(st, boxed, "enableTightPacking", false); + SetField(st, boxed, "enableRotation", KeepRotation); + SetField(st, boxed, "enableAlphaDilation", true); + prop.SetValue(importer, boxed); + importer.SaveAndReimport(); + ok++; + Debug.Log($"[图集修复] {Path.GetFileName(path)} → padding={Padding}, TightPacking=off, Rotation={(KeepRotation ? "on" : "off")}, AlphaDilation=on"); + } + } + finally + { + AssetDatabase.StopAssetEditing(); + AssetDatabase.Refresh(); + } + Debug.Log($"[图集修复] 完成:处理 {ok} 个,跳过 {skip} 个。请重建 Addressables 内容后重出包。"); + } + + private static void SetField(Type t, object boxed, string name, object value) + { + var f = t.GetField(name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + if (f != null) f.SetValue(boxed, value); + else Debug.LogWarning($"[图集修复] 字段不存在,已跳过: {name}"); + } +} \ No newline at end of file diff --git a/Assets/Editor/TurretAtlasBleedingFix.cs.meta b/Assets/Editor/AtlasPackingFix.cs.meta similarity index 83% rename from Assets/Editor/TurretAtlasBleedingFix.cs.meta rename to Assets/Editor/AtlasPackingFix.cs.meta index f967ae226..e2dfb7de7 100644 --- a/Assets/Editor/TurretAtlasBleedingFix.cs.meta +++ b/Assets/Editor/AtlasPackingFix.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2b39dc75916801143b04a2619782ab66 +guid: f7b659919a9f5ac4cb757d05f5f151e6 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor/SpineSettings.asset b/Assets/Editor/SpineSettings.asset index cff8f87a8..ca02a16e7 100644 --- a/Assets/Editor/SpineSettings.asset +++ b/Assets/Editor/SpineSettings.asset @@ -9,7 +9,7 @@ MonoBehaviour: m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 0} + m_Script: {fileID: 11500000, guid: b29e98153ec2fbd44b8f7da1b41194e8, type: 3} m_Name: SpineSettings m_EditorClassIdentifier: defaultScale: 0.01 diff --git a/Assets/Editor/TurretAtlasBleedingFix.cs b/Assets/Editor/TurretAtlasBleedingFix.cs deleted file mode 100644 index 653c2a476..000000000 --- a/Assets/Editor/TurretAtlasBleedingFix.cs +++ /dev/null @@ -1,63 +0,0 @@ -using UnityEditor; -using UnityEditor.U2D; -using UnityEngine; - -/// -/// 一键修复炮台/翅膀/战神三个图集的边缘渗色(设置存在 .meta 的 SpriteAtlasImporter 里): -/// 1) Padding 4 → 8(隔开相邻 sprite,大于 ASTC 压缩块尺寸,根治相邻像素渗色) -/// 2) 平台压缩 ASTC 6x6 → 4x4(质量档提高,减少压缩糊边/杂边) -/// 3) 尺寸上限 1024 → 2048(避免整体缩小带来的模糊) -/// 改动后必须:重建 Addressables 内容 → 重出包。 -/// -public static class TurretAtlasBleedingFix -{ - private static readonly string[] Atlases = - { - "Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlasv2", - "Assets/MyGame/aa/UI/Atlases/chibangSprite.spriteatlasv2", - "Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlasv2", - }; - - [MenuItem("Tools/图集工具/修复炮台三图集边缘渗色")] - public static void Fix() - { - foreach (var path in Atlases) - { - var importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter; - if (importer == null) - { - Debug.LogWarning($"[图集修复] 跳过(不是 SpriteAtlasImporter): {path}"); - continue; - } - - // 1) Padding 4 → 8 - var packing = importer.packingSettings; - packing.padding = 8; - importer.packingSettings = packing; - - // 2) 平台压缩与尺寸:ASTC 4x4 + 上限 2048 - var android = importer.GetPlatformSettings("Android"); - if (android != null) - { - android.overridden = true; - android.format = TextureImporterFormat.ASTC_4x4; - android.maxTextureSize = 2048; - importer.SetPlatformSettings(android); - } - var iphone = importer.GetPlatformSettings("iPhone"); - if (iphone != null) - { - iphone.overridden = true; - iphone.format = TextureImporterFormat.ASTC_4x4; - iphone.maxTextureSize = 2048; - importer.SetPlatformSettings(iphone); - } - - importer.SaveAndReimport(); - Debug.Log($"[图集修复] {System.IO.Path.GetFileName(path)} → padding=8, ASTC 4x4, 上限2048"); - } - - AssetDatabase.Refresh(); - Debug.Log("[图集修复] 完成 —— 请重建 Addressables 内容后重出包"); - } -} \ No newline at end of file diff --git a/Assets/MyGame/Scenes/UIScene.unity b/Assets/MyGame/Scenes/UIScene.unity index bb552fcd0..af38301be 100644 --- a/Assets/MyGame/Scenes/UIScene.unity +++ b/Assets/MyGame/Scenes/UIScene.unity @@ -583,7 +583,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 22400762, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3} propertyPath: m_AnchoredPosition.y - value: -0.000011444092 + value: -0.000019073486 objectReference: {fileID: 0} - target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3} propertyPath: m_AnchorMax.x diff --git a/Assets/MyGame/aa/UI/Atlases/AnnouncementPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/AnnouncementPanel.spriteatlasv2.meta index cbbd64899..c79e75e6e 100644 --- a/Assets/MyGame/aa/UI/Atlases/AnnouncementPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/AnnouncementPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/BackPack.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/BackPack.spriteatlasv2.meta index 3544fb3d8..c1893ac16 100644 --- a/Assets/MyGame/aa/UI/Atlases/BackPack.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/BackPack.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/EmailPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/EmailPanel.spriteatlasv2.meta index 4396ec43a..28b98ca6a 100644 --- a/Assets/MyGame/aa/UI/Atlases/EmailPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/EmailPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/GameMainPanel_FLZY.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/GameMainPanel_FLZY.spriteatlasv2.meta index ea20561ff..bca54368b 100644 --- a/Assets/MyGame/aa/UI/Atlases/GameMainPanel_FLZY.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/GameMainPanel_FLZY.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/JJJPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/JJJPanel.spriteatlasv2.meta index 92200ad88..64ac61641 100644 --- a/Assets/MyGame/aa/UI/Atlases/JJJPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/JJJPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/MYSelectSit.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/MYSelectSit.spriteatlasv2.meta index d33367b01..3bde51190 100644 --- a/Assets/MyGame/aa/UI/Atlases/MYSelectSit.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/MYSelectSit.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/MainPanelAtlas.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/MainPanelAtlas.spriteatlasv2.meta index d69bc15c0..509438228 100644 --- a/Assets/MyGame/aa/UI/Atlases/MainPanelAtlas.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/MainPanelAtlas.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlasv2.meta index 9bd93f1f8..dfc518ca4 100644 --- a/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/PaoTaiSprite.spriteatlasv2.meta @@ -59,7 +59,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/RankPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/RankPanel.spriteatlasv2.meta index a7996b05e..35a2f6881 100644 --- a/Assets/MyGame/aa/UI/Atlases/RankPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/RankPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/SafeBox.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/SafeBox.spriteatlasv2.meta index b1d1520cb..8536ecf05 100644 --- a/Assets/MyGame/aa/UI/Atlases/SafeBox.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/SafeBox.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2 b/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2 index c294a7adf..8e66a58fc 100644 --- a/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2 +++ b/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2 @@ -31,7 +31,7 @@ SpriteAtlasAsset: - {fileID: 21300000, guid: f5f7b4d21474e88438f7e91a89f06c10, type: 3} - {fileID: 21300000, guid: 2e0eabc28e0080044b777636a4fddf93, type: 3} - {fileID: 21300000, guid: 6e045a3820e5b5349ad532f32d1fdfb0, type: 3} - - {fileID: 21300000, guid: e18a14c3bb174eb4b8e55cf48d32e3a0, type: 3} + - {fileID: 2800000, guid: e18a14c3bb174eb4b8e55cf48d32e3a0, type: 3} - {fileID: 21300000, guid: 6b3195f69eabbf445bc3bf6ed8752fe0, type: 3} - {fileID: 21300000, guid: 72b625933f6cd1f48a2fd5310fc1d01f, type: 3} - {fileID: 21300000, guid: 07e53ec5e9d657744b6d459f20f72f11, type: 3} diff --git a/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2.meta index 7a0aff755..94ab96f1a 100644 --- a/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/SelectRoomPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/ServicePanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/ServicePanel.spriteatlasv2.meta index 647aa392c..cdcd8e4c9 100644 --- a/Assets/MyGame/aa/UI/Atlases/ServicePanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/ServicePanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/SettingPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/SettingPanel.spriteatlasv2.meta index e3985f7ab..b497be7a1 100644 --- a/Assets/MyGame/aa/UI/Atlases/SettingPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/SettingPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/ShopPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/ShopPanel.spriteatlasv2.meta index 6b611fb47..23ac2b008 100644 --- a/Assets/MyGame/aa/UI/Atlases/ShopPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/ShopPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/UISignView.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/UISignView.spriteatlasv2.meta index 36fcfae0e..98c814be0 100644 --- a/Assets/MyGame/aa/UI/Atlases/UISignView.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/UISignView.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/UserInfo.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/UserInfo.spriteatlasv2.meta index 97d4d5ab1..161448d1b 100644 --- a/Assets/MyGame/aa/UI/Atlases/UserInfo.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/UserInfo.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/VIPPanel.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/VIPPanel.spriteatlasv2.meta index 25f06f5f7..d5a8b8d2a 100644 --- a/Assets/MyGame/aa/UI/Atlases/VIPPanel.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/VIPPanel.spriteatlasv2.meta @@ -46,7 +46,7 @@ SpriteAtlasImporter: blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 - enableTightPacking: 1 + enableTightPacking: 0 enableAlphaDilation: 0 secondaryTextureSettings: {} variantMultiplier: 1 diff --git a/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlasv2.meta b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlasv2.meta index e3835d0c0..f36807dc2 100644 --- a/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlasv2.meta +++ b/Assets/MyGame/aa/UI/Atlases/ZhanShenSprite.spriteatlasv2.meta @@ -45,9 +45,9 @@ SpriteAtlasImporter: padding: 8 blockOffset: 1 allowAlphaSplitting: 0 - enableRotation: 1 - enableTightPacking: 1 - enableAlphaDilation: 0 + enableRotation: 0 + enableTightPacking: 0 + enableAlphaDilation: 1 secondaryTextureSettings: {} variantMultiplier: 1 bindAsDefault: 1