Esempio n. 1
0
        public static UINode CreateImage(Layer layer, bool isTexture = false)
        {
            Layer imgLayer = layer;

            foreach (var child in layer.Children)
            {
                if (!child.IsTextLayer && !PsdUtils.IsGroupLayer(child))
                {
                    imgLayer = child;
                    break;
                }
            }

            layer.Children.Remove(imgLayer);
            float width  = imgLayer.Rect.width;
            float height = imgLayer.Rect.height;

            GameObject    go = new GameObject(layer.Name);
            RectTransform goRectTransform = go.AddComponent <RectTransform>();

            goRectTransform.sizeDelta = new Vector2(width, height);
            if (!isTexture)
            {
                Image img = go.AddComponent <Image>();
                PsdImporter.CreateSprite(imgLayer, img);
                if (imgLayer.Is9Slice)
                {
                    img.type = Image.Type.Sliced;
                }
            }
            else
            {
                RawImage img = go.AddComponent <RawImage>();
                img.texture = PsdImporter.CreateTexture2D(imgLayer);
            }

            SetAnchor(goRectTransform, layer.Name);
            UINode node = new UINode();

            node.rect = imgLayer.Rect;
            node.Go   = go;
            PsdUtils.SetNodeName(node, go.name);
            return(node);
        }
Esempio n. 2
0
        public static UINode CreateProgress(Layer layer)
        {
            Direction direction = Direction.LeftToRight;

            if (layer.Name.ContainsIgnoreCase(RIGHT2LEFT))
            {
                direction = Direction.RightToLeft;
            }
            else if (layer.Name.ContainsIgnoreCase(TOP2BUTTOM))
            {
                direction = Direction.TopToButtom;
            }
            else if (layer.Name.ContainsIgnoreCase(BUTTOM2TOP))
            {
                direction = Direction.ButtomToTop;
            }

            Layer fgLayer = null;
            Layer bgLayer = null;

            foreach (var child in layer.Children)
            {
                if (!child.IsTextLayer && !PsdUtils.IsGroupLayer(child))
                {
                    if (child.Name.ContainsIgnoreCase("@fg"))
                    {
                        fgLayer = child;
                    }
                    if (child.Name.ContainsIgnoreCase("@bg"))
                    {
                        bgLayer = child;
                    }
                }
            }
            if (fgLayer == null)
            {
                Debug.LogError("progress can't find @fg");
                return(null);
            }

            //GameObject go
            GameObject progressGo = new GameObject(layer.Name);

            float         width         = fgLayer.Rect.width;
            float         height        = fgLayer.Rect.height;
            RectTransform rectTransform = progressGo.AddComponent <RectTransform>();

            rectTransform.sizeDelta = new Vector2(width, height);

            GameObject    fgGo            = new GameObject("Foreground");
            RectTransform fgRectTransform = fgGo.AddComponent <RectTransform>();
            Image         fgImage         = fgGo.AddComponent <Image>();

            fgRectTransform.sizeDelta = new Vector2(width, height);
            PsdImporter.CreateSprite(fgLayer, fgImage);

            GameObject    maskGo            = new GameObject("Mask");
            RectTransform maskRectTransform = maskGo.AddComponent <RectTransform>();
            Image         maskImg           = maskGo.AddComponent <Image>();

            maskGo.AddComponent <UnityEngine.UI.Mask>();
            maskRectTransform.sizeDelta = new Vector2(width, height);
            //maskImg.sprite = Resources.Load<Sprite>("unity_builtin_extra/UIMask");
            maskImg.color = new Color(1, 1, 1, 0.01f);

            GameObject    bgGo;
            RectTransform bgRectTransform = null;

            if (bgLayer != null)
            {
                float bgWidth  = bgLayer.Rect.width;
                float bgHeight = bgLayer.Rect.height;

                bgGo            = new GameObject("Background");
                bgRectTransform = bgGo.AddComponent <RectTransform>();
                Image bgImage = bgGo.AddComponent <Image>();
                bgRectTransform.sizeDelta = new Vector2(bgWidth, bgHeight);
                PsdImporter.CreateSprite(bgLayer, bgImage);
                bgRectTransform.SetParent(rectTransform);
                bgRectTransform.localPosition = Vector3.zero;
                layer.Children.Remove(bgLayer);
            }



            Vector2 pivotOrAnchor = Vector2.zero;

            switch (direction)
            {
            case Direction.LeftToRight: pivotOrAnchor = new Vector2(0, 0.5f); break;

            case Direction.RightToLeft: pivotOrAnchor = new Vector2(1, 0.5f); break;

            case Direction.TopToButtom: pivotOrAnchor = new Vector2(0.5f, 1); break;

            case Direction.ButtomToTop: pivotOrAnchor = new Vector2(0.5f, 0); break;
            }


            maskRectTransform.SetParent(rectTransform);
            maskRectTransform.localPosition = new Vector3((pivotOrAnchor.x - 0.5f) * fgLayer.Rect.width, (pivotOrAnchor.y - 0.5f) * fgLayer.Rect.height, 0);

            fgRectTransform.SetParent(maskRectTransform);
            fgRectTransform.localPosition = Vector3.zero;

            maskRectTransform.pivot   = pivotOrAnchor;
            fgRectTransform.pivot     = pivotOrAnchor;
            fgRectTransform.anchorMax = pivotOrAnchor;
            fgRectTransform.anchorMin = pivotOrAnchor;

            layer.Children.Remove(fgLayer);

            SetAnchor(rectTransform, layer.Name);

            UINode node = new UINode();

            node.rect = fgLayer.Rect;
            node.Go   = progressGo;
            PsdUtils.SetNodeName(node, progressGo.name);
            return(node);
        }