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