메모내용

폴더구조

Config
Content
Binary
Intermediate
Plugins
Source
Saved
ProjectName.sln
ProjectName.uproject

*.uproject

모듈명.uproject 파일에는 어떤 모듈을 함께 로딩할것인지?
사용하려는 엔진 버젼은 어떤것인지? 등이 JSON 형식으로 작성되어 있다.

Config

게임 프로젝트의 설정 값을 보관하는 공간이다. 이 폴더를 제거하면 게임 프로젝트의 중요한 설정 정보가 날아가므로 항상 보관해야 한다.

Content

프로젝트의 리소스를 모아놓은 폴더.
게임 프로젝트에 사용하는 에셋을 관리하는 공간이다. 항상 보관해야 한다.

*.sln

C++ 프로젝트를 관리하기 위한 비주얼 스튜디오의 솔루션 파일.
언리얼 빌드툴 이 생성한다
솔루션이 관리하는 각 프로젝트 파일은 Intermediate 폴더 내 ProjectFiles 폴더에 있다.
프로젝트 파일과 솔루션 파일은 삭제하더라도 uproject 파일을 우클릭해 뜨는
Generate Visual Studio project file 메뉴를 선택하면 언제든지 재생성 할 수 있다.


# 프로젝트 빌드

Unreal Engine 프로젝트는 크게 두가지로 나눌 수 있다.

VisualStudio 에서의 빌드

  • 소스코드를 빌드하는것 ( 리소스 없이 )
  • 빌드의 결과는 dll 또는 exe 파일이다.

빌드 설정모드 에 따라, 빌드시 dll 또는 exe 파일로 출력된다.

  • 모듈명.dll
    • Editor ( Development Editor || DebugGame Editor ) 설정시
      Binary 폴더에 {모듈명}.dll 파일이 생성됩니다. ( 모듈파일 )
    • dll 파일은 해당 프로젝트에서 사용하기 위해
      비주얼 스튜디오에서 작성한 모든 소스코드를 컴파일한 하나의 결과물(모듈) 이다.
      그리고 언리얼 엔진 에디터를 실행시에,
      이 모듈을 검색하여 탑재한후 실행된다.
    • 디버깅 모드에서 Development Editor 는 최적화 되어 있기 때문에 상세한 내용까지는 추적이 불가능하지만 DebugGame Editor 는 상새한 내용까지 추적이 가능하다. 예를들어 FString 의 내부 변수를 보고자 한다면, Development Editor 에서는 최적화 되어 내부 내용을 볼 수 없지만 DebugGame Editor 에서는 볼 수 있다.
  • 모듈명.exe
    • Game ( Debug Game || Development || Shipping ) 설정시
      Binary 폴더에 모듈명.exe 파일을 생성합니다 ( 실행파일 )
    • 이는 리소스가 없는 단순 실행파일 입니다.

UnrealEnging Editor 에서의 빌드

  • 패키지 파일 ( 리소스 + 실행파일)
  • 게임으로서 실행될 수 있는 파일

Plugins

프로젝트에 사용되는 플러그인들을 저장하는 공간

참조

플러그인 제작

...

플러그인내부 함수 호출하는 방법

c++ 이 컴파일된 결과물을 모듈이라고 한다. 언리얼 엔진에서 제공하는 Engine 소스도 모듈로서 존재하고 우리가 만든 프로젝트의 c++ 소스파일도 결국 우리 프로젝트 이름의 모듈로서 출력된다. 플러그인 또한 하나의 모듈이며, 만약 우리 프로젝트 모듈에서 언리얼엔진에서 제공하는 모듈 또는 플러그인 모듈내부 클래스나 함수를 사용하기 위해서는 우리 프로젝트의 모듈에서 다른 모듈을 사용하도록 설정해주면 된다. 우선 사용하고자 하는 모듈 내부에서, 다른 모듈에서 클래스를 참조할수 있도록 설정해주어야 하며 그것은 클래스 선언시, 클래스명 앞에 모듈명_API 매크로를 붙여주는 것이다. 이 매크로를 붙여주어야 다른 모듈에서 해당 클래스를 참조할 수 있는것이다.

                            
                                UCLASS()
                                class 모듈명_API ModuleClassName{

                                    GENERATED_BODY()

                                public:
                                    ...

                                }
                            
                        

우리 프로젝트 모듈에서 다른 모듈을 불러오려면
{프로젝트명}.builld.cs 의 내부에서 사용하려는 모듈명을 추가해주어야 한다.

{projectName}.build.cs 의 내용

                            
                                // Fill out your copyright notice in the Description page of Project Settings.
 
                                using UnrealBuildTool;
                                 
                                public class Characters : ModuleRules
                                {
                                    public Characters(ReadOnlyTargetRules Target) : base(Target)
                                    {
                                        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
                                 
                                        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine" , /* 이곳에 추가하고자 하는 모듈명을 적어준다 */});
                                 
                                        PrivateDependencyModuleNames.AddRange(new string[] { });
                                 
                                        // Uncomment if you are using Slate UI
                                        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
                                 
                                        // Uncomment if you are using online features
                                        // PrivateDependencyModuleNames.Add("OnlineSubsystem");
                                 
                                        // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
                                    }
                                }
                                 
                            
                        

Source

