🎮Unreal4/C++_Plugin

[UE4] ToolBar 버튼-2 : Style (Icon 추가, FSlateStyleSet, IPluginManager, FSlateImageBrush, FSlateIcon, FSlateStyleRegistry, RegisterSlateStyle)

공대 컴린이 2023. 3. 27. 20:01
728x90

이전 학습에서 ToolBar에 LoadMesh 라는 이름의 버튼을 하나 추가하였다.

 

오늘은 만든 버튼을 다른 ToolBar의 버튼들과 비슷하게 버튼 아이콘을 설정하는 Button Style Set을 구현해보았다.

🎨 버튼 Style Set 생성하기

ExampleStyle.h

버튼의 Style을 설정할 수 있는 ExampleStyle 클래스를 생성하였다.

이 클래스는 싱글톤 형식으로 구성하기 위해 스마트 포인터를 이용한 Instance 객체Get 함수를 생성해주었다.

 

이외에 RegisterIcon 함수는 툴바 버튼에 아이콘을 불러와 설정해주는 기능을 구현한다.

 

FSlateStyleSet 클래스로 만드는 StyleSet 변수는 어떠한 Style들(아이콘, 폰트 등등) 의 모음을 구현할 수 있다.

VisualStudio에도 글꼴, 테마 등의 Style을 가지고 있는것처럼 Slate 에도 스타일을 설정할 수 있는 StyleSet 이 존재하는 것이다.

StyleSetName은 언리얼의 Style을 찾아주는 이름을 저장하는 변수인데, 변수의 접근 지정자가 private임에도 static const로 선언하였다.

 

ExampleStyle.cpp

그 이유는 cpp 파일의 맨 위에 이름을 전방선언하므로 개발자가 보기 편하도록 하기 위함이다. (상수나 이름같은 키워드를 종종 이렇게 저장하면 편하다)

 

ExampleStyle.cpp

Instance 변수는 static이므로 전방선언 해준 뒤, 싱글톤 패턴에 맞도록 Instance가 nullptr이라면 새롭게 생성하고, 아니라면 Instance 객체를 Ref 형식으로 반환해주었다.

 

ShutDown 함수에서는 Instance 객체의 해제를 담당한다.

 

ExampleStyle 클래스의 생성자에선 StyleSet이 어느 폴더에서부터 Resource들을 찾을것인지 경로를 설정해주었다.

 

ModuleManager접근한 객체의 자료형을 전달해주고, IPluginManager객체만을 전달한다.

IPluginManager를 통해 Example 플러그인이 있는 기본 폴더 위치(GetBaseDir)를 얻어왔다.

 

FindPlugin 함수에 들어가는 "Example"은 프로젝트의 uplugin 파일에 저장된 내가 만든 모듈의 이름이다.

 

이렇게 불러온 path프로젝트의 폴더 경로(...Project/Plugin/Example)까지를 나타내므로, Resource 폴더에 접근하기 위해 path를 추가해준다.

이후, Resource 폴더까지 연결된 경로 path를 StyleSet의 Root 경로로 설정해주었다.

 

이후, 찾은 경로에 파란색 직육면체 이미지T_Radial_Local_Space.png를 아이콘으로 설정하기 위해 RegisterIcon 함수를 호출하였다.

🌈 아이콘 생성

InName으로 받아온 "ToolBar_Icon"Style Set에 등록할 각각의 Style 이름을 지정해준 것이다.

InPath 경로를 이용하여 해당 경로에 있는 Image를 FSlateImageBrush에 저장하였다.

저장된 Brush는 StyleSet Set 함수로 등록하였는데, 이때 Style의 이름StyleSetName("ExampleStyle") 뒤에 점( . )을 붙이고 InName("ToolBar_Icon")을 이어붙어 설정해주는 것이 규칙이다.

 

Brush의 생성 후 Style 등록까지 마쳤다면, 이제 실제로 사용할 수 있도록 OutSlateIcon에 FSlateIcon 객체를 생성 및 초기화해주었다.

이때의 OutSlateIcon은 헤더파일에 선언해놓은 FSlateIcon형 변수 ToolBar_Icon이다.

 

ToolBar_Icon 변수의 초기화가 끝났으니 마지막으로 생성자에서 FSlateStyleRegistry 클래스RegisterSlateStyle 함수를 이용해 StyleSet 자체를 등록해주었다.

 

즉, Style들을 생성한 뒤(ImageBrush), 생성된 Style들을 StyleSet에 묶어서 저장하고, 저장된 StyleSet을 SlateStyleRegistry에 최종적으로 등록하여 사용하는 것이다.

 

소멸자에선 등록한 StyleSet을 다시 등록해제하고, 해제한 StyleSet을 Reset 시켜주었다.

🎨 버튼에 Style 적용하기

ExampleModule.cpp

ExampleModule 클래스에서 기존 LoadMesh를 생성할 때 호출한 AddToolBar 함수에 매개변수를 추가로 전달해주었다.

 

FToolBarBuilder.AddToolBarButton

ToolBarBuilderAddToolBarButton 함수다섯번째 매개변수가 FSlateIcon 자료형인 InIconOverride이다.

해당 매개변수로 ExampleStyle에서 아까 제작한 ToolBar_Icon 객체를 전달하여 아이콘을 전달해준것이다.

 

이후 소스코드 빌드 후 엔진을 재시작하여 확인하면 툴바에 위치한 LoadMesh 버튼에 파란색 직육면체의 Icon이 성공적으로 추가된 것을 확인할 수 있었다. 

기존 툴바 버튼
아이콘 툴바 버튼

728x90