public static void ChargeTextures(Data.Exporter exporter, GroupNodeItem groupnode) { //重新加载 var atlaspath = string.Format(exportPath + "/{0}.png", exporter.name); Texture2D[] globleTextures = LoadAllObjectFromDir <Texture2D>(exporter.ruleObj.globalTexture); Sprite[] globleSprites = LoadAllObjectFromDir <Sprite>(exporter.ruleObj.globalSprite); Sprite[] fileSprites = AssetDatabase.LoadAllAssetsAtPath(atlaspath).OfType <Sprite>().ToArray(); Texture2D[] fileTextures = LoadAllObjectFromDir <Texture2D>(exportPath); // AssetDatabase.LoadAllAssetsAtPath(pictureInfo.exportPath).OfType<Texture2D>().ToArray(); Sprite[] fileSingleSprites = LoadAllObjectFromDir <Sprite>(exportPath); // AssetDatabase.LoadAllAssetsAtPath(pictureInfo.exportPath).OfType<Sprite>().ToArray(); var pictureData = new List <Data.ImgNode>(); groupnode.GetImgNodes(pictureData); foreach (var item in pictureData) { if (item.source == ImgSource.Globle) { switch (item.type) { case ImgType.Image: case ImgType.AtlasImage: item.sprite = Array.Find(globleSprites, x => x.name == item.TextureName); break; case ImgType.Texture: item.texture = Array.Find(globleTextures, x => x.name == item.TextureName); break; default: break; } } else { switch (item.type) { case ImgType.Image: item.sprite = Array.Find(fileSingleSprites, x => x.name == item.TextureName); break; case ImgType.AtlasImage: item.sprite = Array.Find(fileSprites, x => x.name == item.TextureName); break; case ImgType.Texture: item.texture = Array.Find(fileTextures, x => x.name == item.TextureName); break; default: break; } } } }
private void InitTreeView() { if (exporter.groups != null && exporter.groups.Count > 0) { if (exporter.groups.Count > 0) { var list = exporter.groups.ConvertAll(x => new GroupNodeItem(x)); rootNode = TreeViewUtility.ListToTree <GroupNodeItem>(list); m_TreeView = new ExporterTreeView(m_TreeViewState); m_TreeView.root = rootNode; m_TreeView.ruleObj = (target as Exporter).ruleObj; } } }
private void DrawUICreateOption() { using (var hor = new EditorGUILayout.HorizontalScope()) { var style = "miniButton"; var layout = GUILayout.Width(60); if (GUILayout.Button("Build-All", style, layout)) { var canvasObj = Array.Find(Selection.objects, x => x is GameObject && (x as GameObject).GetComponent <Canvas>() != null); var ctrl = PSDImporterUtility.CreatePsdImportCtrlSafty(exporter.ruleObj, exporter.ruleObj.defultUISize, canvasObj == null ? FindObjectOfType <Canvas>() : (canvasObj as GameObject).GetComponent <Canvas>()); ctrl.Import(rootNode.data); AssetDatabase.Refresh(); } if (GUILayout.Button("Build-Sel", style, layout)) { var canvasObj = Array.Find(Selection.objects, x => x is GameObject && (x as GameObject).GetComponent <Canvas>() != null); var ctrl = PSDImporterUtility.CreatePsdImportCtrlSafty(exporter.ruleObj, exporter.ruleObj.defultUISize, canvasObj == null ? FindObjectOfType <Canvas>() : (canvasObj as GameObject).GetComponent <Canvas>()); var root = new GroupNodeItem(new Rect(Vector2.zero, rootNode.rect.size), 0, -1); root.displayName = "partial build"; foreach (var node in m_TreeView.selected) { root.AddChild(node); } ctrl.Import(root.data); AssetDatabase.Refresh(); } if (GUILayout.Button("Expland", style, layout)) { m_TreeView.ExpandAll(); } if (GUILayout.Button("Clear", style, layout)) { exporter.groups.Clear(); m_TreeView.root = null; m_TreeView.Reload(); } } }
private void RecordAllPsdInformation() { if (!string.IsNullOrEmpty(exporter.psdFile)) { var psd = PsdDocument.Create(exporter.psdFile); if (psd != null) { try { var rootSize = new Vector2(psd.Width, psd.Height); ExportUtility.InitPsdExportEnvrioment(exporter, rootSize); rootNode = new GroupNodeItem(new Rect(Vector2.zero, rootSize), 0, -1); rootNode.displayName = exporter.name; var groupDatas = ExportUtility.CreatePictures(psd.Childs, rootSize, exporter.ruleObj.defultUISize, exporter.ruleObj.forceSprite); if (groupDatas != null) { foreach (var groupData in groupDatas) { rootNode.AddChild(groupData); ExportUtility.ChargeTextures(exporter, groupData); } } var list = new List <GroupNodeItem>(); TreeViewUtility.TreeToList <GroupNodeItem>(rootNode, list, true); exporter.groups = list.ConvertAll(x => x.data); EditorUtility.SetDirty(exporter); } catch (Exception e) { throw e; } finally { psd.Dispose(); } } } }
/// <summary> /// 转换为组 /// </summary> /// <param name="layer"></param> /// <param name="group"></param> /// <param name="OnRetrive"></param> public static void RetriveLayerToSwitchModle(Vector2 rootSize, PsdLayer layer, GroupNodeItem group, bool forceSprite = false) { if (!layer.IsGroup) { return; } else { float index = 0; foreach (var child in layer.Childs) { var progress = ++index / layer.Childs.Length; EditorUtility.DisplayProgressBar(layer.Name, "转换进度:" + progress, progress); if (child.IsGroup) { GroupNodeItem childNode = new GroupNodeItem(GetRectFromLayer(child), idSpan++, group.depth + 1); childNode.Analyzing(RuleObj, child.Name); group.AddChild(childNode); if (childNode != null) { RetriveLayerToSwitchModle(rootSize, child, childNode, forceSprite); } } else { Data.ImgNode imgnode = AnalysisLayer(group.displayName, rootSize, child, forceSprite); if (imgnode != null) { group.images.Add(imgnode); } } } EditorUtility.ClearProgressBar(); } }
private void RecordSelectedInformation() { if (m_TreeView == null || m_TreeView.selected.Count == 0) { return; } var psdLayers = m_TreeView.selected.ConvertAll(x => x.layer as IPsdLayer).ToArray(); if (exporter == null) { exporter = ScriptableObject.CreateInstance <Data.Exporter>(); } exporter.ruleObj = ruleObj; exporter.name = "exporter" + System.DateTime.UtcNow.ToFileTimeUtc(); ProjectWindowUtil.CreateAsset(exporter, exporter.name + ".asset"); EditorUtility.SetDirty(exporter); ExportUtility.InitPsdExportEnvrioment(exporter, new Vector2(psd.Width, psd.Height)); var rootNode = new GroupNodeItem(new Rect(Vector2.zero, exporter.ruleObj.defultUISize), 0, -1); rootNode.displayName = exporter.name; var groupDatas = ExportUtility.CreatePictures(psdLayers, new Vector2(psd.Width, psd.Height), exporter.ruleObj.defultUISize, exporter.ruleObj.forceSprite); if (groupDatas != null) { foreach (var groupData in groupDatas) { rootNode.AddChild(groupData); ExportUtility.ChargeTextures(exporter, groupData); } } var list = new List <GroupNodeItem>(); TreeViewUtility.TreeToList <GroupNodeItem>(rootNode, list, true); exporter.groups = list.ConvertAll(x => x.data); EditorUtility.SetDirty(exporter); }
public static GroupNodeItem[] CreatePictures(IPsdLayer[] rootLayers, Vector2 rootSize, Vector2 uiSize, bool forceSprite = false) { maxSize = uiSize; List <GroupNodeItem> nodes = new List <GroupNodeItem>(); foreach (PsdLayer rootLayer in rootLayers) { if (rootLayer.IsGroup) { var groupnode = new GroupNodeItem(GetRectFromLayer(rootLayer), idSpan++, 0); groupnode.Analyzing(ExportUtility.RuleObj, rootLayer.Name);// (rootLayer,rootLayer)); RetriveLayerToSwitchModle(rootSize, rootLayer, groupnode, forceSprite); nodes.Add(groupnode); } } var pictureData = new List <Data.ImgNode>(); foreach (var groupnode in nodes) { groupnode.GetImgNodes(pictureData); } #region 去除名称重复 var simplyed = new List <Data.ImgNode>(); foreach (var item in pictureData) { if (simplyed.Find(x => x.TextureName == item.TextureName) == null) { simplyed.Add(item); } } #endregion SwitchCreateTexture(simplyed); return(nodes.ToArray()); }