public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);
            var rect = targetObject.GetComponent <RectTransform>();

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

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject,
                                    RenderContext renderContext,
                                    GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var graphic = targetObject.GetComponent <Graphic>() as Component;

            if (graphic != null)
            {
                // Groupには、描画コンポーネントは必要ない Graphicコンポーネントがある 削除する
                // オフにする手もあるかもだが、のちのSetupComponentsとぶつかる可能性あり
                // Debug.LogWarning($"[{Importer.NAME}] {graphic.gameObject.name}: Graphic Component change to {typeof(T)}.", go);
                Object.DestroyImmediate(graphic);
            }
            var canvasRenderer = targetObject.GetComponent <CanvasRenderer>();

            if (canvasRenderer != null)
            {
                Object.DestroyImmediate(canvasRenderer);
            }

            RenderedChildren = RenderChildren(renderContext, targetObject);
            ElementUtil.SetupCanvasGroup(targetObject, CanvasGroup);
            ElementUtil.SetupChildImageComponent(targetObject, RenderedChildren);
            ElementUtil.SetupFillColor(targetObject, FillColorJson);
            ElementUtil.SetupContentSizeFitter(targetObject, ContentSizeFitterJson);
            ElementUtil.SetupLayoutGroup(targetObject, LayoutGroupJson);
            ElementUtil.SetupLayoutElement(targetObject, LayoutElementJson);
            ElementUtil.SetupComponents(targetObject, ComponentsJson);
            ElementUtil.SetupMask(targetObject, MaskJson);
            ElementUtil.SetupRectMask2D(targetObject, RectMask2D);
            // ScrollRectを設定した時点で、はみでたContentがアジャストされる PivotがViewport内に入っていればOK
            GameObject goContent = null;

            if (RenderedChildren.Count > 0)
            {
                goContent = RenderedChildren[0].Item1;
            }
            ElementUtil.SetupScrollRect(targetObject, goContent, ScrollRectJson);
            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            ElementUtil.SetLayer(targetObject, Layer);
            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);

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

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

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

            goContent.transform.SetParent(targetObject.transform);

            if (_contentJson != null)
            {
                goContent.name = _contentJson.Get("name") ?? "";
                var rectJson = _contentJson.GetDic("rect_transform");
                if (rectJson != null)
                {
                    ElementUtil.SetupRectTransform(goContent, rectJson);
                }

                var contentLayout = _contentJson.GetDic("layout");
                ElementUtil.SetupLayoutGroup(goContent, contentLayout);

                var contentSizeFitter = _contentJson.GetDic("content_size_fitter");
                ElementUtil.SetupContentSizeFitter(goContent, contentSizeFitter);
            }

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

            ElementUtil.SetupRectMask2D(targetObject, RectMask2D);
            // ScrollRectを設定した時点ではみでたContentがアジャストされる PivotがViewport内に入っていればOK
            ElementUtil.SetupScrollRect(targetObject, goContent, _scrollRectJson);
        }
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var children = RenderChildren(renderContext, targetObject);

            var inputField = ElementUtil.GetOrAddComponent <InputField>(targetObject);

            inputField.transition = Selectable.Transition.None;
            if (InputJson != null)
            {
                var textComponent =
                    ElementUtil.FindComponentByClassName <Text>(children, InputJson.Get("text_component_class"));
                if (textComponent != null)
                {
                    inputField.textComponent = textComponent;
                    if (!textComponent.gameObject.activeSelf)
                    {
                        textComponent.gameObject.SetActive(true);
                    }
                }

                var placeholderText =
                    ElementUtil.FindComponentByClassName <Graphic>(children, InputJson.Get("placeholder_class"));
                if (placeholderText != null)
                {
                    inputField.placeholder = placeholderText;
                }

                var targetGraphic =
                    ElementUtil.FindComponentByClassName <Text>(children, InputJson.Get("target_graphic_class"));
                if (targetGraphic != null)
                {
                    inputField.targetGraphic = targetGraphic;
                }
            }

            ElementUtil.SetLayer(targetObject, Layer);
            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var rect = targetObject.GetComponent <RectTransform>();

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

            var message  = _textJson.Get("text");
            var fontName = _textJson.Get("font");
            var fontSize = _textJson.GetFloat("size");
            var align    = _textJson.Get("align");
            var type     = _textJson.Get("textType");

            var text = ElementUtil.GetOrAddComponent <Text>(targetObject);

            if (text != null)
            {
                // 検索するフォント名を決定する
                var fontFilename = fontName;

                if (_textJson.ContainsKey("style"))
                {
                    var style = _textJson.Get("style");
                    fontFilename += "-" + style;
                    if (style.Contains("normal") || style.Contains("medium"))
                    {
                        text.fontStyle = FontStyle.Normal;
                    }

                    if (style.Contains("bold"))
                    {
                        text.fontStyle = FontStyle.Bold;
                    }
                }

                text.fontSize = Mathf.RoundToInt(fontSize.Value);
                text.font     = renderContext.GetFont(fontFilename);

                text.text  = message;
                text.color = Color.black;

                var color = _textJson.Get("color");
                text.color = color != null?EditorUtil.HexToColor(color) : Color.black;

                text.verticalOverflow = VerticalWrapMode.Truncate;

                if (type == "point")
                {
                    text.horizontalOverflow = HorizontalWrapMode.Overflow;
                    text.verticalOverflow   = VerticalWrapMode.Overflow;
                }
                else if (type == "paragraph")
                {
                    text.horizontalOverflow = HorizontalWrapMode.Wrap;
                    text.verticalOverflow   = VerticalWrapMode.Overflow;
                }
                else
                {
                    Debug.LogError("unknown type " + type);
                }

                var vertical         = "";
                var horizontal       = "";
                var alignLowerString = align.ToLower();
                if (alignLowerString.Contains("left"))
                {
                    horizontal = "left";
                }
                else if (alignLowerString.Contains("center"))
                {
                    horizontal = "center";
                }
                else if (alignLowerString.Contains("right"))
                {
                    horizontal = "right";
                }

                if (alignLowerString.Contains("upper"))
                {
                    vertical = "upper";
                }
                else if (alignLowerString.Contains("middle"))
                {
                    vertical = "middle";
                }
                else if (alignLowerString.Contains("lower"))
                {
                    vertical = "lower";
                }

                switch ((vertical + "-" + horizontal).ToLower())
                {
                case "upper-left":
                    text.alignment = TextAnchor.UpperLeft;
                    break;

                case "upper-center":
                    text.alignment = TextAnchor.UpperCenter;
                    break;

                case "upper-right":
                    text.alignment = TextAnchor.UpperRight;
                    break;

                case "middle-left":
                    text.alignment = TextAnchor.MiddleLeft;
                    break;

                case "middle-center":
                    text.alignment = TextAnchor.MiddleCenter;
                    break;

                case "middle-right":
                    text.alignment = TextAnchor.MiddleRight;
                    break;

                case "lower-left":
                    text.alignment = TextAnchor.LowerLeft;
                    break;

                case "lower-center":
                    text.alignment = TextAnchor.LowerCenter;
                    break;

                case "lower-right":
                    text.alignment = TextAnchor.LowerRight;
                    break;
                }
            }

            if (_textJson.ContainsKey("strokeSize"))
            {
                var strokeSize  = _textJson.GetInt("strokeSize");
                var strokeColor = EditorUtil.HexToColor(_textJson.Get("strokeColor"));
                var outline     = ElementUtil.GetOrAddComponent <Outline>(targetObject);
                outline.effectColor     = strokeColor;
                outline.effectDistance  = new Vector2(strokeSize.Value / 2.0f, -strokeSize.Value / 2.0f);
                outline.useGraphicAlpha = false;
            }

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);

            var children = RenderChildren(renderContext, targetObject);

            ElementUtil.SetupChildImageComponent(targetObject, children);

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

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

            var direction = _scrollbarJson.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 = _scrollbarJson.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(targetObject, ContentSizeFitterJson);
        }
