public void Apply() { var canvas = uiCanvas.Canvas; var canvasScaler = UnityUtility.GetComponent <CanvasScaler>(uiCanvas); Canvas.ForceUpdateCanvases(); var enable = canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize; UnityUtility.SetActive(gameObject, enable); if (!enable) { return; } uiCanvas.ModifyCanvasScaler(); var canvasRectTransform = UnityUtility.GetComponent <RectTransform>(canvas.gameObject); LayoutRebuilder.ForceRebuildLayoutImmediate(canvasRectTransform); var letterBoxSize = new Vector2() { x = (canvasRectTransform.GetWidth() - canvasScaler.referenceResolution.x) * 0.5f, y = (canvasRectTransform.GetHeight() - canvasScaler.referenceResolution.y) * 0.5f, }; var fitVertical = canvasScaler.matchWidthOrHeight == 1; if (statusBar != null) { UnityUtility.SetActive(statusBar.gameObject, 0 < StatusBarHeight); statusBar.sizeDelta = Vector.SetY(statusBar.sizeDelta, StatusBarHeight); } if (top != null) { UnityUtility.SetActive(top.gameObject, !fitVertical); if (!fitVertical) { top.anchorMin = new Vector2(0f, 1f); top.anchorMax = new Vector2(1f, 1f); top.anchoredPosition = Vector2.zero; top.offsetMax = Vector.SetY(top.offsetMax, 0); top.sizeDelta = new Vector2(0f, letterBoxSize.y + StatusBarHeight); } } if (bottom != null) { UnityUtility.SetActive(bottom.gameObject, !fitVertical); if (!fitVertical) { bottom.anchorMin = new Vector2(0f, 0f); bottom.anchorMax = new Vector2(1f, 0f); bottom.anchoredPosition = Vector2.zero; bottom.offsetMax = Vector.SetY(bottom.offsetMax, 0); bottom.sizeDelta = new Vector2(0f, letterBoxSize.y); } } if (left != null) { UnityUtility.SetActive(left.gameObject, fitVertical); if (fitVertical) { left.anchorMin = new Vector2(0f, 0f); left.anchorMax = new Vector2(0f, 1f); left.anchoredPosition = Vector2.zero; left.offsetMax = Vector.SetY(left.offsetMax, 0); left.sizeDelta = new Vector2(letterBoxSize.x, 0f); } } if (right != null) { UnityUtility.SetActive(right.gameObject, fitVertical); if (fitVertical) { right.anchorMin = new Vector2(1f, 0f); right.anchorMax = new Vector2(1f, 1f); right.anchoredPosition = Vector2.zero; right.offsetMax = Vector.SetY(right.offsetMax, 0); right.sizeDelta = new Vector2(letterBoxSize.x, 0f); } } }
private IEnumerator ApplyInternal() { var canvasScaler = UnityUtility.GetComponent <CanvasScaler>(canvas.gameObject); var enable = canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize; UnityUtility.SetActive(gameObject, enable); if (!enable) { yield break; } canvas.ModifyCanvasScaler(); var canvasRectTransform = UnityUtility.GetComponent <RectTransform>(canvas.gameObject); // CanvasScalerの値が適用されない為1フレーム待つ. yield return(null); var letterBoxSize = new Vector2() { x = (canvasRectTransform.GetWidth() - canvasScaler.referenceResolution.x) * 0.5f, y = (canvasRectTransform.GetHeight() - canvasScaler.referenceResolution.y) * 0.5f, }; var fitVertical = canvasScaler.matchWidthOrHeight == 1; if (statusBar != null) { UnityUtility.SetActive(statusBar.gameObject, 0 < StatusBarHeight); statusBar.sizeDelta = Vector.SetY(statusBar.sizeDelta, StatusBarHeight); } if (top != null) { UnityUtility.SetActive(top.gameObject, !fitVertical); if (!fitVertical) { top.anchorMin = new Vector2(0f, 1f); top.anchorMax = new Vector2(1f, 1f); top.anchoredPosition = Vector2.zero; top.offsetMax = Vector.SetY(top.offsetMax, 0); top.sizeDelta = new Vector2(0f, letterBoxSize.y + StatusBarHeight); } } if (bottom != null) { UnityUtility.SetActive(bottom.gameObject, !fitVertical); if (!fitVertical) { bottom.anchorMin = new Vector2(0f, 0f); bottom.anchorMax = new Vector2(1f, 0f); bottom.anchoredPosition = Vector2.zero; bottom.offsetMax = Vector.SetY(bottom.offsetMax, 0); bottom.sizeDelta = new Vector2(0f, letterBoxSize.y); } } if (left != null) { UnityUtility.SetActive(left.gameObject, fitVertical); if (fitVertical) { left.anchorMin = new Vector2(0f, 0f); left.anchorMax = new Vector2(0f, 1f); left.anchoredPosition = Vector2.zero; left.offsetMax = Vector.SetY(left.offsetMax, 0); left.sizeDelta = new Vector2(letterBoxSize.x, 0f); } } if (right != null) { UnityUtility.SetActive(right.gameObject, fitVertical); if (fitVertical) { right.anchorMin = new Vector2(1f, 0f); right.anchorMax = new Vector2(1f, 1f); right.anchoredPosition = Vector2.zero; right.offsetMax = Vector.SetY(right.offsetMax, 0); right.sizeDelta = new Vector2(letterBoxSize.x, 0f); } } }