본문 바로가기
공부/Unreal Engine 5

[언리얼5] 언리얼 C++ 실행 단계 요약정리

by MY블로그 2024. 5. 29.

C++ 언어를 사용하여 언리얼엔진으로 게임을 개발하고 실행하는 과정을 요약 정리 합니다.

 

1. 개발 단계

개발단계는 코드를 작성하는 단계 입니다.

클래스를 생성하고 언리얼의 매크로를 사용하여 블루프린트와 연동 및 상호작용을 실행합니다.


클래스 생성?

개발자는 언리얼 엔진의 API를 사용하여 다양한 클래스를 생성하게 됩니다.
예를 들어, 캐릭터, 게임모드, HUD, 플레이어 컨트롤러 등의 클래스를 생성 합니다.

ACharacter : 캐릭터(플레이어)를 정의 하는 클래스.

AGameModeBase : 게임의 규칙과 흐름을 관리하는 클래스.

APlayerController : 플레이어의 입력(조작)을 처리하는 클래스.

 

언리얼 매크로?

언리얼 엔진은 매크로(예.UCLASS(), UPROPERTY(), UFUNCTION())를 사용하여 런타임중 클래스와 속성을 엔진에 등록하게 됩니다. 해당 기능을 리플렉션 시스템이라 합니다.

블루프린트와 코드의 상호작용(연동)?

C++ 클래스의 기능을 블루프린트에서 사용할 수 있도록 하는것입니다.

이를 통하여 디자이너가 시각적으로 게임의 로직을 구성할 수 있습니다.
아래의 방식을 통하여 코드의 기능을 블루프린트에 노출 시키게 됩니다.

 

아래의 예제는 특정함수를 블루프린트에서 호출할 수 있도록 지정(BlueprintNativeEvent)하며 BluePrintEvent 카테고리로 분류하고 있습니다.

이후 언리얼 엔진의 블루프린트(BP)에서 해당 함수를 호출 하여 코드와 연동되는 모습 입니다.

이처럼 블루프린트에서 C++ 클래스를 상속받아 기능을 연동 및 확장이 가능합니다.

2. 컴파일 단계

컴파일 단계는 코드 컴파일과 언리얼 헤더 툴(UHT)를 실행 합니다.

코드의 컴파일

컴파일러 호출은 VisualStudio(VS), Xcode 와 같은 IDE를 통하여 작성된 코드를 컴파일 합니다.

IDE의 사용은 운영체제에 따라 주로 나뉘게 됩니다.
Windows OS : Visual Studio

Mac OS : Xcode

좌 : VisualStudio2022 / 우 : Xcode

UnrealBuildTool(UBT)

언리얼 엔진은 UnrealBuildTool(UBT)을 사용하여 빌드 프로세스를 관리 합니다.
UBT는 프로젝트의 설정에 따라 컴파일러를 호출하고, 필요한 파일만을 컴파일 합니다.

UnrealHeaderTool(UHT)

UHT는 UCLASS, UPROPERTY, UFUNCTION 등의 매크로가 포함된 헤더 파일을 분석하여 메타데이터를 생성합니다.
메타데이터는 런타임에 리플렉션 시스템과 블루프린트 시스템에서 사용됩니다.

 

3. 링크 단계

링킹은 오브젝트 파일생성, 링커 호출, 엔진 모듈이 있습니다.

오브젝트 파일 생성

컴파일된 코드가 오브젝트 파일(.obj 또는 .o)로 변환 됩니다.

링커 호출

링크 단계에서 오브젝트 파일과 엔진 라이브러리를 결합하여 실행 파일(.exe)를 생성합니다.

엔진 모듈

언리얼 엔진의 다양한 모듈(렌더링, 물리, 오디오 등)이 포합됩니다.

 

4. 실행 단계

게임 실행

생성된 실행 파일을 통하여 게임이 시작 됩니다.
이때 언리얼 엔진은 초기화 과정을 통하여 렌더링, 물리, 오디오, 시스템등을 설정하고 필요한 리소스를 로드합니다.

 

게임 업데이트

이후 게임은 지속적으로 업데이트(루프)됩니다. 업데이트(루프)는 다음 단계들을 포함하고 있습니다.

입력 처리 : 플레이어의 입력(키보드, 마우스 등)을 처리 합니다.
게임 로직 처리 : 캐릭터의 이동, AI, 게임의 상태(Game State)등의 변경을 업데이트 합니다.
물리 연산 처리 : 물리 엔진을 사용한 충돌, 중력등의 물리적인 연산을 처리합니다.
출력 처리 : 화면에 그래픽을 그리는 렌더링을 처리 합니다.

 

5. 렌더링 단계

게임의 상태를 매프레임 업데이트하며 게임 월드를 렌더링 합니다.
게임의 상태는 Tick함수를 통하여 매 프레임 마다 업데이트(호출)합니다.

void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    // 게임 로직 업데이트
}

게임의 월드 렌더링은 씬 그래프를 통하여 게임 월드의 객체들을 관리하고 렌더링 순서를 결정 합니다.
이후 드로우 콜을 통하여 GPU에 그래픽 명령을 보내어 화면에 객체를 그리게됩니다.

댓글