Example #1
0
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateUIGameObject(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                //親のパラメータがある場合、親にする 後のAnchor定義のため
                rect.SetParent(parentObject.transform);
            }
            var children = RenderChildren(renderContext, go);

            var inputField = go.AddComponent <InputField>();

            inputField.transition = Selectable.Transition.None;
            if (_input != null)
            {
                var textComponent = ElementUtil.FindComponentByClassName <Text>(children, _input.Get("text_component_class"));
                if (textComponent != null)
                {
                    inputField.textComponent = textComponent;
                }
                var placeholderText = ElementUtil.FindComponentByClassName <Graphic>(children, _input.Get("placeholder_class"));
                if (placeholderText != null)
                {
                    inputField.placeholder = placeholderText;
                }
                var targetGraphic = ElementUtil.FindComponentByClassName <Text>(children, _input.Get("target_graphic_class"));
                if (targetGraphic != null)
                {
                    inputField.targetGraphic = targetGraphic;
                }
            }

            SetLayer(go, layer);
            SetAnchor(go, renderContext);

            return(go);
        }
Example #2
0
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateSelf(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                //親のパラメータがある場合、親にする 後のAnchor定義のため
                rect.SetParent(parentObject.transform);
            }

            RenderedChildren = RenderChildren(renderContext, go);
            ElementUtil.SetupCanvasGroup(go, _canvasGroupParam);
            ElementUtil.SetupChildImageComponent(go, RenderedChildren);
            ElementUtil.SetupFillColor(go, FillColorParam);
            ElementUtil.SetupContentSizeFitter(go, ContentSizeFitterParam);
            ElementUtil.SetupLayoutGroup(go, LayoutParam);
            ElementUtil.SetupLayoutElement(go, LayoutElementParam);
            ElementUtil.SetupComponents(go, componentsJson);
            ElementUtil.SetupMask(go, MaskParam);

            SetAnchor(go, renderContext);
            return(go);
        }
Example #3
0
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateSelf(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                //親のパラメータがある場合、親にする 後のAnchor定義のため
                rect.SetParent(parentObject.transform);
            }

            var children = RenderChildren(renderContext, go);

            var toggle = go.AddComponent <Toggle>();

            var targetImage =
                ElementUtil.FindComponentByClassName <Image>(children, _toggleJson.Get("target_graphic_class"));

            if (targetImage != null)
            {
                toggle.targetGraphic = targetImage;
            }

            var graphicImage = ElementUtil.FindComponentByClassName <Image>(children, _toggleJson.Get("graphic_class"));

            if (graphicImage != null)
            {
                toggle.graphic = graphicImage;
            }

            var spriteStateJson = _toggleJson.GetDic("sprite_state");

            if (spriteStateJson != null)
            {
                var spriteState = new SpriteState();
                var image       = ElementUtil.FindComponentByClassName <Image>(children,
                                                                               spriteStateJson.Get("highlighted_sprite_class"));
                if (image != null)
                {
                    spriteState.highlightedSprite = image.sprite;
                    Object.DestroyImmediate(image.gameObject);
                }

                image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                     spriteStateJson.Get("pressed_sprite_class"));
                if (image != null)
                {
                    spriteState.pressedSprite = image.sprite;
                    Object.DestroyImmediate(image.gameObject);
                }

                image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                     spriteStateJson.Get("selected_sprite_class"));
                if (image != null)
                {
#if UNITY_2019_1_OR_NEWER
                    spriteState.selectedSprite = image.sprite;
                    Object.DestroyImmediate(image.gameObject);
#endif
                }

                image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                     spriteStateJson.Get("disabled_sprite_class"));
                if (image != null)
                {
                    spriteState.disabledSprite = image.sprite;
                    Object.DestroyImmediate(image.gameObject);
                }

                toggle.spriteState = spriteState;
            }

            // トグルグループ名
            var group = _toggleJson.Get("group");
            if (group != null)
            {
                var toggleGroup = renderContext.GetToggleGroup(group);
                //Debug.Log("toggleGroup:" + toggleGroup);
                toggle.group = toggleGroup;
            }

            ElementUtil.SetupLayoutElement(go, LayoutElementParam);
            SetAnchor(go, renderContext);

            return(go);
        }
