public UGUINode DrawLayer(GroupNode layer, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.SCROLLVIEW, layer.Name, parent); UnityEngine.UI.ScrollRect scrollRect = node.InitComponent <UnityEngine.UI.ScrollRect>(); UGUINode childNode = PSDImportUtility.InstantiateItem(GroupType.IMAGE, "Viewport", node); scrollRect.viewport = childNode.InitComponent <RectTransform>(); Color color; if (ColorUtility.TryParseHtmlString("#FFFFFF01", out color)) { childNode.InitComponent <UnityEngine.UI.Image>().color = color; } childNode.InitComponent <Mask>(); childNode.anchoType = AnchoType.XStretch | AnchoType.YStretch; bool havebg = false; for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; if (image.Name.ToLower().StartsWith("b_")) { havebg = true; UnityEngine.UI.Image graph = node.InitComponent <UnityEngine.UI.Image>(); PSDImportUtility.SetPictureOrLoadColor(image, graph); PSDImportUtility.SetRectTransform(image, scrollRect.GetComponent <RectTransform>()); } else { ctrl.DrawImage(image, node); } } if (!havebg) { PSDImportUtility.SetRectTransform(layer, scrollRect.GetComponent <RectTransform>()); } PSDImportUtility.SetRectTransform(layer, childNode.InitComponent <RectTransform>()); switch (layer.direction) { case Direction.Horizontal: scrollRect.vertical = true; scrollRect.horizontal = false; break; case Direction.Vertical: scrollRect.vertical = false; scrollRect.horizontal = true; break; case Direction.Horizontal | Direction.Vertical: scrollRect.vertical = true; scrollRect.horizontal = true; break; default: break; } if (layer.groups != null) { for (int i = 0; i < layer.groups.Count; i++) { GroupNode child = layer.groups[i]; string childLowerName = child.Name; UGUINode c_Node = ctrl.DrawLayer(child, childNode); if (childLowerName.StartsWith("c_")) { scrollRect.content = c_Node.InitComponent <RectTransform>(); } else if (childLowerName.StartsWith("vb_")) { scrollRect.verticalScrollbar = c_Node.InitComponent <Scrollbar>(); scrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHide; } else if (childLowerName.StartsWith("hb_")) { scrollRect.horizontalScrollbar = c_Node.InitComponent <Scrollbar>(); scrollRect.horizontalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHide; } } } return(node); }
public UGUINode DrawLayer(GroupNode layer, UGUINode parent) { UGUINode node = PSDImportUtility.InstantiateItem(GroupType.DROPDOWN, layer.Name, parent); Dropdown dropdown = node.InitComponent <Dropdown>(); ScrollRect scrllRect = dropdown.template.GetComponent <ScrollRect>(); RectTransform content = scrllRect.content; Toggle toggle = content.GetComponentInChildren <Toggle>(); UGUINode childNode = new UGUINode(dropdown.template, node); childNode.transform.SetParent(PSDImportUtility.canvas.transform); childNode.anchoType = AnchoType.Down | AnchoType.XStretch; //由于设置相对坐标需要,所以修改了部分预制体的状态 childNode.ReprocessEvent = () => { RectTransform rt = childNode.InitComponent <RectTransform>(); rt.pivot = new Vector2(0.5f, 1); rt.anchoredPosition = Vector3.zero; }; for (int i = 0; i < layer.images.Count; i++) { ImgNode image = layer.images[i]; string lowerName = image.Name.ToLower(); if (lowerName.StartsWith("b1_")) { PSDImportUtility.SetPictureOrLoadColor(image, dropdown.image); PSDImportUtility.SetRectTransform(image, dropdown.GetComponent <RectTransform>()); dropdown.name = layer.Name; } else if (lowerName.StartsWith("b2_")) { PSDImportUtility.SetPictureOrLoadColor(image, dropdown.template.GetComponent <Graphic>()); PSDImportUtility.SetRectTransform(image, dropdown.template); } else if (lowerName.StartsWith("b3_")) { UnityEngine.UI.Image itemimage = (UnityEngine.UI.Image)toggle.targetGraphic; PSDImportUtility.SetPictureOrLoadColor(image, itemimage); content.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, image.rect.height); } else if (lowerName.StartsWith("t1_")) { PSDImportUtility.SetPictureOrLoadColor(image, dropdown.captionText); } else if (lowerName.StartsWith("t2_")) { PSDImportUtility.SetPictureOrLoadColor(image, dropdown.itemText); } else if (lowerName.StartsWith("m_")) { UnityEngine.UI.Image mask = (UnityEngine.UI.Image)toggle.graphic; PSDImportUtility.SetPictureOrLoadColor(image, mask); } else { ctrl.DrawImage(image, node); } } for (int i = 0; i < layer.groups.Count; i++) { GroupNode child = layer.groups[i] as GroupNode; string lowerName = child.Name; if (lowerName.StartsWith("vb_")) { UGUINode barNode = ctrl.DrawLayer(child, childNode); scrllRect.verticalScrollbar = barNode.InitComponent <Scrollbar>(); scrllRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHide; } else { ctrl.DrawLayer(child, node); } } return(node); }