안녕하세요. Halcy 입니다~


오늘은 본격적으로 Slate에 대해 알아보고 언리얼엔진 다큐먼트에서 제공하고 있는 Detail Customization 을 해보겠습니다!


Detail Customization 이란, 언리얼엔진을 사용하면서 많이 보는 어떠한 인스턴스의 디테일 탭을 자신이 필요한 방향으로 커스텀 하는 것입니다. 


(사진 1-1) Static Mesh Component의 기본 Lighting 디테일 탭


바로 위의 사진 과 같은 탭들을 디테일 탭이라고 하는데요. 언리얼엔진 다큐먼트에서 제공하는 예제도 Lighting탭을 수정하므로 저희도 처음으로 Lighting 탭을 수정해 보겠습니다.


언리얼엔진 다큐먼트는 4.9버전을 기준으로 작성되어 있기 때문에 현재와 코드가 조금 다른 부분도 있고, 제가 테스트하며 만들었을 때, 비효율적이라 판단되는 부분은 변형하여 작성하였습니다.


본 튜토리얼의 엔진 버전은 4.21.2 버전입니다.


(사진 1-2) Static Mesh Component의 기본 Lighting 디테일탭 수정 버전


이 튜토리얼에서는 사진 1-1 의 기본 Lighting Detail 을 사진 1-2 의 변형된 Lighting Detail로 변경 해보겠습니다.




[기본 세팅]


언리얼엔진의 가장 큰 특징은 언리얼엔진 자체가 여러개의 크고작은 모듈들이 합쳐져서 이루어져 있다는 것입니다. 


우리가 언리얼엔진의 프로젝트를 만들면 기본적으로 게임 런타임 모듈이 하나 생성되고 대부분의 게임플레이를 이 모듈에서 만들게 됩니다. 


하지만 저희가 하려는 디테일 커스텀은 에디터 타임에서 동작해야 하므로, 프로젝트에 Editor 모듈을 하나 추가해 주셔야 합니다. 



(사진 1-3) 모듈 추가전 클래스 생성


위 사진을 보시면 모듈을 추가하기전 cpp 클래스를 생성 하면 위사진처럼 Runtime 모듈 하나만 있은 것을 확인 할 수 있습니다. 


그러면 이제 모듈을 추가해보도록 하겠습니다.


가장 먼저 프로젝트를 하나 만들고 CPP가 동작하도록 구성 하겠습니다. 




(사진 1-4) 언리얼엔진 기본 프로젝트 구성


템플릿은 어떤것으로 하든 상관없지만, 저는 1인칭 템플릿으로 구성하였습니다. 


엔진에 모듈을 추가 하기 위해선 가장먼저 "ProjectPath/Source/" 에 새로운 모듈이름이 될 폴더 하나를 구성하는 것입니다. 


(사진 1-5) 새로운 에디터 모듈을 위한 폴더 생성


처음 프로젝트를 생성하고 Source에 들어가면 본래 자신의 프로젝트 이름을 가진 폴더 하나와 두개의 Target.cs파일만 있을 것입니다.


여기에 위 사진 1-4 처럼 자신의 새로운 에디터 모듈이 될 폴더하나를 구성해줍니다.


(사진 1-6) MyEditorModule 내부


Private폴더와 Public 폴더 하나를 구성해주고 폴더명과 같은 build.cs파일을 하나 만들어줍니다.

그 후 Private 에는 MyEditorModule.cpp를 만들어주고, Pubilc 에는 MyEditorModule.h를 만들어 줍니다.


(사진 1-7) Private 폴더 내부

(사진 1-8) Public 폴더 내부


이제 프로젝트의 Uproject 파일을 오른쪽 마우스 클릭으로 눌러 Generate visual studio project files를 눌러 비주얼 스튜디오를 재생성 해줍니다. 


그리고 이제 비주얼 스튜디오를 열면 다음과 같이 보일 것입니다.


(사진 1-9) 비주얼 스튜디오 솔루션 탐색기


그리고 이제 파일내부를 구성해 보도록 하겠습니다.


