Plugin 이란?

UE4에서 플러그인이란 에디터 안에서 프로젝트 단위로 개발자가 쉽게 켜고 끌 수 있는 코드 및 데이터들의 모음이다.

언리얼 엔진 시스템은 확장성을 염두하며 디자인되어, 엔진 코드를 직접 수정하지 않아도 완전히 새로운 기능을 추가하고 내장 기능을 변경하는 것이 가능하다.

플러그인은 게임플레이 기능을 추가하고, 내장된 엔진 기능을 수정, 추가하거나, 새 파일 포맷을 만들수도있고, 에디터 기존 기능에 새로운 메뉴 같은 기능 을 확장할 수도 있다. 에디터에 새로운 파일 유형을 만들어 새 메뉴와 툴바 명령은 물론, 심지어 완전 새로운 기능과 에디터 서브 모드를 추가하는 것도 가능하다.

UE4 에서 기존의 플러그인을 보는 방법은 편집 탭에서 플러그인을 누르면 된다.

플러그인은 게임 프로젝트 컴파일 타임에 언리얼 빌드 툴에서 자동으로 컴파일 된다.

플러그인은 모듈 소스 디렉터리를 몇 개든 가질 수 있고, 대부분의 플러그인은 하나의 모듈만 가질 수 있으나, 여러 개의 모듈을 만드는 것도 가능은 하다. 코드 모듈이 있는 플러그인의 경우, 플러그인은 해당 플러그인의 컴파일된 코드가 들어있는 Binaries 폴더가 있다. 또한 임시 빌드 파일은 플러그인 디렉터리 아래 Intermediate 폴더에 저장된다.

플러그인은 항상 플러그인 디렉터리에 위치해야 한다.

플러그인 유형검색 경로
Engine /UE4 Root/Engine/Plugins/My Engine Plugin/
Game/My Project/Plugins/My Game Plugin/

플러그인은 모듈 코드 폴더의 Classes 서브 폴더 속 헤더 파일에서 (UCLASS, USTRUCT 등등) 새로운 UObject 유형 선언이 가능하다.

엔진은 플러그인 폴더 아래의 서브 폴더들을 보며 .uplugin 파일을 검색해 플러그인을 찾아낸다.

언리얼 엔진 빌드 시스템은 이 파일을 감지하여 해당 UObject 지원에 필요한 코드를 자동으로 생성해준다.

C++ 모듈 안에서 UObject 사용에 관한 일반적인 규칙을 따를 필요가 있다. 이를테면 모듈의 소스 파일 중 하나의 생성 헤더 파일과 모듈의 generated.inl 파일을 포함 시키는 것이다.

플러그인 모듈이 일반 모듈과 약간 다른 점은, Public 소스 파일 헤더이다.

대부분의 플러그인 모듈에는 Public 폴더의 헤더 파일에서 공용 API를 익스포트할 일이 없는데, 엔진 또는 게임 코드에 직접 종속될 (정적으로 링크될)일이 절대 없기 때문이다.

그래서 보통 Public 소스 폴더는 비어있게 둔다. 하지만 이 규칙에도 예외가 있다.

  • 플러그인에 다수의 C++ 모듈이 들어있는 경우, Public 폴더의 코드가 플러그인 내 여러 모듈에 공유될 수 있다.
  • (엔진이 아닌) 게임 플러그인 제작시 게임에서 다른 플러그인 모듈 중 하나에 정적 링크를 허용하고자 할 때, 플러그인 개념이 약간 깨지지만, 플러그인에서 새 UObject 유형을 선언하여 게임 클래스가 상속하거나 직접 사용할 수 있도록 하면 유용한 경우가 종종 있다. 엔진 자체는 이 플러그인에 종속성이 없지만, 게임 프로젝트 코드와 콘텐츠는 직접 종속성이 있을 수도 있다.
  • 플러그인과 함께 공용 인터페이스 헤더를 배포하고자 하는 경우, 게임 코드나 다른 플러그인에서 해당 플러그인 모듈에 구현된 유형에 접근하도록 하고자 할 때이다. 흔치 않으며 일반적으로 권장하지 않는 방법인데, 현재 다른 플러그인에 직접 종속되는 플러그인 지원 계획은 UE4에 없기 때문이다.

대충 플러그인을 하나 만들어 보자

플러그인을 만들기 위해서는 위에서 보았던 플러그인 창에서 새 플러그인 버튼을 눌러주면 된다.

열어보면 여러가지 플러그인 탬플릿이 있는데 본인이 만들고자하는 플러그인의 성격에 맞게 고르면 된다.

기본 탬플릿을 사용해 대충 만들어 보겠다.

BBAGWANG 이라는 내 닉네임에 맞춘 플러그인을 하나 만들었다.

플러그인 구조에 대한 설명을 해보자면, 일단 플러그인을 만드는 순간 프로젝트 폴더에 Plugins 폴더가 없었다면 생긴다.

그 안에는 내가 만든 플러그인의 이름으로된 폴더가 있고, 그 폴더 속에는 내 플러그인과 관련된 모든 파일들이 존재한다.

아까 언급했던 uplugin 파일이 있다. 열어보자.

JSON 형식으로 된 파일이다. 각각의 설명은 언리얼 공식 플러그인 페이지에서 확인하길 바란다.

https://api.unrealengine.com/KOR/Programming/Plugins/index.html

이제 플러그인의 핵심인 소스파일을 봐보자, Visual Studio도 플러그인이 추가된 후 자동으로 플러그인 관련 필터를 설정해줘서 보기 편하다.

마지막으로 우리가 플러그인을 제대로 만들었는지 확인하기 위해 간단한 로그를 남겨보자.

이제 에디터를 다시 켜서 확인해보자.

바랬던 대로 잘 나오는 것을 확인했다.

플러그인을 활용하면 엔진을 더 폭넓게 사용할 수 있게 되니, 나중에 나도 꼭 한 번 만들어 봐야겠다.