#if UNITY_EDITOR using System.Collections.Generic; using System; using Newtonsoft.Json; using UnityEngine; namespace UguiToolkit.Editor { public interface ILayoutParser { LayoutInfo Parser(string txt); } public class DefaultLayoutParser : ILayoutParser { public LayoutInfo Parser(string txt) { var layoutJsonData = JsonConvert.DeserializeObject(txt); List elementInfos = new(); LayoutInfo layoutInfo = new(elementInfos, layoutJsonData.info.canvas.size.w, layoutJsonData.info.canvas.size.h); void AddElementInfo(LayoutElementJsonData layoutElementJsonData) { if (layoutElementJsonData.type == "Image") { elementInfos.Add(new LayoutInfo.ImageInfo() { name = layoutElementJsonData.name, imgPath = layoutElementJsonData.imageName, x = layoutElementJsonData.x, y = layoutElementJsonData.y, w = layoutElementJsonData.w, h = layoutElementJsonData.h, layoutInfo = layoutInfo }); } else if (layoutElementJsonData.type == "Text") { ColorUtility.TryParseHtmlString(layoutElementJsonData.color, out var color); elementInfos.Add(new LayoutInfo.TextInfo() { name = layoutElementJsonData.name, text = layoutElementJsonData.text, font = layoutElementJsonData.font, size = layoutElementJsonData.size, align = layoutElementJsonData.align, color = color, x = layoutElementJsonData.x, y = layoutElementJsonData.y, w = layoutElementJsonData.w, h = layoutElementJsonData.h, layoutInfo = layoutInfo }); } if (layoutElementJsonData.elements != null) { foreach (var e in layoutElementJsonData.elements) AddElementInfo(e); } } AddElementInfo(layoutJsonData.root); return layoutInfo; } } [Serializable] public class LayoutJsonData { public LayoutInfoJsonData info; public LayoutElementJsonData root; } [Serializable] public class LayoutInfoJsonData { public string version; public CanvasInfoJsonData canvas; [Serializable] public class CanvasInfoJsonData { public CanvasSizeJsonData size; [Serializable] public struct CanvasSizeJsonData { public float w; public float h; } } } [Serializable] public class LayoutElementJsonData { public string type; public string name; public float x; public float y; public float w; public float h; public List elements; // ͼƬ public string imageName; // Îı¾ public string text; public float size; public string color; public string align; public string font; } } #endif