Exemple #7
0
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var slider = ElementUtil.GetOrAddComponent <Slider>(targetObject);

            var children = RenderChildren(renderContext, targetObject);

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

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

                case "right-to-left":
                case "rtl":
                    slider.direction = Slider.Direction.RightToLeft;
                    break;

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

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

            slider.transition = Selectable.Transition.None;
            //slider.interactable = false;

            var fillRect =
                ElementUtil.FindComponentByClassName <RectTransform>(children, _sliderJson.Get("fill_rect_name"));

            if (fillRect != null)
            {
                slider.value    = slider.maxValue;
                slider.fillRect = fillRect;
            }

            var handleRect =
                ElementUtil.FindComponentByClassName <RectTransform>(children, _sliderJson.Get("handle_rect_name"));

            if (handleRect != null)
            {
                slider.handleRect   = handleRect;
                slider.interactable = true;
            }

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var rect = targetObject.GetComponent <RectTransform>();

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

            var image = ElementUtil.GetOrAddComponent <Image>(targetObject);

            if (image != null)
            {
                image = ElementUtil.GetOrAddComponent <Image>(targetObject);
                var sourceImageName = ImageJson.Get("source_image");
                if (sourceImageName != null)
                {
                    var sprite = renderContext.GetSprite(sourceImageName);
                    image.sprite = sprite;
                }

                image.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);
                var raycastTarget = ImageJson.GetBool("raycast_target");
                if (raycastTarget != null)
                {
                    image.raycastTarget = raycastTarget.Value;
                }

                image.type = Image.Type.Sliced;
                var imageType = ImageJson.Get("image_type");
                if (imageType != null)
                {
                    switch (imageType.ToLower())
                    {
                    case "sliced":
                        image.type = Image.Type.Sliced;
                        break;

                    case "filled":
                        image.type = Image.Type.Filled;
                        break;

                    case "tiled":
                        image.type = Image.Type.Tiled;
                        break;

                    case "simple":
                        image.type = Image.Type.Simple;
                        break;

                    default:
                        Debug.LogAssertion($"[{Importer.NAME}] unknown image_type:" + imageType);
                        break;
                    }
                }

                var preserveAspect = ImageJson.GetBool("preserve_aspect");
                if (preserveAspect != null)
                {
                    // アスペクト比を保つ場合はSimpleにする
                    // image.type = Image.Type.Simple;
                    image.preserveAspect = preserveAspect.Value;
                }
            }


            ElementUtil.SetupLayoutElement(targetObject, LayoutElementJson);
            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
