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);

            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);
        }