(해당 문서는 https://swifter22.tistory.com/17, UE4 Docu, 2BBear 님의 글을 참고하였습니다.)

 

 

언리얼엔진을 거의 처음 접해보면서, 유니티에서 처럼 폴더로 스크립트 관리를 하고자 하니...

처음부터 벽에 막히기 시작했다.

 

콘텐츠 브라우저의 C++ 클래스 항목을 가서 폴더를 만들겠다고 우클릭을 하면 생성할 수 없다고 나온다.

응 안돼 안돼

 

이는, 사실 언리얼에서 소스코드 등을 "모듈" 로 관리하기 때문에 발생하는 문제로, 관리의 용이성 / 실수 방지를 위해서.... 인지는 모르겠으나, 아무튼 에디터에서만으로는 바로 생성이 불가능하다.

 

해서 찾아본 결과.

 

수정할게 좀 많다.

 

일단 모듈을 하나 추가하겠다! 고 한다면...

 

1. Source 폴더 하위에 원하는 모듈명의 폴더를 추가.

PMG라는 폴더가 방금 추가한 폴더이다.

2. 모듈명 폴더 아래에 '모듈명.Build.cs' , '모듈명.cpp', '모듈명.h' 3가지 파일을 추가해준다.

반드시 모듈 폴더와 이름이 동일해야한다는점 잊지말자.

이런식으로.

이 파일들은 에디터에다 '이런 모듈이 있습니다' 하고 인지 시켜주는 목적으로, 설정을 안해주면 빌드할때 빼먹기만 하면 다행이고, 그냥 에러가 터져버린다.

 

잘 설정해주자.

 

1) Build.cs

솔직히 아직 Build.cs 파일의 특성을 덜 이해했습니다.

근데 명칭만 바꾸고 가져다 써도 되긴 하니, 일단 쓰시고 나중에 꼭 이해하시는거로. 나도 꼭 해놓고

 

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class PMG : ModuleRules
{
	public PMG(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine"});
		PrivateDependencyModuleNames.AddRange(new string[] { });
		
	}
}

이렇게만 해두면 일단 에러는 안난다.

 

2) 모듈명.h

얘는 (당장은) 정말 별거 없다.

모든 엔진의 정보가 담긴 Engine.h 헤더를 추가해주거나, 속성만 요약된 CoreMinimal.h 헤더를 추가해주면 된다.

상황에 따라 다르겠지만, 그걸 알 정도면 이런 글은 안 보고 있을테니 그냥 CoreMinimal.h 헤더 추가해주자.

 

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.

#pragma once
#include "CoreMinimal.h"

 

3) 모듈명.cpp

이친구는...

일단 당연히 자신의 헤더파일을 추가해주고, 그 다음 모듈 매니저를 추가해줘야 한다.

그래야 얘가 어떤 모듈타입인지 인식을 하고, 어떤 이름의 모듈인지 에디터에서 알 수 있게 된다.

 

뭐 레퍼런스 문서에 보면 필요에 따라 (혹은 최초 모듈은) IMPLEMENT_PRIMARY_GAME_MODULE( ) 을 사용하여 모듈을 등록해주라고 하는데, 이건 사용할 일이 생기면 추가로 설명하는게 더 나을것같다.

 

#include "PMG.h"
#include "Modules/ModuleManager.h"

IMPLEMENT_MODULE(FDefaultModuleImpl, PMG);

(앞은 모듈 매니저의 기본 모듈 인터페이스, 뒤는 추가할 모듈 명)

 

일단 이렇게 하면 파일 생성해줄것은 끝났다.

 

이게 끝이냐? 에이 설마요.

 

3. Source 폴더의 .Target.cs 파일들을 열어봅시다.

모듈 타겟 설정해주고... 하다가 맨 마지막에 모듈 이름을 추가해주는 항목이 있습니다.

네. 추가해주시면 됩니다.

 

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class FindRandomMapTarget : TargetRules
{
	public FindRandomMapTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V2;
		ExtraModuleNames.Add("FindRandomMap");
		ExtraModuleNames.Add("PMG");		//추가
	}
}

 

두 파일 모두에 추가해주시면 됩니다.

 

4. 프로젝트 루트의 '.uproject' 

해당 파일을 열면, (실행 말고 코드를 보면...)

JSON 양식으로 되어있는 내용물이 나옵니다.

양식에 맞게 항목을 추가해줍시다.

 

{
	"FileVersion": 3,
	"EngineAssociation": "4.24",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "FindRandomMap",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		},
		{
			"Name": "PMG",
			"Type": "Runtime"			
		}
	]

 

일단 이러면 파일 세팅은 끝났습니다.

 

5. Visual Studio에서 솔루션 빌드 1회

성공이 떠야 됩니다.

뭔가 잘못되어있다면 바로 에러밭을 마주칠 수 있으니 주의하시길.

 

6. .uproject 파일에서 Generate

해당 기능을 수행해주면 VS 프로젝트에서 모듈이 폴더로 추가됩니다.

 

자 여기까지 정상적으로 수행되었다면...

에디터로 돌아와서 C++ 클래스 추가를 수행합니다.

 

 

그럼 이런식으로 내가 추가한 모듈이 보이면 성공입니다.

 

 

 

 

Extra :

 

사실 이렇게 해도 여전히 모듈이 에디터에 안뜨는 경우가 있다.

없어!

이 경우, 침착하게 더미 액터 등을 추가해보면...

그런데 짜잔

뭔가 실패했다고 경고가 뜬다.

 

요 상태에서 VS로 들어가면...

 

 

이런 경고가 발생한다.

 

자 이건 또 뭐냐... 그러게요

별거 없다. 결론만 따지면 재 빌드 돌리면 된다.

 

침착하게 에디터를 끄고, 재 빌드를 해주자.

(저는 분명 건든게 없습니다)

성공한다.

 

이후 다시 에디터를 켜주면 

드디어 추가 모듈이 생성되었다.

 

이제부터 모듈 작업을 하시면 됩니다. 네.

 

 

+ Recent posts