From 51497d37d2ea18aa4e439250119bb6f01224f519 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 25 九月 2026 13:29:41 +0800
Subject: [PATCH] 0312 修复图集死循环问题
---
Assets/Editor/Tool/UpdateSpritePackingSetting.cs | 75 ++++++++++++++++++++++++++++++++++++-
1 files changed, 72 insertions(+), 3 deletions(-)
diff --git a/Assets/Editor/Tool/UpdateSpritePackingSetting.cs b/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
index ab7a208..bcb368c 100644
--- a/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
+++ b/Assets/Editor/Tool/UpdateSpritePackingSetting.cs
@@ -13,8 +13,34 @@
static string rootPath = Application.dataPath + "/ResourcesOut/Sprite";
static string spriteRelativePath = "Assets/ResourcesOut/Sprite";
+ /// <summary>
+ /// 鍥鹃泦澶勭悊娴佺▼鐨勯噸鍏ヤ繚鎶わ細娴佺▼鍐呴儴浼氬ぇ閲� SaveAndReimport / ImportAsset锛�
+ /// 杩欎簺閮戒細瑙﹀彂 AssetPostprocessor锛岃嫢涓嶆尅浣忛噸鍏ュ氨浼氫笌鎵瑰鐞�/鑿滃崟瑙﹀彂褰㈡垚浜掔浉瀵煎叆銆�
+ /// </summary>
+ private static bool s_IsRunning;
+
[MenuItem("绋嬪簭/Sprite/鏍囧噯鍖朣prite璁剧疆")]
public static void UpdateAllSpritePackingSetting()
+ {
+ if (s_IsRunning)
+ {
+ Debug.LogWarning("[SpritePack] 涓婁竴娆″浘闆嗗鐞嗗皻鏈粨鏉燂紝宸茶烦杩囨湰娆¤皟鐢�");
+ return;
+ }
+
+ s_IsRunning = true;
+ try
+ {
+ UpdateAllSpritePackingSettingInternal();
+ }
+ finally
+ {
+ s_IsRunning = false;
+ EditorUtility.ClearProgressBar();
+ }
+ }
+
+ private static void UpdateAllSpritePackingSettingInternal()
{
var path = "Assets/Editor/SpritePacking/SpriteSettings.asset";
var so = AssetDatabase.LoadAssetAtPath<SpriteSettingConfig>(path);
@@ -107,7 +133,7 @@
EditorUtility.ClearProgressBar();
- SpritePack();
+ SpritePackInternal();
}
[MenuItem("绋嬪簭/Sprite/鎵撳寘BuiltIn鍥鹃泦")]
@@ -151,6 +177,11 @@
}
};
spriteAtlas = CreateSpriteAtlas(spriteRelativePath_BuiltIn, setting);
+ if (spriteAtlas == null)
+ {
+ Debug.LogError($"[SpritePack] 鍒涘缓 BuiltIn 鍥鹃泦澶辫触: {builtInSpritePath}");
+ return;
+ }
}
List<string> excludePngs = new List<string>() { "Launch_1.png", "Launch_2.png", "Launch_3.png", "LoginBackGround.png", "TB_DL_Logo.png" };
@@ -166,6 +197,26 @@
[MenuItem("绋嬪簭/Sprite/鎵撳寘鍥鹃泦")]
public static void SpritePack()
+ {
+ if (s_IsRunning)
+ {
+ Debug.LogWarning("[SpritePack] 涓婁竴娆″浘闆嗗鐞嗗皻鏈粨鏉燂紝宸茶烦杩囨湰娆¤皟鐢�");
+ return;
+ }
+
+ s_IsRunning = true;
+ try
+ {
+ SpritePackInternal();
+ }
+ finally
+ {
+ s_IsRunning = false;
+ EditorUtility.ClearProgressBar();
+ }
+ }
+
+ private static void SpritePackInternal()
{
var path = "Assets/Editor/SpritePacking/SpriteSettings.asset";
var so = AssetDatabase.LoadAssetAtPath<SpriteSettingConfig>(path);
@@ -195,6 +246,11 @@
if (spriteAtlas == null)
{
spriteAtlas = CreateSpriteAtlas(spriteRelativePath, setting);
+ if (spriteAtlas == null)
+ {
+ Debug.LogError($"[SpritePack] 鍒涘缓鍥鹃泦澶辫触: {filePath}");
+ continue;
+ }
}
string spriteFilePath = rootPath + "/" + spritefilePathName;
@@ -233,8 +289,12 @@
string atlasPath = outPath + "/" + setting.folderName + ".spriteatlasv2";
CreateEmptySpriteAtlas(atlasPath);
-
SpriteAtlasImporter atlasImporter = SpriteAtlasImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
+ if (atlasImporter == null)
+ {
+ Debug.LogError($"[SpritePack] 鑾峰彇 SpriteAtlasImporter 澶辫触: {atlasPath}");
+ return null;
+ }
#region 鍥鹃泦鍩虹璁剧疆
@@ -288,7 +348,11 @@
{
SpriteAtlasAsset.Save(new SpriteAtlasAsset(), atlasPath);
AssetDatabase.SaveAssets();
- AssetDatabase.Refresh();
+
+ // 杩欓噷鍙兘鐢ㄧ簿纭鍏ワ紝涓嶈兘璋冪敤 AssetDatabase.Refresh()锛�
+ // 鍏ㄥ簱鍒锋柊浼氭妸鍒氬啓鍏ョ殑鍥鹃泦鍐嶆鎺ㄥ叆瀵煎叆娴佺▼锛岃繘鑰岃Е鍙� OnPostprocessAllAssets锛�
+ // 琚� Unity 鍒ゅ畾涓� "infinite import loop"锛圸ZBF.spriteatlasv2 鍙嶅 changed锛夈��
+ AssetDatabase.ImportAsset(atlasPath, ImportAssetOptions.ForceSynchronousImport);
}
@@ -308,6 +372,11 @@
FileName(spriteFilePath, excludePng);
SpriteAtlas spriteAtlasTmp = AssetDatabase.LoadAssetAtPath(filePath, typeof(UnityEngine.Object)) as SpriteAtlas;
+ if (spriteAtlasTmp == null)
+ {
+ Debug.LogError($"[SpritePack] 鏃犳硶鍔犺浇鍥鹃泦锛岃烦杩囨洿鏂�: {filePath}");
+ return;
+ }
// 鑾峰彇鍥鹃泦涓嬪浘鐗�
List<UnityEngine.Object> packables = new List<UnityEngine.Object>(spriteAtlasTmp.GetPackables());
--
Gitblit v1.8.0