(이 포스팅은 언리얼 4.19.2 기준으로 작성되었습니다.)
(사진은 클릭하면 크게 볼 수 있습니다.)
언리얼 엔진 공식 카페에 들어가보면 수많은 좋은 강의를 접할 수 있는데 그중 이득우님의 강의를 보면서 열심히 따라가던 중...
모듈 제작에서 막혔다... 어...?? 똑같이 따라한 것 같은데 왜지?!
일단 언리얼 빌드 시스템은 모듈 시스템으로서 구성되어 있습니다.
언리얼의 모듈시스템이란 Source 폴더 아래의 모듈 이름의 폴더를 갖으며 이 폴더 아래에 소스코드들이 자동으로 빌드가 됩니다.
하나의 Build.cs파일이 필요로 하며 이 파일에는 이 모듈이 참조하는 모듈들 설정, 빌드 관련 옵션에 관한 정보가 담겨집니다.
그리고 프로젝트 실행시에 포함되는 모듈은 Target.cs 파일에 설정되어집니다.
어쨌든 이 모듈은 기본적으로 최소 1개 이상의 모듈이 필요로하고 이 프로젝트 모듈들은 .uproject 파일에 설정되어집니다.
바로 이부분입니다. (이득우님 강의 따라가면서 WebService라는 모듈을 추가하였습니다.)
제 방법이 맞는건지는 모르지만 일단 오류없이 빌드가 되었기에 올렸고 이 방법이
WebService라는 모듈을 제작하기위해서 WebService.cpp와 h(헤더파일)을 생성하여 작성해줍니다.
1. 헤더파일 (WebService.h)파일에
#include "Engine.h"
#include "CoreMinimal.h"
이렇게 추가했는데 알아본 결과
둘중 하나만 추가해도 될 것 같습니다. 정확히는 CoreMinimal.h만 추가해주어도 됩니다.
Engine.h는 꽤 커다란 정보를 담고있는 헤더파일인 것 같고...
(4.15 릴리즈 정보에 보면 커다란 모놀리식 헤더 포함 모든 소스 포함 이라고 나오네요.)
CoreMinimal.h는 Core의 어디에나 존재하는 유형의 세트가 들어있으며 이제 대부분의 헤더에 포함된다고 합니다.
꼭 필요한 최소한의 정보만 들어가 있어서 컴파일 속도를 개선했다고 생각하면 좋을 것 같습니다.
#include "CoreMinimal.h" 를 추가해줍니다.
2. cpp 파일을 찾아갑니다.
우선 설명하기에 앞서 언리얼 내의 최소 한개의 모듈은
IMPLEMENT_PRIMARY_GAME_MODULE 키워드로 선언되어야 합니다.
자세한 부분은
참조!
다만 이곳에서도 업데이트 안된건지 저대로 하면 안되는데...
위와 같이 PRIMARY_GAME_MODULE일 경우(FDefaultGameModuleImpl, 모듈클래스이름, 모듈이름문자열)로 등록해 줍니다.
이후 PRIMARY로 선언된 모듈이 있다면 IMPLEMENT_GAME_MODULE로 대체할 수 있다고 하는데 설명에는
IMPLEMENT_PRIMARY_GAME_MODULE( <ModuleName>, "<GameName>" );
이러한 폼으로 설명되어집니다만
위 화면과 같이 <FDefaultGameModuleImpl,"모듈이름문자열")로 명시해줘야 에러가 안뜹니다...
3. 그리고 모듈에는 h,cpp,Build.cs 이 세가지로 이루어지는데 마지막 그 Build.cs 파일 입니다.
여기서 엄청 애를 먹었는데요.
잘 보이실런지 모르겠는데 강의 내용대로 따라갔다간 접근 권한부터 시작해서 매개변수가 0인 생성자는 없다느니 온갖 에러를 접하게 됩니다.
쉽게 말해서 기본으로 생성된 모듈이 있다면 참고해서 모듈이름만 바꿔주는게 마음 편합니다..
단 모듈들이 배열로 추가된 11번째줄 코드에서 InputCore는 입력에 관한 모듈이기 때문에 제외해도 무방하다고 합니다.
또한 9번째 줄 PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
이 부분을 빼먹으시면 나중에 오브젝트 만들때 에러를 경험하게 되십니다...
아마 이부분은 위에 설명드렸지만 4.15 업데이트 이후부터 영향을 받는 것 같은데 IWYU(Include what you use) 를 켜줘야 되는 것 같습니다. 모놀리식 헤더 파일(Engine.h UnrealEd.h)와 같은 컴파일을 지양하고 반드시 필요한 모듈만 include 하도록 지향하도록 바뀌었다고 하네요.
어쨌든 이 IWYU를 켜기 위해서 저 위에 코드를 추가해도록 합시다.
저 규칙을 도입한 뒤로부터 컴파일의 속도가 크게 빨라졌다고합니다.
참고 URL : http://api.unrealengine.com/KOR/Programming/UnrealBuildSystem/IWYUReferenceGuide/
이렇게 추가해주시고.
4. 언리얼 에디터로 돌아와서 새로운 C++파일 만들기!
그리고 모든 클래스에 체크하고 Object 로 하나 만들어주도록 합니다.
이름을 적어주고 파란색으로 동그라미 친곳을 클릭해보면 추가되어진 모듈이 보여집니다. 선택하고 클래스 생성!
그러면 뭐 컴파일에 실패했다느니 혹은 성공했다느니 나올텐데
무시하고 비주얼 스튜디오에 들어가서 다시 빌드 해주시고 에디터로 돌아와서 컴파일 해주면
위와 같이 에디터에서도 모듈이 추가되었음을 확인할 수 있다.
이 과정이 숙련되지 않았다면... 각 단계마다 빌드하고 에디터로 돌아와서 컴파일 하고 에러 확인하고 이 과정을 되풀이 하시길 권장합니다.
정신건강에 해롭네요. 새벽 6시간내내... 삽질 한 결과였습니다.
감사합니다.
잘못된 정보가 있으면 댓글로 알려주시면 감사히 받아들이고 적용하도록 하겠습니다.
'Unreal > Script' 카테고리의 다른 글
C++ 11 및 최신 언어 문법. (0) | 2018.07.05 |
---|---|
UPROPERTY란 무엇일까? (0) | 2018.07.01 |
Header 파일에 붙는 UCLASS란 무엇일까? (0) | 2018.06.30 |