언리얼 빌드 시스템

myeongrangcoding·2023년 12월 2일

언리얼 에디터 프로젝트 구성

언리얼 에디터 구성

  • 언리얼 엔진의 구성
    • 에디터: 게임 제작을 위해 제공되는 응용 프로그램(언리얼 엔진)
    • 게임 빌드: EXE 파일과 리소스로 이루어진 독립적으로 동작하는 게임 클라이언트
  • 언리얼 에디터의 특징
    • 게임 개발 작업을 위해 다양한 폴더와 파일 이름 규칙이 미리 설정되어 있다.
    • 정해진 규칙을 잘 파악하고 프로젝트 폴더와 파일을 설정해야 함.
  • 에디터에서 기획과 개발을 완료한 후, 게임 빌드를 통해 최종 게임 빌드를 제작하도록 설정

언리얼 에디터의 동작

  • 프로젝트 폴더의 uproject 확장자를 더블클릭하면 에디터가 트리거 됨.
  • UnrealVersionSelector 프로그램으로 프로젝트 정보가 넘겨지고, UnrealVersionSelector는 런처가 저장한 에디터 정보로부터 버전에 맞는 에디터를 실행함

에디터 버전 정보의 파악

  • 프로젝트.uproject 텍스트 파일에 정해져있음.(명세서 역할을 함)
  • JSON 형식.
{
	"FileVersion":3,
    "EngineAssociation":"5.3"
}
  • 파일에 기록된 버전 정보를 바탕으로 에픽 런처가 지정한 정보를 찾아 에디터를 실행함.

블루프린트 프로젝트

  • C++ 코드가 없는 언리얼 프로젝트.
  • 언리얼 엔진이 제공하는 기본 기능을 활용해 게임을 제작하는 프로젝트
  • 게임 제작에 필요한 기능을 모듈이라는 단위로 제공하고 있음.
  • 언리얼 엔진의 모듈을 상속받아 블루프린트를 활용해 모든 기능과 로직을 구현

언리얼 C++ 프로젝트

  • 개발자 C++ 모듈
  • 언리얼 엔진 모듈과 개발자 모듈을 함께 사용하는 프로젝트

언리얼 C++ 모듈

  • 언리얼 엔진의 소스코드는 모두 모듈 단위로 구성되어 있음.
  • 모듈 단위로 구성된 C++ 소스 코드를 컴파일
    • 에디터 용으로 DLL 동적 라이브러리
    • 게임 용으로는 정적 라이브러리
  • 에디터 용 모듈은 UnrealEditor-{모듈이름}.DLL 이름 규칙.
  • 우리가 제작한 C++ 모듈을 추가해 에디터를 띄우고 싶은 경우, 만든 에디터 모듈(DLL 동적라이브러리)을 빌드 폴더에 넣어주어야 함.
    • Binaries/Win64
    • 빌드된 모듈 목록이 있는 UnrealEditor.modules 파일도 같은 폴더에 넣어줌
    • uproject 명세서에 모듈 이름을 지정

모듈 C++ 코드의 관리

  • 언리얼 프로젝트가 소스 코드를 관리하는 규칙에 따라 소스 코드 구조를 구성해야 함.
  • Source 폴더에 지정된 규칙대로 소스를 넣으면 플랫폼에 맞춰서(윈도우즈, 맥, 리눅스) 알아서 컴파일을 진행
    • 실제 빌드를 진행하는 주체: Unreal Build Tool(C# 프로그램)
    • C#이 가진 유연한 기능(compile on-the-fly)을 활용해 런타임에 cs 파일을 읽어 빌드 환경을 구축하고 컴파일을 진행함

Source 폴더의 구조

  • Source 폴더
    • 타겟 설정 파일: 전체 솔루션이 다룰 빌드 대상 지정.
      • {프로젝트이름}.Target.cs: 게임 빌드 설정
      • {프로젝트이름}.Editor.Target.cs: 에디터 빌드 설정
    • 모듈 폴더: 모듈을 빌드하기 위한 C++ 프로젝트 설정 정보, 모듈 설정 파일, 소스 코드 파일(.h 및 .cpp 파일들)
      • {모듈이름}.Build.cs: 모듈을 빌드하기 위한 환경 설정

내가 만든 소스가 게임 프로젝트의 C++ 모듈이 되기 위해 필요한 것

  • 모듈 이름으로 된 헤더와 소스 파일을 지정.
  • 이 헤더와 cpp 파일에 모듈의 뼈대를 제작해주는 매크로를 지정
    • IMPLEMENT_MODULE: 일반 모듈
    • IMPLEMENT_GAME_MODULE: 게임 모듈
    • IMPLEMENT_PRIMARY_GAME_MODULE: 주 게임 모듈(일반적)
  • 기본적인 세팅을 갖춘 후에는 uproject 파일을 우클릭해서 Generate Visual Studio project files. 메뉴를 선택해 주면 알아서 Intermediate 폴더에 프로젝트 관련 파일이 자동으로 생성됨.
  • Source 폴더를 규칙에 맞게 구성하면 Intermediate 폴더는 언제든지 재생성 가능함

모듈간의 종속 관계

  • 모듈 사이에 종속 관계를 설정해 다양한 기능을 구현할 수 있다.

새로운 모듈의 추가

  • 하나의 모듈에 너무 많은 코드가 들어가면 언리얼 엔진은 빌드 방식을 변경하기에 프로젝트가 커질 수록 모듈을 나누어서 관리하는 것이 유리.

모듈의 공개와 참조

  • 모듈 내 소스를 필요한 만큼만 공개해야 모듈 간 의존성을 줄이고 컴파일 타임을 최소화 할 수 있음.
  • 공개할 파일은 Public 폴더로, 숨길 파일은 Private 폴더로
  • 외부로 공개할 클래스 선언에는 {모듈이름}_DLL 매크로를 붙일 것.
    • 예) ENGINE_DLL
  • 게임 모듈에서는 Build.cs 설정을 통해 참조할 모듈을 지정할 수 있음.

플러그인 시스템

  • 플러그인: 다수의 모듈과 게임 콘텐츠를 포함하는 포장 단위
  • 플러그인 구조
    • 플러그인 명세서(uplugin 파일)
    • 플로그인 리소스(Resource 폴더, 에디터 메뉴용 아이콘)
    • 콘텐츠
    • 모듈 폴더

게임 빌드

  • 게임 타겟으로 빌드된 모듈은 정적 라이브러리로 실행 파일에 포함됨.
  • 게임이 실행되기 위해서는 실행 파일과 콘텐츠 애셋이 함께 있어야 함.
  • 빌드: 실행 파일을 생성하기 위한 컴파일
  • 쿠킹: 플랫폼에 맞춰 콘텐츠 애셋을 변환하는 작업
  • 패키징: 이들을 모두 모아서 하나의 프로그램으로 만드는 작업
profile
명랑코딩!

0개의 댓글