안녕하세요.
이번에는 RectTransform의 사이즈를 적정 사이즈로 만드는 방법을 적어볼까 합니다.
제목에는 어떻게 적어야할지 몰라서 "적정 사이즈"라고 적었는데, 최소 사이즈(MinSize)나 추천 사이즈(PreferredSize) 정도로 생각해주시면 될 것 같습니다.
방법 1. ContentSizeFitter 컴포넌트
가장 쉽고 편한 방법입니다.
Text, Image, RawImage 컴포넌트와 같이 Graphic을 상속받는 컴포넌트들이나, LayoutGroup 컴포넌트들 및 LayoutGroupElement 컴포넌트에 따라 크기가 설정됩니다.
정확히는 ILayoutElement 인터페이스를 상속받는 UI 컴포넌트들은 다 적용된다고 보시면 됩니다.
좀 더 디테일한 정보는 매뉴얼을 살펴보시면 됩니다.
https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/script-ContentSizeFitter.html
Content Size Fitter | Unity UI | 1.0.0
Content Size Fitter Properties Property: Function: Horizontal Fit How the width is controlled. Unconstrained Do not drive the width based on the layout element. Min Size Drive the width based on the minimum width of the layout element.
docs.unity3d.com
방법 2. LayoutUtility 사용
ContentSizeFitter 컴포넌트는 추가하면 자동으로 맞춰주어서 편하지만 원하는 갱신 시점에 갱신할 수 없다는 게 가장 큰 문제입니다.
특히나 복잡하게 LayoutGroup, LayoutGroupElement 컴포넌트들이 섞여있다면 정상적으로 동작하지 않을 수 있습니다.
namespace UnityEngine.UI
{
public static class LayoutUtility
{
public static float GetFlexibleHeight(RectTransform rect);
public static float GetFlexibleSize(RectTransform rect, int axis);
public static float GetFlexibleWidth(RectTransform rect);
public static float GetLayoutProperty(RectTransform rect, Func<ILayoutElement, float> property, float defaultValue);
public static float GetLayoutProperty(RectTransform rect, Func<ILayoutElement, float> property, float defaultValue, out ILayoutElement source);
public static float GetMinHeight(RectTransform rect);
public static float GetMinSize(RectTransform rect, int axis);
public static float GetMinWidth(RectTransform rect);
public static float GetPreferredHeight(RectTransform rect);
public static float GetPreferredSize(RectTransform rect, int axis);
public static float GetPreferredWidth(RectTransform rect);
}
}
방법은 제목처럼 LayoutUtility를 사용하면 됩니다.
ContentSizeFitter 내부 코드에서도 LayoutUtility를 사용하고 있습니다.
var minWidth = LayoutUtility.GetMinSize(rectTransform, (int)RectTransform.Axis.Horizontal);
var minWidth2 = LayoutUtility.GetMinWidth(rectTransform);
var preferredWidth = UnityEngine.UI.LayoutUtility.GetPreferredSize(rectTransform, (int)RectTransform.Axis.Horizontal);
var preferredWidth2 = UnityEngine.UI.LayoutUtility.GetPreferredWidth(rectTransform);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, minWidth);
실제 사용은 이렇게 값을 불러와서 설정해주면 됩니다.
여러 값을 불러온건 예시이니 필요한 값만 불러와서 사용하면 됩니다.
'Unity Tips' 카테고리의 다른 글
Unity Entities - Job에서 EntityManager, EntityCommandBuffer 사용 방법 (0) | 2023.07.04 |
---|---|
Unity Entities - System에서 Collections(NativeArray, NativeList ...) Dispose함수를 Job 이후에 실행하는 방법 (0) | 2023.07.04 |
Unity UI LayoutGroup 강제 갱신 (1) | 2022.10.03 |
Unity에서 패치 다운로드 만들기 4편 - 다른 스레드 이용하여 만들기 (0) | 2022.05.08 |
Unity에서 패치 다운로드 만들기 3편 - 패치 UI 만들기 (0) | 2022.05.07 |