From 6381daccb879129d8af8505e7e88fb661040f229 Mon Sep 17 00:00:00 2001 From: zhang hongbo Date: Tue, 3 Feb 2026 12:18:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=8E=E6=9C=AF=E8=B5=84=E6=BA=90=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AAA - 副本.txt | 0 AAA.txt | 0 AAA.txt.meta | 7 -- Art_Json/Collections/HeadResource.json | 8 -- Art_Json/art_table_manifest.json | 60 ++++++++++++++ .../art_table_manifest.json.meta | 2 +- Art_SO/Collections/HeadResource.asset | 8 -- Editor/Art_Tools/ArtResourceConfigEditor.cs | 39 +++++---- Editor/Art_Tools/ArtResourcePathFiller.cs | 79 ++++++++++++++++++- 9 files changed, 162 insertions(+), 41 deletions(-) delete mode 100644 AAA - 副本.txt delete mode 100644 AAA.txt delete mode 100644 AAA.txt.meta create mode 100644 Art_Json/art_table_manifest.json rename AAA - 副本.txt.meta => Art_Json/art_table_manifest.json.meta (75%) diff --git a/AAA - 副本.txt b/AAA - 副本.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/AAA.txt b/AAA.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/AAA.txt.meta b/AAA.txt.meta deleted file mode 100644 index 5198c45c..00000000 --- a/AAA.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e168b1a777deef84c9bbfe80cf8d38b4 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Art_Json/Collections/HeadResource.json b/Art_Json/Collections/HeadResource.json index 3a4eb6fe..752fc941 100644 --- a/Art_Json/Collections/HeadResource.json +++ b/Art_Json/Collections/HeadResource.json @@ -209,14 +209,6 @@ "SpritePath": "Assets/Art_SubModule/Art_Resource/Art_UISprites/Head/testHead.jpg", "SpineAssetPath": "", "SpineAnimName": "" - }, - { - "Id": 1035, - "Name": "新资源项_1035", - "Desc": "", - "SpritePath": "Assets/Art_SubModule/Art_Resource/Art_UISprites/test1.png", - "SpineAssetPath": "", - "SpineAnimName": "" } ] } \ No newline at end of file diff --git a/Art_Json/art_table_manifest.json b/Art_Json/art_table_manifest.json new file mode 100644 index 00000000..9df391be --- /dev/null +++ b/Art_Json/art_table_manifest.json @@ -0,0 +1,60 @@ +{ + "tablePaths": [ + "Assets/Art_SubModule/Art_Json/Collections/EmojiResource.json", + "Assets/Art_SubModule/Art_Json/Collections/HeadFrameResource.json", + "Assets/Art_SubModule/Art_Json/Collections/HeadResource.json", + "Assets/Art_SubModule/Art_Json/DecorateIcon/DecorateIconResource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene10Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene11Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene12Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene13Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene14Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene15Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene16Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene17Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene18Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene19Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene20Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene21Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene22Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene23Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene24Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene25Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene26Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene27Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene28Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene29Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene2Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene30Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene31Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene32Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene33Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene34Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene35Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene36Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene37Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene38Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene39Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene3Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene40Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene41Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene42Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene43Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene44Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene45Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene46Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene47Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene48Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene49Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene4Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene50Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene5Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene6Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene7Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene8Resource.json", + "Assets/Art_SubModule/Art_Json/DecorateScene/Scene9Resource.json", + "Assets/Art_SubModule/Art_Json/Shop/ShopBig.json", + "Assets/Art_SubModule/Art_Json/Shop/ShopOther.json" + ], + "preloadTableIds": [] +} \ No newline at end of file diff --git a/AAA - 副本.txt.meta b/Art_Json/art_table_manifest.json.meta similarity index 75% rename from AAA - 副本.txt.meta rename to Art_Json/art_table_manifest.json.meta index 8f8a637f..3890e538 100644 --- a/AAA - 副本.txt.meta +++ b/Art_Json/art_table_manifest.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fba7406f65a0efd479fdbe0401785d2a +guid: 59b49f5fd2d72a24b84d5927de0481c7 TextScriptImporter: externalObjects: {} userData: diff --git a/Art_SO/Collections/HeadResource.asset b/Art_SO/Collections/HeadResource.asset index 9f3d69cc..47da5f87 100644 --- a/Art_SO/Collections/HeadResource.asset +++ b/Art_SO/Collections/HeadResource.asset @@ -223,11 +223,3 @@ MonoBehaviour: SpineAsset: {fileID: 0} SpineAssetPath: SpineAnimName: - - Id: 1035 - Name: "\u65B0\u8D44\u6E90\u9879_1035" - Desc: - Sprite: {fileID: 21300000, guid: 733315d1cf4a069438e2304ec523f0f5, type: 3} - SpritePath: Assets/Art_SubModule/Art_Resource/Art_UISprites/test1.png - SpineAsset: {fileID: 0} - SpineAssetPath: - SpineAnimName: diff --git a/Editor/Art_Tools/ArtResourceConfigEditor.cs b/Editor/Art_Tools/ArtResourceConfigEditor.cs index c0ca3af8..cbdd1d28 100644 --- a/Editor/Art_Tools/ArtResourceConfigEditor.cs +++ b/Editor/Art_Tools/ArtResourceConfigEditor.cs @@ -1308,21 +1308,23 @@ namespace EditorArt_Tools private void UpdateManifest() { - const string MANIFEST_PATH = "Assets/Art_SubModule/Art_SO/art_table_manifest.json"; + const string MANIFEST_PATH = "Assets/Art_SubModule/Art_Json/art_table_manifest.json"; try { - // 查找所有ArtTableSO文件 - string[] guids = AssetDatabase.FindAssets("t:ArtTableSO", new[] { SO_ROOT_PATH }); + // 查找所有JSON文件(从JSON目录扫描) + string[] jsonFiles = Directory.GetFiles(JSON_ROOT_PATH, "*.json", SearchOption.AllDirectories); List tablePaths = new List(); - foreach (string guid in guids) + foreach (string fullPath in jsonFiles) { - string path = AssetDatabase.GUIDToAssetPath(guid); - if (!string.IsNullOrEmpty(path)) - { - tablePaths.Add(path); - } + string relativePath = fullPath.Replace("\\", "/").Replace(Application.dataPath.Replace("/Assets", "").Replace("\\", "/") + "/", ""); + + // 排除manifest文件本身 + if (relativePath.EndsWith("art_table_manifest.json")) + continue; + + tablePaths.Add(relativePath); } // 排序路径 @@ -1362,13 +1364,20 @@ namespace EditorArt_Tools // 清理预加载配置:移除已删除表的ID // 获取所有当前存在的表的ID List validTableIds = new List(); - foreach (string guid in guids) + foreach (string jsonPath in tablePaths) { - string path = AssetDatabase.GUIDToAssetPath(guid); - var table = AssetDatabase.LoadAssetAtPath(path); - if (table != null) + try { - validTableIds.Add(table.TableId); + string jsonContent = File.ReadAllText(jsonPath); + var jsonData = JsonUtility.FromJson(jsonContent); + if (jsonData != null) + { + validTableIds.Add(jsonData.TableId); + } + } + catch + { + // 忽略无法解析的文件 } } @@ -1400,7 +1409,7 @@ namespace EditorArt_Tools File.WriteAllText(MANIFEST_PATH, json); AssetDatabase.ImportAsset(MANIFEST_PATH); - Debug.Log($"[ArtResourceConfigEditor] Manifest文件已更新: {MANIFEST_PATH}, 共 {tablePaths.Count} 个表"); + Debug.Log($"[ArtResourceConfigEditor] Manifest文件已更新: {MANIFEST_PATH}, 共 {tablePaths.Count} 个JSON表"); } catch (System.Exception ex) { diff --git a/Editor/Art_Tools/ArtResourcePathFiller.cs b/Editor/Art_Tools/ArtResourcePathFiller.cs index 87753723..f163a66f 100644 --- a/Editor/Art_Tools/ArtResourcePathFiller.cs +++ b/Editor/Art_Tools/ArtResourcePathFiller.cs @@ -3,6 +3,8 @@ using UnityEngine; using UnityEditor; using ArtResource; using System.Linq; +using System.IO; +using System.Collections.Generic; namespace ArtTools { @@ -12,6 +14,7 @@ namespace ArtTools /// 功能: /// 1. 在保存SO时自动填充SpritePath和SpineAssetPath /// 2. 提供手动批量更新所有SO的工具 + /// 3. 同步更新JSON配置文件 /// /// 使用方法: /// - 自动:在ArtTableSO的OnValidate或保存时调用FillResourcePaths @@ -19,6 +22,8 @@ namespace ArtTools /// public static class ArtResourcePathFiller { + private const string SO_ROOT_PATH = "Assets/Art_SubModule/Art_SO"; + private const string JSON_ROOT_PATH = "Assets/Art_SubModule/Art_Json"; /// /// 自动填充单个SO的资源路径 /// 应该在ArtTableSO保存时调用 @@ -77,6 +82,54 @@ namespace ArtTools { EditorUtility.SetDirty(table); Debug.Log($"[ArtResourcePathFiller] 已更新资源路径: {table.TableName} ({table.TableId})"); + + // 同步到JSON + SyncToJson(table); + } + } + + /// + /// 同步SO数据到JSON文件 + /// + private static void SyncToJson(ArtTableSO table) + { + try + { + string soPath = AssetDatabase.GetAssetPath(table); + string relativePath = soPath.Replace(SO_ROOT_PATH, "").Replace(".asset", ".json"); + string jsonPath = JSON_ROOT_PATH + relativePath; + + // 确保目录存在 + string directory = Path.GetDirectoryName(jsonPath); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + // 创建JSON数据 + var jsonData = new ArtTableJsonData + { + TableId = table.TableId, + TableName = table.TableName, + Items = table.Items.Select(item => new ArtItemJsonData + { + Id = item.Id, + Name = item.Name, + Desc = item.Desc, + SpritePath = item.SpritePath, + SpineAssetPath = item.SpineAssetPath, + SpineAnimName = item.SpineAnimName + }).ToList() + }; + + string json = JsonUtility.ToJson(jsonData, true); + File.WriteAllText(jsonPath, json); + + Debug.Log($"[ArtResourcePathFiller] JSON同步成功: {jsonPath}"); + } + catch (System.Exception ex) + { + Debug.LogError($"[ArtResourcePathFiller] JSON同步失败: {ex.Message}"); } } @@ -124,10 +177,10 @@ namespace ArtTools AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); - Debug.Log($"[ArtResourcePathFiller] ✓ 批量更新完成: 处理了 {updatedCount} 个ArtTableSO"); + Debug.Log($"[ArtResourcePathFiller] ✓ 批量更新完成: 处理了 {updatedCount} 个ArtTableSO,已同步JSON配置"); EditorUtility.DisplayDialog( "更新完成", - $"已更新 {updatedCount} 个美术资源表的路径信息\n\n现在可以在Runtime模式下正常加载资源了", + $"已更新 {updatedCount} 个美术资源表的路径信息\n并同步更新了JSON配置文件\n\n现在可以在Runtime模式下正常加载资源了", "确定" ); } @@ -292,5 +345,27 @@ namespace ArtTools } } } + + /// + /// JSON数据结构 + /// + [System.Serializable] + public class ArtTableJsonData + { + public int TableId; + public string TableName; + public List Items; + } + + [System.Serializable] + public class ArtItemJsonData + { + public int Id; + public string Name; + public string Desc; + public string SpritePath; + public string SpineAssetPath; + public string SpineAnimName; + } } #endif