Exemple #9
0
        //public override GameObject Render(RenderContext renderer, GameObject parentObject)
        public override void Render(ref GameObject targetObject, RenderContext renderContext,
                                    GameObject parentObject)
        {
            // var go = CreateUiGameObject(renderContext, parentObject, out isPrefabChild);
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);


            var rect = targetObject.GetComponent <RectTransform>();

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

            var message   = _textJson.Get("text");
            var fontName  = _textJson.Get("font");
            var fontStyle = _textJson.Get("style");
            var fontSize  = _textJson.GetFloat("size");
            var align     = _textJson.Get("align");
            var type      = _textJson.Get("textType");

            var text = ElementUtil.GetOrAddComponent <TextMeshProUGUI>(targetObject);

            text.font     = renderContext.GetTMPFontAsset(fontName, fontStyle);
            text.text     = message;
            text.fontSize = fontSize.Value;

            // 自動的に改行されることが困ることもあるが、挙動としてはこちらのほうがXDに沿うことになる
            if (text.textInfo != null && text.textInfo.textComponent != null)
            {
                text.textInfo.textComponent.enableWordWrapping = true;
            }
            else
            {
                // Essential がインストールしてない場合に NULLになる可能性
                Debug.LogError("[{Importer.Name}] Can not access text.textInfo.textComponent");
            }

            var color = _textJson.Get("color");

            if (color != null)
            {
                text.color = EditorUtil.HexToColor(color);
            }

            // BAUM2からTextMeshProへの変換を行うと少し横にひろがってしまうことへの対応
            // text.textInfo.textComponent.characterSpacing = -1.7f; // 文字幅を狭める

            var middle = true;

            if (type == "point")
            {
                text.horizontalMapping = TextureMappingOptions.Line;
                text.verticalMapping   = TextureMappingOptions.Line;
                middle = true;
            }
            else if (type == "paragraph")
            {
                text.horizontalMapping = TextureMappingOptions.Paragraph;
                text.verticalMapping   = TextureMappingOptions.Line;
                if (align.Contains("upper"))
                {
                    middle = false;
                }
                else
                {
                    middle = !message.Contains("\n");
                }
            }
            else
            {
                Debug.LogError("unknown type " + type);
            }

            // var fixedPos = rect.anchoredPosition;
            if (align.Contains("left"))
            {
                text.alignment = middle ? TextAlignmentOptions.MidlineLeft : TextAlignmentOptions.TopLeft;
            }
            else if (align.Contains("center"))
            {
                text.alignment = middle ? TextAlignmentOptions.Midline : TextAlignmentOptions.Top;
            }
            else if (align.Contains("right"))
            {
                text.alignment = middle ? TextAlignmentOptions.MidlineRight : TextAlignmentOptions.TopRight;
            }

            if (_textJson.ContainsKey("strokeSize"))
            {
                var strokeSize  = _textJson.GetInt("strokeSize");
                var strokeColor = EditorUtil.HexToColor(_textJson.Get("strokeColor"));
                var outline     = ElementUtil.GetOrAddComponent <Outline>(targetObject);
                outline.effectColor     = strokeColor;
                outline.effectDistance  = new Vector2(strokeSize.Value / 2.0f, -strokeSize.Value / 2.0f);
                outline.useGraphicAlpha = false;
            }

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
Exemple #10
0
        public override void Render(ref GameObject targetObject, RenderContext renderContext, GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var children = RenderChildren(renderContext, targetObject);

            var toggle = ElementUtil.GetOrAddComponent <Toggle>(targetObject);

            // トグルグループ名
            var group = _toggleJson.Get("group");

            if (group != null)
            {
                var toggleToRadio = ElementUtil.GetOrAddComponent <ToggleToRadio>(targetObject);
                toggleToRadio.GroupName = group;
            }

            GameObject targetImageObject = null;
            var        targetGraphics    = _toggleJson.GetArray("target_graphic").Select(o => o.ToString()).ToList();
            var        targetImage       =
                ElementUtil.FindComponentByNames <Image>(children, targetGraphics);

            if (targetImage != null)
            {
                toggle.targetGraphic = targetImage;
                targetImageObject    = targetImage.gameObject;
                //TODO: 強制的にActiveにする
                targetImageObject.SetActive(true);
            }

            // ON graphic
            var onGraphics   = _toggleJson.GetArray("on_graphic").Select(o => o.ToString()).ToList();
            var graphicImage = ElementUtil.FindComponentByNames <Image>(children, onGraphics);

            if (graphicImage != null)
            {
                toggle.graphic = graphicImage;
                if (graphicImage.gameObject.activeSelf)
                {
                    toggle.isOn = true;
                }
                else
                {
                    //TODO: 強制的にActiveにする
                    graphicImage.gameObject.SetActive(true);
                }
            }

            // ON/OFF が画像の入れ替えとして動作するコンポーネント
            var graphicSwap = _toggleJson.GetBool("graphic_swap");

            if (graphicSwap != null && graphicSwap.Value)
            {
                ElementUtil.GetOrAddComponent <ToggleGraphicSwap>(targetObject);
            }

            var deleteObjects   = new Dictionary <GameObject, bool>();
            var spriteStateJson = _toggleJson.GetDic("sprite_state");

            if (spriteStateJson != null)
            {
                var spriteState = ElementUtil.CreateSpriteState(spriteStateJson, RenderedChildren, ref deleteObjects);
                toggle.spriteState = spriteState;
            }

            foreach (var keyValuePair in deleteObjects)
            {
                // 他の状態にtargetImageの画像が使われている可能性もあるためチェックする
                if (keyValuePair.Key != targetImageObject)
                {
                    Object.DestroyImmediate(keyValuePair.Key);
                }
            }


            ElementUtil.SetupLayoutElement(targetObject, LayoutElementJson);
            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
        }
        public override void Render(ref GameObject targetObject,
                                    RenderContext renderContext,
                                    GameObject parentObject)
        {
            GetOrCreateSelfObject(renderContext, ref targetObject, parentObject);

            var children      = RenderChildren(renderContext, targetObject);
            var deleteObjects = new Dictionary <GameObject, bool>();

            var button = ElementUtil.GetOrAddComponent <Button>(targetObject);


            GameObject targetImageObject = null;

            if (ButtonJson != null)
            {
                var targetGraphics = ButtonJson.GetArray("target_graphic").Select(o => o.ToString()).ToList();
                var targetImage    =
                    ElementUtil.FindComponentByNames <Image>(children, targetGraphics);
                if (targetImage != null)
                {
                    button.targetGraphic = targetImage;
                    targetImageObject    = targetImage.gameObject;
                    targetImageObject.SetActive(true);
                }

                // すげ替え画像を探し、設定する
                // 見つかった場合は
                // その画像オブジェクトを削除し
                // SpriteSwapに設定する
                var spriteStateJson = ButtonJson.GetDic("sprite_state");
                if (spriteStateJson != null)
                {
                    var spriteState =
                        ElementUtil.CreateSpriteState(spriteStateJson, RenderedChildren, ref deleteObjects);
                    button.spriteState = spriteState;
                }

                // transitionの設定が明記してある場合は上書き設定する
                var type = ButtonJson.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;
                }
            }

            foreach (var keyValuePair in deleteObjects)
            {
                // 他の状態にtargetImageの画像が使われている可能性もあるためチェックする
                if (keyValuePair.Key != targetImageObject)
                {
                    Object.DestroyImmediate(keyValuePair.Key);
                }
            }

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

                var image = targetObject.GetComponentInChildren <Image>();
                if (image != null)
                {
                    // アクティブにする
                    image.gameObject.SetActive(true);
                }
                else
                {
                    // componentでないか探す
                    image = targetObject.GetComponent <Image>();
                }

                button.targetGraphic = image;
            }

            ElementUtil.SetupRectTransform(targetObject, RectTransformJson);
            ElementUtil.SetupLayoutElement(targetObject, LayoutElementJson);
            ElementUtil.SetupComponents(targetObject, ComponentsJson);
        }