[Unity] Grid Layout Group 좌우 여백 동적으로 균등하게 맞추기Unity/UI2024. 6. 11. 18:18
Table of Contents
이 글 부터는 다시 독백체로 돌아갑니다
가독성이 그게 더 좋은거 같네요
아래와 같은 Grid Layout Group이 있다
앵커를 수평 Stretch로 맞췄고,
현재 화면 비율에서 좌우 여백을 맞췄다
그리고 화면비율을 바꿔보면 아래 그림처럼 여백이 안맞게된다
모든 화면비율에서 균등한 좌우 여백을 위해 동적으로 계산해서 적용해줘야 한다
코드를 작성했다
당장 범용성보다는 이 케이스를 빨리 해결하기위해 작성한거라
그리드의 Start Corner가 왼쪽 위(Upper Left)인 경우만 고려해서 작성했고,
상하 여백은 고려하지 않았다
추가로, 테스트를 위해 오딘 익스펙터 에셋의 `[Button]`속성을 사용했다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Sirenix.OdinInspector;
[RequireComponent(typeof(GridLayoutGroup))]
public class GridLayoutPaddingCalculator : MonoBehaviour
{
private GridLayoutGroup grid;
private void OnEnable()
{
CalculateHorizontal();
}
[Button]
public void CalculateHorizontal()
{
grid = GetComponent<GridLayoutGroup>();
Vector2 cellSize = grid.cellSize;
Vector2 spacing = grid.spacing;
Vector2 rectSize = (grid.transform as RectTransform).rect.size;
float mod = rectSize.x % (cellSize.x + spacing.x);
RectOffset padding = new RectOffset();
padding.top = grid.padding.top;
padding.bottom = grid.padding.bottom;
Debug.Log("mod: " + mod.ToString());
int horizontalPadding = Mathf.RoundToInt(mod / 2f);
padding.left = (int)(horizontalPadding + (spacing.x / 2f));
grid.padding = padding;
}
}
이제 함수를 호출하면 현재 해상도(정확히는 현재 RectSize)의 맞는
균등한 여백으로 정렬된다
'Unity > UI' 카테고리의 다른 글
[Unity] 스크롤 렉트 스크롤에 따라 Element들 스케일 효과 주기 (0) | 2024.07.01 |
---|---|
[Unity] UI 롱 클릭 이벤트 처리 with UniRx (0) | 2024.06.11 |
[Unity] Button을 상속받아 커스텀하기 (0) | 2023.03.09 |
[Unity] UI드래그로 이동 시킬 때 범위 제한 (0) | 2022.08.29 |
[Unity] 마우스(포인터)가 UI위에 있는지 확인하기 (0) | 2022.05.11 |