Example #4
0
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateSelf(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                //親のパラメータがある場合、親にする 後のAnchor定義のため
                rect.SetParent(parentObject.transform);
            }

            var children = RenderChildren(renderContext, go);

            var        button            = go.AddComponent <Button>();
            GameObject targetImageObject = null;
            var        deleteObjects     = new Dictionary <GameObject, bool>();

            if (_button != null)
            {
                var type = _button.Get("transition");
                switch (type)
                {
                case "sprite-swap":
                    button.transition = Selectable.Transition.SpriteSwap;
                    break;

                case "color-tint":
                    button.transition = Selectable.Transition.ColorTint;
                    break;

                case "animation":
                    button.transition = Selectable.Transition.Animation;
                    break;

                case "none":
                    button.transition = Selectable.Transition.None;
                    break;

                default:
                    button.transition = Selectable.Transition.ColorTint;
                    break;
                }

                var targetImage =
                    ElementUtil.FindComponentByClassName <Image>(children, _button.Get("target_graphic_class"));
                if (targetImage != null)
                {
                    button.targetGraphic = targetImage;
                    targetImageObject    = targetImage.gameObject;
                }

                var spriteStateJson = _button.GetDic("sprite_state");
                if (spriteStateJson != null)
                {
                    var spriteState = new SpriteState();
                    var image       = ElementUtil.FindComponentByClassName <Image>(children,
                                                                                   spriteStateJson.Get("highlighted_sprite_class"));
                    if (image != null)
                    {
                        spriteState.highlightedSprite   = image.sprite;
                        deleteObjects[image.gameObject] = true;
                    }

                    image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                         spriteStateJson.Get("pressed_sprite_class"));
                    if (image != null)
                    {
                        spriteState.pressedSprite       = image.sprite;
                        deleteObjects[image.gameObject] = true;
                    }

#if UNITY_2019_1_OR_NEWER
                    image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                         spriteStateJson.Get("selected_sprite_class"));
                    if (image != null)
                    {
                        spriteState.selectedSprite      = image.sprite;
                        deleteObjects[image.gameObject] = true;
                    }
#endif

                    image = ElementUtil.FindComponentByClassName <Image>(children,
                                                                         spriteStateJson.Get("disabled_sprite_class"));
                    if (image != null)
                    {
                        spriteState.disabledSprite      = image.sprite;
                        deleteObjects[image.gameObject] = true;
                    }

                    button.spriteState = spriteState;
                }
            }

            foreach (var keyValuePair in deleteObjects)
            {
                if (keyValuePair.Key != targetImageObject)
                {
                    Object.DestroyImmediate(keyValuePair.Key);
                }
            }

            // TargetGraphicが設定されなかった場合
            if (button.targetGraphic == null)
            {
                // 子供からImage持ちを探す

                var image = go.GetComponentInChildren <Image>();
                if (image == null)
                {
                    // componentでないか探す
                    image = go.GetComponent <Image>();
                }

                button.targetGraphic = image;
            }

            SetAnchor(go, renderContext);
            ElementUtil.SetupLayoutElement(go, _layoutElement);
            ElementUtil.SetupComponents(go, componentsJson);
            return(go);
        }
