(해당 문서는 https://swifter22.tistory.com/17, UE4 Docu, 2BBear 님의 글을 참고하였습니다.)
언리얼엔진을 거의 처음 접해보면서, 유니티에서 처럼 폴더로 스크립트 관리를 하고자 하니...
처음부터 벽에 막히기 시작했다.
콘텐츠 브라우저의 C++ 클래스 항목을 가서 폴더를 만들겠다고 우클릭을 하면 생성할 수 없다고 나온다.
이는, 사실 언리얼에서 소스코드 등을 "모듈" 로 관리하기 때문에 발생하는 문제로, 관리의 용이성 / 실수 방지를 위해서.... 인지는 모르겠으나, 아무튼 에디터에서만으로는 바로 생성이 불가능하다.
해서 찾아본 결과.
수정할게 좀 많다.
일단 모듈을 하나 추가하겠다! 고 한다면...
1. Source 폴더 하위에 원하는 모듈명의 폴더를 추가.
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로 들어가면...
이런 경고가 발생한다.
자 이건 또 뭐냐... 그러게요
별거 없다. 결론만 따지면 재 빌드 돌리면 된다.
침착하게 에디터를 끄고, 재 빌드를 해주자.
성공한다.
이후 다시 에디터를 켜주면
드디어 추가 모듈이 생성되었다.
이제부터 모듈 작업을 하시면 됩니다. 네.
'게임 개발 > Unreal' 카테고리의 다른 글
언리얼 기본 가이드 - 03. 블루프린트 1 (0) | 2023.01.24 |
---|---|
언리얼 기본 가이드 : 02. 기본 조작법 (0) | 2023.01.22 |
언리얼 기본 가이드 : 01. 설치부터 실행까지 (0) | 2023.01.22 |
차회 예고 : 언리얼 기본 가이드 (1) | 2022.11.21 |
UE4 Clear Water Texture (1) (0) | 2020.05.18 |