C++ 코드가 위치한 공간.
C++ 코드 이외에도 언리얼 엔진의 독특한 빌드설정을 담은 C# 소스 파일이 있다.

모듈

Source 폴더 내부 소스코드는 컴파일 되어 Binary 폴더 안에 {언리얼버전}-{모듈명}.dll 으로 출력됩니다.

언리얼오브젝트

Unreal Object 참조

간혹 다른 프로젝트에서 소스파일을 가져올때

다른 프로젝트의 소스파일을 활용하고 싶을때 해당 프로젝트의 Source 폴더에 붙여넣기 한다면 사용이 가능합니다. 이때 몇가지 수정이 필요합니다. Source 폴더에 소스코드 파일을 붙여넣었다면 에디터 내부에서 Tools.Refresh Visual Studio #### Project 버튼을 눌러 폴터 내부에 들어있는 소스파일을 분석해서 내부 구성을 변경해 줍니다.

또한 소스폴더 내부에서 MODULENAME_API 를 해당 프로젝트의 MODULENAME_API 로 변경해줍니다.

Binary

C++ 코드가 컴파일 된 결과물(.dll) 을 저장하는 공간. 삭제해도 새로 생성된다

폴더 내부

UE5Editor-{모듈명}.dll
내부에는 dll 파일이 있는데, 이는 Source 폴더내 C++ 코드를 컴파일한 결과물을 모듈이라고 하며 이 모듈이 dll 형태로 출력된 것이다.

c++ 프로젝트의 동작

핫리로드

  • 언리얼 클래스가 DLL 로 관리된다. 핫리로드는 소스코드를 수정 후 런타임에서 동작하고 있는 엔진에 바로 로드하는 기능이다.
  • 이 기능을 사용하는 것으로 코드에서 수정된 로직을 바로 테스트해볼 수 있다.
  • 엔진과 비주얼 스튜디오가 모두 켜져있는 상태에서 비주얼 스튜디오에서 빌드 완료하면 "핫 리로드 완료!" 라는 창이 뜬다. 비주얼 스튜디오 대신 엔진에서 컴파일 버튼을 눌러서 빌드를 해도 된다.
  • 때때로 핫 리로드 보다는 Visual Studio 에서 빌드 해야할 때가 있다. 핫리로드를 했을 때 생성자에서 수정한 내용은 적용되지 않는다. CDO 때문인데, 그래서 엔진을 끄고 코딩을 한 다음 빌드를 해서 엔진을 켜는 것을 때때로 해주어야 한다.
  • 언리얼 에디터의 실행중에 에디터가 사용하고 있는 모듈을 컴파일하면 언리얼 에디터에는 이를 감지해 기존의 모듈을 내리고 신규 모듈로 바꾸는 작업을 수행한다. 이러한 언리얼 엔진의 동작방식을 핫 리로드(HotReload)라고 한다. 모듈을 컴파일할 때마다 만들어지는 새로운 모듈을 덮어쓰지 않고 기존 모듈의 이름 뒤에 숫자를 붙인 새로운 파일로 생성된다. 언리얼 에디터를 완전히 종료하고 컴파일을 수행하면 생성된 임시 모듈들은 자동으로 제거된다
  • 핫리로드 방식으로 컴파일을 진행하면 이미 레벨에 배치된 액터의 속성 값은 컴파일로 변경된 값이 아닌 코드의 값을 그대로 유지한다. 핫리로드 기능은 안정적으로 사용하기에 아직 몇가지 불안한 예외 상황들이 존재한다. 언리얼 오브젝트의 기본값을 변경하는 경우 가급적 에디터를 종료하고 다시 시작하는 것을 권장한다.
  • Intermediate

    프로젝트 관리에 필요한 임시 파일들을 저장하는 공간이다. 이 폴더는 제거해도 에디터에 의해 자동으로 재생성 된다.

    • 언리얼 헤더툴 ( UHT ) 이 생성하는 코드는 Source 폴더가 아닌 Intermediate 폴더에 저장된다.
      - {클래스명}.generated.h / {클래스명}.generated.cpp 파일이 저장되며 ,
      이것은 UPROPERTY 등의 매크로를 분석한 결과로,
      이를 사용해 언리얼 오브젝트를 관리하고
      에디터가 인터페이스에서 해당값을 편집할 수 있게 인터페이스를 제공한다.

    • 언리얼 빌드툴 ( UBT ) 이 파일을 생성한다
      - 현재 게임프로젝트의 폴더 구조와 파일을 분석해
      비주얼 스튜디오 .sln 과
      비주얼 스튜디오 .uproject 을 생성하는 기능을 가지고 있다.
      - 언리얼 빌드 툴 은 C++ 게임 프로젝트들의 소스들이 모여있는 Source 폴더를 분석하면서 비주얼 스튜디오 솔루션 파일을 게임프로젝트 폴더에 생성하고,
      솔루션 파일에서 참조할 프로젝트 파일은 Intermediate/ProjectFiles 폴더에 생상한다.

    Saved

    에디터 작업중에 생성된 결과물을 저장하는 공간이다.
    예를 들어 세이브 파일, 스크린샷은 모두 이곳에 저장된다.
    이 폴더를 제거하면 수동으로 저장한 세이브 파일이나 스크린샷 등이 삭제될 수 있지만 게임 프로젝트에는 영향을 주지 않는다.