가장먼저 build.cs파일을 구성하도록 하겠습니다. build.cs파일에는 이 모듈에서 사용할 다른 엔진 모듈이나 플러그인 모듈등 다양한 패스설정을 해주는 영역입니다.


(사진 1-10) MyEditorModule.build.cs 파일 내부


위 사진에서 PubilcDependencyModuleNames 안에 저희가 디테일 커스텀을 할때 사용할 3가지 모듈을 더 추가할 것입니다.


처음으로 PropertyEditor 모듈을 추가하여 디테일 탭의 프로퍼티에 접근 가능하도록 만들고 그 디테일 탭의 프로퍼티를 수정하는데 사용할 Slate모듈과 SlateCore모듈을 추가해줍니다.


다음으로 .h파일과 .cpp파일을 구성 할 것인데 현재는 단순히 모듈만 추가 하는 것이므로 내부 구성이 복잡하지 않습니다. 


(사진 1-11) MyEditorModule.h


(사진 1-12) MyEditorModule.cpp


여기 까지 하셨다면 이제 저희만의 모듈이 완성 되었습니다!

IMPLEMENT_MODULE 매크로는 첫 번째 인자에는 이 모듈을 관리할 클래스를 설정하는 것이고, 두 번째 인자는 이 모듈의 이름을 입력해 주시면됩니다. 


저희는 디테일탭을 커스텀하는 모듈을 제작할 예정이므로 .h파일에 class하나를 구성하여 이 클래스를 모듈의 관리자로 지정하였습니다.


그리고 빌드를 하고 다시한번 모듈이 추가가 되었나 확인해봐도 사진 1-3 처럼 아직 하나의 모듈만 나올 것입니다. 


그 이유는 이 프로젝트에서 새로운 모듈을 만들었지만 사용하겠다고 지정을 해주지 않아 발생하는 현상입니다.


이제 이 새로운 모듈을 프로젝트에서 에디터 모듈로 사용하겠다! 지정해보록 하겠습니다.


(사진 1-13) .uproject 파일 내부 


uproject파일 내부에 Modules 항목 내부에 위와 같이 추가해주면 이제 이 모듈을 프로젝트에서 사용하겠다! 입니다.

 

하지만 이대로 컴파일을 해도 오류가 날 수 있습니다. 아마 위에 만든 MyEditorModule.h 파일을 찾을 수 없다는 에러가 날 것입니다. 혹은 컴파일이 완료되고 엔진이 실행하기 직전에 MyEditorModule의 버전이 변경되어 다시 컴파일 하라는데 예를 누르면 실패라고 뜰 것입니다.


이것은 새로운 모듈의 패스가 제대로 잡혀있지 않아서 발생하는 에러입니다. 기본 프로젝트를 생성하면 .target.cs파일이 두개 생성 될 것입니다. 여기에 저희 모듈을 추가해 주셔야 패스설정을 제대로 하고 프로젝트에서 모듈을 제대로 인식 할 수 있을것입니다.


(사진 1-14) Target.cs



(사진 1-15) Editor.Target.cs



(사진 1-16) .Target.cs


위와 같이 모듈 이름을 추가해주고 컴파일을 누르면 이제 모듈이 정상 인식 될 것입니다.


(사진 1-17) 모듈추가 확인


이제 정상적으로 모듈이 추가되었다면 위 사진처럼 나올 것입니다.


오늘은 디테일 커스텀을 하기 위해 가장먼저 해야하는 모듈추가를 해보았습니다. 플러그인으로 만들까도 생각해봤지만, 엔진내부에 있는 디테일 탭을 수정하는것인데 플러그인으로 한다는 것이 조금 껄끄러워서 그냥 에디터 모듈추가로 해보았습니다.


처음 쓰는 튜토리얼이고 글 재주도 워낙에 없어서 잘 이해가지 않은 부분은 언제든 문의주시면 최대한 알려드리도록 노력하겠습니다. ㅎㅎ


다음 시간에는 본격적으로 디테일탭을 커스텀 해보록 하겠습니다! 


다음시간에 만나요 ~


감사합니다. ㅎㅎ


+ Recent posts