Example #5
0
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateSelf(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                // 親のパラメータがある場合、親にする
                // 後のAnchor設定のため これ以降でないと正確に設定できない
                rect.SetParent(parentObject.transform);
            }

            SetLayer(go, layer);
            SetAnchor(go, renderContext);

            // タッチイベントを取得するイメージコンポーネントになる
            ElementUtil.SetupFillColor(go, FillColorParam);

            // コンテンツ部分を入れるコンテナ
            var goContent = new GameObject("$Content");

            SetLayer(goContent, layer); // Viewportと同じレイヤー
            var contentRect = goContent.AddComponent <RectTransform>();

            goContent.transform.SetParent(go.transform);

            if (_content != null)
            {
                goContent.name = _content.Get("name") ?? "";

                if (_content.ContainsKey("pivot"))
                {
                    // ここのPivotはX,Yでくる
                    contentRect.pivot = _content.GetDic("pivot").GetVector2("x", "y").Value;
                }
                if (_content.ContainsKey("anchor_min"))
                {
                    contentRect.anchorMin = _content.GetDic("anchor_min").GetVector2("x", "y").Value;
                }
                if (_content.ContainsKey("anchor_max"))
                {
                    contentRect.anchorMax = _content.GetDic("anchor_max").GetVector2("x", "y").Value;
                }
                if (_content.ContainsKey("offset_min"))
                {
                    contentRect.offsetMin = _content.GetDic("offset_min").GetVector2("x", "y").Value;
                }
                if (_content.ContainsKey("offset_max"))
                {
                    contentRect.offsetMax = _content.GetDic("offset_max").GetVector2("x", "y").Value;
                }

                if (_content.ContainsKey("layout"))
                {
                    var contentLayout = _content.GetDic("layout");
                    ElementUtil.SetupLayoutGroup(goContent, contentLayout);
                }

                if (_content.ContainsKey("content_size_fitter"))
                {
                    var contentSizeFitter = _content.GetDic("content_size_fitter");
                    var compSizeFitter    = ElementUtil.SetupContentSizeFitter(goContent, contentSizeFitter);
                }
            }

            //Viewportのチャイルドはもとより、content向けのAnchor・Offsetを持っている
            RenderChildren(renderContext, goContent);

            ElementUtil.SetupRectMask2D(go, RectMask2DParam);
            // ScrollRectを設定した時点ではみでたContentがアジャストされる PivotがViewport内に入っていればOK
            ElementUtil.SetupScrollRect(go, goContent, _scrollRect);

            return(go);
        }
        public override GameObject Render(RenderContext renderContext, GameObject parentObject)
        {
            var go   = CreateSelf(renderContext);
            var rect = go.GetComponent <RectTransform>();

            if (parentObject)
            {
                //親のパラメータがある場合、親にする 後のAnchor定義のため
                rect.SetParent(parentObject.transform);
            }

            SetAnchor(go, renderContext);

            var children = RenderChildren(renderContext, go);

            ElementUtil.SetupChildImageComponent(go, children);

            // DotsScrollberかどうかの判定に、Toggleがあるかどうかを確認する
            var       toggleChild = children.Find(child => child.Item2 is ToggleElement);
            Scrollbar scrollbar;

            if (toggleChild == null)
            {
                scrollbar = go.AddComponent <Scrollbar>();
            }
            else
            {
                // DotScrollbarとなる
                var dotScrollbar = go.AddComponent <DotsScrollbar>();
                dotScrollbar.isAutoLayoutEnableOnEditMode = false;
                dotScrollbar.DotContainer = rect;
                dotScrollbar.DotPrefab    = toggleChild.Item1.GetComponent <Toggle>();
                // Toggleボタンの並びレイアウト
                ElementUtil.SetupLayoutGroup(go, LayoutParam);
                dotScrollbar.size = 1; // sizeを1にすることで、Toggleが複数Cloneされることをふせぐ
                scrollbar         = dotScrollbar;
            }

            var direction = _scrollbar.Get("direction");

            if (direction != null)
            {
                switch (direction)
                {
                case "left-to-right":
                case "ltr":
                case "x":
                    scrollbar.direction = Scrollbar.Direction.LeftToRight;
                    break;

                case "right-to-left":
                case "rtl":
                    scrollbar.direction = Scrollbar.Direction.RightToLeft;
                    break;

                case "bottom-to-top":
                case "btt":
                case "y":
                    scrollbar.direction = Scrollbar.Direction.BottomToTop;
                    break;

                case "top-to-bottom":
                case "ttb":
                    scrollbar.direction = Scrollbar.Direction.TopToBottom;
                    break;
                }
            }

            var handleClassName = _scrollbar.Get("handle_class");

            if (handleClassName != null)
            {
                var found = children.Find(child => child.Item2.HasParsedName(handleClassName));
                if (found != null)
                {
                    scrollbar.handleRect = found.Item1.GetComponent <RectTransform>();
                }
            }

            ElementUtil.SetupContentSizeFitter(go, ContentSizeFitterParam);
            return(go);
        }