示例#1
0
        /*
         * protected void CreateUiGameObject(RenderContext renderContext, [CanBeNull] ref GameObject selfObject, GameObject parentObject)
         * {
         *  selfObject = new GameObject(name);
         *  selfObject.AddComponent<RectTransform>();
         *  ElementUtil.SetLayer(selfObject, Layer);
         *  if (Active != null) selfObject.SetActive(Active.Value);
         * }
         */

        /// <summary>
        ///     Objectの生成か再利用 親子関係の設定、Layer、Activeの設定
        /// </summary>
        /// <param name="renderContext"></param>
        /// <param name="selfObject"></param>
        /// <param name="parentObject"></param>
        /// <returns></returns>
        protected void GetOrCreateSelfObject(RenderContext renderContext, ref GameObject selfObject,
                                             GameObject parentObject)
        {
            // 指定のオブジェクトがある場合は生成・取得せずそのまま使用する
            if (selfObject == null)
            {
                selfObject = ElementUtil.GetOrCreateGameObject(renderContext, Guid, name, parentObject);
            }

            var rect = ElementUtil.GetOrAddComponent <RectTransform>(selfObject);

            if (parentObject)
            {
                var nearestPrefabInstanceRoot = PrefabUtility.GetNearestPrefabInstanceRoot(selfObject);
                if (nearestPrefabInstanceRoot == null)
                {
                    // 子供の並び順を整えるため、親からはずしまたくっつける
                    rect.SetParent(null);
                    rect.SetParent(parentObject.transform);
                }

                if (rect.parent == null)
                {
                    Debug.LogError("使用されないオブジェクトが作成された");
                }
            }

            if (renderContext.OptionAddXdGuidComponent)
            {
                ElementUtil.SetGuid(selfObject, Guid);
            }
            ElementUtil.SetActive(selfObject, Active);
            ElementUtil.SetLayer(selfObject, Layer);
        }
        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);
        }