[UE5] Slate 커스터마이징 기초
1. Slate 란?
슬레이트(Slate)란 언리얼 엔진에서 제공하는 UI 프레임워크로 슬레이트를 통해서 언리언 엔진의 에디터는 만들어져 있습니다.
에디터 상에서 표시되는 버튼, 텍스트, 표시 등 모든 것이 이 슬레이트 기반으로 이루어져 있는 것입니다.
1. C++ 코드 기반 프레임워크 슬레이트는 블루프린트로는 만들 수 없고 C++로 작성됩니다.
그리고 C++을 기반으로 하고 연산자를 추가적으로 정의하는 등 언리얼에서 추가적으로 슬레이트 작성을 위한 C++문법을 추가적으로 제공하고 있습니다.
2. 기획자와 디자이너의 작업 편의성을 위해 UMG 가 나왔지만 이 UMG 또한 내부로는 슬레이트로 작성되어 있습니다.
계층 구조 Tree 와 같은 구조로 계층 구조를 이루고 있습니다.
그래서 UI 는 복수의 UI 를 자식으로 계층 구조를 자유롭게 이룰 수 있고 이 구조를 통해서 각 UI 간의 간격을 조정한다던지 등의 작업을 진행할 수 있습니다.
3. 스마트 포인터로 메모리관리 플레이트는 레프카운트 기반의 스마트 포인터로 관리됩니다.
언리얼 엔진에서는 UObject 를 상속받는 객체들을 추적해서 가비지 컬렉션을 진행하지만 슬레이트로 만들어진 객체들은 이 가비지 컬렉션에서 제외됩니다
2. 위젯
슬레이트의 대표적인 widget 의 종류입니다.
SWidget 이라는 가장 베이스 클래스가 있고 그 클래스를 상속받은 Leaf Widget, Panel Widget, Compound Widget 이 있습니다
1. Leaf Widget
슬롯이 없어서 자식을 붙일 수 없는 위젯으로 겉으로 화면에 렌더링되는 위젯입니다.
예로 STextBox 는 텍스트를 표시하는 위젯으로 자식을 붙일 수 없습니다.
2. Pannel Widget
레이아웃을 정의하기 위한 위젯으로 슬롯(자손)이 가변적입니다.
3. Compound Widget
슬롯이 하나인 위젯. 커스텀 위젯의 Root 가 되는 위젯입니다.
위젯의 대부분은 Compound Widget 을 상속받고 그 기반으로 확장하는 형태가 될 것입니다
3. SWidget 주요 함수
슬레이트 작업을 진행하기에 앞서 알아두면 좋을 3 가지 함수가 있습니다.
모든 위젯들이 상속받는 SWidget.h 에 선언되어있는 함수들입니다.
1. Construct()
Slate 는 기본적으로 C++에서 제공하는 new 를 사용하지 않고 SNew()를 통해 슬레이트 객체를 생성합니다. SNew()가 호출될 때 Construct()함수가 호출됩니다.
2. ComputeDesiredSize()
위젯의 크기를 반환하는 ComouteDesiredSize()입니다.
순수 가상함수로 파생 클래스에서는 반드시 구현해주어야하는 함수입니다.
예를 들어서 아래와 같이 왼쪽/중앙.오른쪽 정렬하는 기능이 있을텐데 기능이 사용될 때 ComouteDesiredSize()로 반환된 위젯의 크기를 기준으로 실행됩니다.
3. OnPaint()
렌더링을 하기 위해 필요한 함수로, 파생클래스에서는 이 함수를 오버라이딩 해서 어떤 방식으로 화면상에 그릴지 정의 해주어야 합니다