언리얼 에디터 구성
- 언리얼 에디터: 게임 제작을 위해 에픽 게임즈가 제공하는 저작 도구
- 언리얼 엔진 구성
- 에디터: 게임 제작을 위해 제공되는 응용 프로그램
- 게임 빌드: EXE 파일과 리소스로 이루어진 독립적으로 동작하는 게임 클라이언트
- 언리얼 에디터 특징
- 게임 개발 작업을 위해 다양한 폴더와 파일 이름 규칙이 미리 설정되어 있음
- 정해직 규칙을 잘 파악하고 프로젝트 폴더와 파일을 설정해야 함
- 에디터에서 기획과 개발을 완료한 후, 게임 빌드를 통해 최종 게임 빌드를 제작하도록 설정
언리얼 에디터 동작
- 프로젝트 폴더의 uproject 확장자를 더블클릭하면 에디터가 트리거 됨
- 에디터 실행 방식
- uproject 확장자는 윈도우 레지스트리에 등록되어 있음
- UnrealVersionSelector 프로그램으로 정보 넘김
- UnrealVersionSelector는 런처가 저장한 에디터 정보로부터 버전에 맞는 에디터 실행
에디터 버전 정보 파악
- 프로젝트.uproject 텍스트 파일에 버전 정보가 있음
- 에픽게임즈 런처는 프로그램 데이터 폴더에 LauncherInstalled.dat 파일에 몇 버전이 어디서 설치되어 있는지 정보가 저장
- 프로젝트 폴더 생성 및 txt파일 생성
- 내용은 JSON 형식으로 아래와 같이 작성
- 확장자를 uproject로 변경
{
"FileVersion" : 3,
"EngineAssociation" : "5.1"
}
- 실행하면 자동으로 폴더 생성
- Config : 프로젝트 설정에 필요한 정보를 보관
- Content : 에셋을 보관
- DerivedDataCache : 우리가 사용하는 에셋들의 주요 정보들을 미리 캐싱
- 로딩을 빨리하는데 도움
- 용량이 급해 지워도 동작에는 문제 없음
- Intermediate : 임시적으로 사용되는 중간 결과물들을 보관
- Saved : 임시로 무언가를 저장
- 의도적으로 어떤 데이터를 저장하지 않았으면 지워도 문제 없음
블루프린트 프로젝트
- C++ 코드가 없는 언리얼 프로젝트
- 언리얼 엔진이 제공하는 기본 기능을 활용해 게임을 제작하는 프로젝트
- 게임 제작에 필요한 기능을 모듈 단위로 제공
- 모듈을 상속받아 블루프린트를 활용해 모든 기능과 로직을 구현
- 언리얼 엔진 C++ 모듈에 개발자가 추가로 자신만의 C++ 모듈을 추가할 수 있음
언리얼 C++ 모듈
- 언리얼 엔진의 소스코드는 모두 모듈 단위로 구성
- 모듈을 컴파일해 에디터 및 게임에 우리가 제작한 로직 공급 가능
- 모듈 단위로 구성된 C++ 소스 코드를 컴파일한 결과물
- 에디터 용으로 DLL 동적라이브러리
- 게임 용으로 정적 라이브러리
- 에디터 용 모듈은 항상 UnrealEditor-{모듈이름}.DLL 이름 규칙
언리얼 C++ 모듈 추가
- 직접 제작한 C++ 모듈을 에디터에 추가 가능
- 에디터 모듈을 빌드 폴더에 넣어줘야 함
- Windows의 경우 Binaries/Win64 폴더에 해당 DLL을 넣어야 함
- 빌드된 모듈 목록이 잇는 UnrealEditor.modules 파일도 같은 폴더에 넣어줘야 인식됨
- uproject 명세서에 모듈 이름을 지정하고 에디터를 실행
{
"FileVersion" : 3,
"EngineAssociation" : "5.1"
"Modules" : [
{
"Name" : "모듈이름"
"Type" : "Runtime"
}
]
}
모듈 C++ 코드 관리
- 언리얼 프로젝트가 소스 코드를 관리하는 규칙에 따라 소스 코드 구조를 구성해야 함
- 소스 코드는 멀티 플랫폼 빌드 시스템을 지원하기 위해 특정 프로그램에 종속되어 있지 않음
- 실제 빌드를 진행하는 주체 : Unreal Bulid Tool 이라틑 C# 프로그램
- Source 폴더에 지정된 규칙대로 소스를 넣으면 플랫폼에 맞춰서 알아서 컴파일 진행
Source 폴더 구조
- Source 폴더
- 타겟 설정 파일
- 모듈 폴더 (보통은 프로젝트 이름으로 모듈 이름 지정)
- 모듈 설정 파일
- 소스 코드 파일 (.h 및 .cpp 파일)
- 타겟 설정 파일 : 전체 솔루션이 다룰 빌드 대상을 지정
- {프로젝트이름}.Target.cs : 게임 빌드 설정
- {프로젝트이름}Editor.Target.cs : 에디터 빌드 설정
- 서버와 같은 다른 설정 파일도 있음
- 모듈 설정 파일 : 모듈을 빌드하기 위한 C++ 프로젝트 설정 정보
- {모듈이름}.Bulid.cs : 모듈을 빌드하기 위한 환경 설정
- C#은 실행 중에 코드를 바로 컴파일하고 결과를 반영할 수 있는 기능이 있음(complie on-the-fly)
- 이 기능을 이용하기 위해 C# 파일로 설정을 지정
게임 프로젝트의 소스
- 모듈을 구현한 헤더와 소스 파일이 있어야 함
- 주로 {모듈이름}.h와 {모듈이름}.cpp로 지정
- 모듈의 뼈대를 제작해주는 매크로 지정
- IMPLEMENT_MODULE : 일반 모듈
- 게임과는 직접 연관은 없지만 유용한 기능을 제공
- IMPLEMENT_GAME_MODULE : 게임 모듈
- IMPLEMENT_PRIMARY_GAME_MODULE : 주 게임 모듈
- 게임 제작에 가장 중심이 되는 전체적인 게임 동작하는데 사용하는 로직을 모아둔 모듈
- 일반적으로 게임 프로젝트는 주 게임 모듈을 하나 선언해야 함
- 세팅을 갖춘 후 uproject 파일을 우클릭해서 Generate Visual Studio project files. 메뉴를 선택
- Unreal Version Selector 프로그램이 알아서 언리얼 빌드 툴을 가동해서 Intermediate 폴더에 관련된 프로젝트 파일을 자동으로 생성해 줌
- Source 폴더를 규칙에 맞게 구성하면 Intermediate 폴더는 언제든지 재생성 가능
모듈 간의 종속 관계
- 모듈 사이에 종속 관계를 설정해 다양한 기능을 구현
- 우리가 만드는 모듈도 언리얼 엔진이 만든 모듈을 활용해야 함
- 언리얼 엔진이 제공하는 모듈 사이에도 종속 관계가 있음
- 하나의 모듈에 너무 많은 코드가 들어가면 언리얼 엔진은 빌드 방식을 변경
- 프로젝트가 커질 수록 모듈을 나눠서 관리하는 것이 유리
모듈의 공개와 참조
- 모듈 내 소스를 필요한 만큼만 공개해야 모듈 간 의존성을 줄이고 컴파일 타임을 최소화 할 수 있음
- 공개할 파일은 모두 Public 폴더로
- 비공개 파일은 모두 Private 폴더로
- 외부로 공개할 클래스 선언에는 {모듈이름}_DLL 매크로
- 서브 모듈 설정을 완료하면 주게임 모듈의 Bulid.cs 설정에서 서브 모듈의 이름을 넣어주면 됨
플러그인 시스템
- 게임 프로젝트 소스에 모듈 추가하는 방법은 분업이 어려움
- 모듈만 독립적으로 동작하는 플러그인 구조를 만들어 분업화
플러그인 구조
- 플러그인 : 다수의 모듈과 게임 콘텐츠를 포함하는 포장 단위
- 에디터 설정을 통해 유연하게 플러그인 추가 삭제 가능
- 플러그인 구조
- 플러그인 명세서 (uplugin 파일)
- 플러그인 리소스 (Resource 폴더, 에디터 메뉴용 아이콘)
- 콘텐츠
- 모듈 폴더
- Plugins 폴더를 만들어줘야 함
- 에디터 메뉴를 통해서도 uplugin 파일 추가 가능
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "GameUtility",
"Modules": [
{
"Name": "CommonUtility",
"Type": "Runtime",
"LoadingPhase": "Default"
}
]
}
게임 빌드
- 게임 타겟 설정을 추가하면 게임 빌드 옵션이 추가
- 게임 타겟으로 빌드된 모듈은 정적 라이브러리로 실행 파일에 포함
- 게임이 실행되기 위해서는 실행 파일과 콘텐츠 에셋이 함께 있어야 함
- 빌드 : 실행 파일을 생성하기 위한 컴파일
- 쿠킹 : 지정한 플랫폼에 맞춰 콘텐츠 에셋을 변환하는 작업
- 패키징 : 이들을 모두 모아서 하나의 프로그램으로 만드는 작업
- 타겟 설정 추가
- Shipping 빌드가 배포할 최종 게임의 코드를 만드는 작업