언리얼 엔진이 설치되면 언리얼프로젝트 파일이 윈도우 시스템에 등록이 됩니다. 
언리얼프로젝트 파일은 파란색 언리얼 엔진 아이콘과 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라는 파일로 저장

 

메모장으로 JSON 형식으로 작성

 

이제 이 파일을 더블 클릭하면 자동으로 언리얼 프로젝트가 실행됩니다. 

 

확장자 바꾸고 실행히 화면(깃허브소스)

 

 

실행시 생성되는 폴더

 

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 프로젝트에,
ArenaBattle이라는 사용자 C++ 게임 모듈을 추가한 상황이고,
이 모듈에는 ABGameInstance라는 객체가 들어있다." 는 상황이라고 볼 수 있습니다.

 


 

[참고] [1-1] 언리얼 C++ 프로젝트의 구성

 

+ Recent posts