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