From 04536c4b811c4eeffe6c06fd1ea2d94c14f5aff8 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Sat, 4 Jul 2026 23:12:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(editor):=20=E4=BF=AE=E5=A4=8D=20Aseprite=20?= =?UTF-8?q?JSON=20=E5=B0=BE=E9=9A=8F=E9=80=97=E5=8F=B7=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 AsepriteMeta 中未使用的 layers/slices 字段 - 新增 SanitizeJsonForUnity 正则清理尾随逗号 - 修复 Aseprite 导出 JSON 偶发尾随逗号导致 JsonUtility 解析失败 --- Assets/Editor/Window/AnimationClipData.cs | 2 -- Assets/Editor/Window/AnimationClipGeneratorCore.cs | 14 +++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Assets/Editor/Window/AnimationClipData.cs b/Assets/Editor/Window/AnimationClipData.cs index 10e632702..ab5b64739 100644 --- a/Assets/Editor/Window/AnimationClipData.cs +++ b/Assets/Editor/Window/AnimationClipData.cs @@ -74,8 +74,6 @@ namespace AibisDream.SystemEditor public AsepriteSize size; public string scale; public List frameTags; - public List layers; - public List slices; } // Aseprite JSON的包装类(因为Unity JsonUtility不支持Dictionary) diff --git a/Assets/Editor/Window/AnimationClipGeneratorCore.cs b/Assets/Editor/Window/AnimationClipGeneratorCore.cs index b11bb081c..a275d8160 100644 --- a/Assets/Editor/Window/AnimationClipGeneratorCore.cs +++ b/Assets/Editor/Window/AnimationClipGeneratorCore.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using UnityEditor; using UnityEditor.U2D.Sprites; using UnityEngine; @@ -57,8 +58,7 @@ namespace AibisDream.SystemEditor int metaBraceEnd = FindMatchingBrace(jsonContent, metaBraceStart); string metaJson = jsonContent.Substring(metaBraceStart, metaBraceEnd - metaBraceStart + 1); - // 移除可能的尾随逗号 - metaJson = metaJson.TrimEnd(',', ' ', '\n', '\r'); + metaJson = SanitizeJsonForUnity(metaJson); AsepriteMeta meta = JsonUtility.FromJson(metaJson); @@ -173,7 +173,7 @@ namespace AibisDream.SystemEditor try { - AsepriteFrameInfo frameInfo = JsonUtility.FromJson(frameDataJson); + AsepriteFrameInfo frameInfo = JsonUtility.FromJson(SanitizeJsonForUnity(frameDataJson)); if (frameInfo.frame != null) { frames.Add(new FrameData @@ -215,6 +215,14 @@ namespace AibisDream.SystemEditor return int.MaxValue; // 如果无法解析,放在最后 } + /// + /// Unity JsonUtility 不支持尾随逗号,Aseprite 导出时偶尔会带上。 + /// + private static string SanitizeJsonForUnity(string json) + { + return Regex.Replace(json, @",(\s*[}\]])", "$1"); + } + private static int FindMatchingBrace(string str, int startIndex) { if (startIndex < 0 || startIndex >= str.Length) return -1;