언리얼 엔진이 설치되면 언리얼프로젝트 파일이 윈도우 시스템에 등록이 됩니다.
언리얼프로젝트 파일은 파란색 언리얼 엔진 아이콘과 uproject 확장자를 가지게 되는데요,
에픽게임스 런쳐에 의해 UnrealEngineSelector라는 프로그램과 자동으로 연동됩니다.
<경로를 깃허브 언리얼 위치로 바꾸어서 진행해봄 >
"C:\UnrealEngine\Engine\Binaries\Win64\UnrealVersionSelector-Win64-Shipping.exe" /editor "%1"
-> 라이팅빌드 오류 및 URL 오류 발생 -> 기존 프로젝트들도 빌드 확인 -> 같은 오류 발생
-> 그래서 에디터 언리얼로 재설치 하니 오류 발상안함
UnrealEngineSelector 프로그램은 uproject의 내용을 분석하고 적절한 버젼의 언리얼 엔진이 실행되도록 도와주는 중개자 역할을 수행합니다.
그래서 uproject 파일에는 UnrealEngineSelector가 해석할 수 있도록 JSON 형식의 문자열로 프로젝트 설정 값이 기록되어 있습니다. uproject파일에서 지정할 수 있는 항목은 여러가지가 있지만 언리얼 프로젝트가 실행하기 위해서는 필수적으로 아래 두 가지 항목이 있어야 합니다.
1. FileVersion : 언리얼 엔진 파일의 버전을 의미합니다. 현재 언리얼 엔진이 공통으로 사용하는 값은 3입니다. 이 값은 당분간 바뀔 일은 없어보입니다. 정수로 기입하면 됩니다.
2. EngineAssociation : 셀렉터가 구동할 언리얼 엔진의 버전을 지정합니다. GitHub에서 다운받아서 빌드한 커스텀 버젼의 경우에는 프로젝트의 GUID가 지정됩니다. 따라서 항목의 값은 문자열입니다.
이 설정 값을 JSON 형식으로 직접 만들어봅시다.
OOO 이라는 폴더를 하나 생성합시다. 이 폴더는 프로젝트 폴더로 쓸 겁니다.
그리고 메모장을 사용해 아래와 같이 입력하고 OOO 폴더 안에 OOO.uproject라는 파일로 저장
이제 이 파일을 더블 클릭하면 자동으로 언리얼 프로젝트가 실행됩니다.
모듈
어떤 독립된 체계를 정의하기 위해 프로그래밍 코드를 묶은 것
이렇게 실행된 프로젝트는 C++와 연관이 전혀 없는 블루프린트 기반의 프로젝트입니다.
현재 아무런 정보가 없다보니, 언리얼 엔진은 uproject 파일이름을 프로젝트 이름으로 인식해 프로젝트를 생성합니다.
이번에는 C++ 클래스를 추가하는 과정을 통해 이 프로젝트를 C++ 프로젝트로 확장시켜봅시다.
그래서 C++로 무언가를 만들어야 하는데요,
게임 프로그램을 관리하는 클래스인 게임 인스턴스를 하나 만들어보겠습니다.
생성이 되고 난 뒤 먼저 uproject 파일을 메모장에서 다시 열어보면, 뭔가가 많이 추가되어 있다.
{
"FileVersion": 3,
"EngineAssociation": "4.14",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "ArenaBattle",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
}
]
}
메모장으로도 열어서 볼수 있음
여기서 눈여겨볼 부분은 Modules라는 항목입니다.
JSON에서 배열(Array)을 나타날 때,사용하는 [] 기호 내에 객체를 나타내는 {}로 ArenaBattle이라는 것이 정해져 있습니다.
이를 유추해보면 "Modules 설정은 여러개의 객체로 구성되는데
우리 프로젝트에는 하나의 모듈이 있고, 이의 이름은 ArenaBattle이고 Runtime 타입이다." 라고 해석할 수 있게됩니다.
모듈은 말 그대로 우리가 익히 아는, 어떤 독립된 체계를 정의하기 위해 프로그래밍 코드를 묶은 것을 의미합니다.
언리얼 엔진에서는 자체적으로 정의된 모듈이라는 가상 프레임웍이 있는데, 우리가 C++ 클래스를 하나 추가한 순간 이것이 만들어지게 된 것입니다.
언리얼 엔진의 소스코드도 결국 에픽 게임스가 만들어 놓은 수 많은 모듈들의 집합체일 뿐입니다. 에픽 게임스가 만들어 놓은 모듈들은 이미 다 컴파일까지 완료되 우리가 엔진을 다운 받을 때 공급됩니다.
아래 폴더로 가서 이미 만들어져 있는 수 많은 dll 파일들과 lib파일들을 살펴보면 이 개념을 이해하는데 도움이 될 겁니다. 이 파일들이 모듈의 결과물들입니다.
( 참고로 UE4Editor-로 시작하는 이름의
dll 파일은 에디터에서 사용할 모듈이고
UE4-로 시작하는 lib 파일은 패키징용으로 제작된 모듈입니다.
그리고 - 뒤는 모듈의 이름을 의미합니다. )
엔진모듈 게임모듈
그런데 언리얼 엔진이 제공하는 모듈만으로 게임을 만들기에 부족하다면 어떻게 할까요?
모듈을 추가해야 할 필요가 있습니다. 그래서 언리얼 엔진은 개발자가 모듈을 추가할 수 있도록 설계도 열어놓았습니다.
전자를 엔진 모듈이라고 하고, 후자를 게임 모듈이라고 합니다.
이렇게 엔진 모듈과 게임 모듈이 결합되면 게임 제작에 기반이 되는 C++ 프레임웍이 완성됩니다.
우리가 새롭게 추가한 GameInstance는 게임 모듈로 들어가야 하는데,
처음에 사용자 모듈이 없는 블루프린트 Only 프로젝트로 만들었기 때문에,
언리얼 엔진에서는 자동으로 프로젝트 이름과 동일한 모듈을 만들고,
이 모듈에 저희가 지정한 클래스를 만들어 넣어 주었습니다.
이 모듈에 해당하는 부분이 Source 폴더 아래에 있는 ArenaBattle 폴더입니다.
정리하면 "ArenaBattle 프로젝트에,
ArenaBattle이라는 사용자 C++ 게임 모듈을 추가한 상황이고,
이 모듈에는 ABGameInstance라는 객체가 들어있다." 는 상황이라고 볼 수 있습니다.
'Unreal > Study' 카테고리의 다른 글
5. UClass와 리플렉션 + 로그디버깅 (0) | 2019.05.27 |
---|---|
4. 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스생성 (0) | 2019.05.24 |
3. 언리얼 오브젝트 +구성 + 선언규칙 + 매크로 + 게임인스턴스 (0) | 2019.05.24 |
2. 모듈의 제작 + 모듈 추가명령 + 구성 (0) | 2019.05.24 |
1. 언리얼 빌드 시스템 + Target.cs (1) | 2019.05.24 |