언리얼 엔진에는 핫 리로딩이라는 기능이 있다.
주로 언리얼 엔진 C++ 프로젝트를 생성했을 때 IDE, 즉 비주얼 스튜디오,
또는 Rider와 언리얼 엔진 4,5가 동시에 열린 모습을 봤을 것인데, 이번에는 스크립트를 수정하며
코드를 컴파일 해서 변화를 한번 살펴보려고 한다.
나 같은 경우에는 언리얼 엔진 5.4.3 버전을 사용하고 있고,
깃허브 소스코드를 통해 Fork를 하여 개인 레포지토리에서 클론하여 설치하고 사용중이다.
깃허브 소스코드 설치 방법은 추후 다시 다루겠다.
일단 클래스를 생성을 먼저 해야하므로 언리얼 엔진 에디터에서 C++ 클래스를 생성해준다.
나는 현재 개발중인 프로젝트에서 따로 컴포넌트를 통해 분리할 플레이어 이동 기능을 구현하기 위해서,
ActorComponent 클래스를 사용하여 클래스를 만들어 주었다.
참고로 ActorComponent는 언리얼 엔진의 Actor클래스로 부터 파생되었으며,
때문에 클래스명 앞에 'A'라는 접두사가 하나 더 붙게 되어 나같은 경우
'AC_PlayerMovementComponent'라는 이름으로 클래스가 생성된다.
(*물론 클래스 파일 명은 접두사가 빠진 C_PlayerMovement이다.)
따로 다루겠지만, ActorComponent 같은 경우 월드 내의 배치되어있는 액터에 첨가 할 수 있는 오브젝트 클래스이다.
그 아래, 즉 ActorComponent 자식 클래스로는 PrimitiveComponent라는 렌더링 충돌이 가능한 컴포넌트 클래스도 있다.
해당 클래스 생성 버튼을 클릭하면 엔진에서 자동으로 컴파일을 하여
클래스를 생성해 Visual Studio나, Rider 같은 IDE 창을 바로 열어주는데, 이 기능 자체가 바로 핫리로딩이다.
핫 리로딩으로 성공적으로 클래스가 생성 되었으면, 이렇게 해당 클래스의 헤더와 소스정의(CPP)부분이
사용하고 있는 IDE에 뜨게 된다.
나 같은 경우는 Visual studio 2022 LTSC 17.8 버전을 설치하고
이후 Rider 2024.1.4버전을 사용하여 스크립트를 작업하고 있다.
테스트로 작업할 것이므로 딱히 별것 없이 다음과 같은 이동제어 관련 코드를 추가해주었다.
이후 Player 쪽 클래스에 해당 클래스를 사용할 수 있도록
헤더쪽과 Cpp 정의 쪽에 다음과 같이 코드를 추가해주었다.
1. PlayerCharacter.h : 아래 코드 추가(해당 클래스의 주소 복사본)
private:
UPROPERTY(VisibleAnywhere)
class UC_PlayerMovementComponent* Movement;
2. PlayerCharacter.cpp : 생성자 함수부분
CHelpers::CreateActorComponent<UC_PlayerMovementComponent>(this, &Movement, "Movement");
참고로 CHelpers는 반복적으로 등장하는 코드 부분을 줄여서 효율적으로 사용하기 위해서 만들었다.
(*정확히는 학원에서 배웠다..ㅋㅋ;;)
CHelpers에서의 CreateActorComponent 함수는 아래와 같이 구성 되어있다.
2-1. CHelpers::CreateActorComponent() : 정의 부분
template<typename T>
static void CreateActorComponent(AActor* InActor, T** OutComponent, FName InName)
{
*OutComponent = InActor->CreateDefaultSubobject<T>(InName);
}
2-2. PlayerCharacter.cpp : BeginPlay 함수부분
void APlayerCharacter::BeginPlay()
{
Super::BeginPlay();
Movement->OnRun();
Movement->DisableControlRotation();
}
2-3. PlayerCharacter.cpp : SetupPlayerInputComponent 함수부분
void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
//--------------------------------KeyBoard----------------------------------------
// Bind jump events
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
PlayerInputComponent->BindAxis("MoveForward", Movement, &UC_PlayerMovementComponent::OnMoveForward);
PlayerInputComponent->BindAxis("MoveRight", Movement, &UC_PlayerMovementComponent::OnMoveRight);
PlayerInputComponent->BindAxis("VerticalLook", Movement, &UC_PlayerMovementComponent::OnVerticalLook);
PlayerInputComponent->BindAxis("HorizontalLook", Movement, &UC_PlayerMovementComponent::OnHorizontalLook);
PlayerInputComponent->BindAction("Sprint", EInputEvent::IE_Pressed, Movement, &UC_PlayerMovementComponent::OnSprint);
PlayerInputComponent->BindAction("Sprint", EInputEvent::IE_Released, Movement, &UC_PlayerMovementComponent::OnRun);
//--------------------------------KeyBoard----------------------------------------
}
이후 엔진 쪽에서의 C++ 컴파일 버튼을 눌러준다.
참고로 언리얼 5에서는 이게 핫 리로딩 컴파일 버튼이다....
(언리얼 4에 비해서 왜 이렇게 작아졌는지는 모르겠지만.)
핫 리로딩을 이용한 컴파일이 완료 되면 띠링하는 효과음과 함께
왼쪽하단에서 이렇게 컴파일이 완료 되었다는 팝업이 등장한다.
여기까지 언리얼 엔진 5의 핫리로딩 컴파일에 대해서 알아봤다.
'Game DevTip > Unreal Engine' 카테고리의 다른 글
4. 언리얼 엔진 팀플 시 소스 컨트롤 관리법 : Git & SVN(1) (0) | 2024.12.09 |
---|---|
3. 언리얼 엔진 싱글케스트 델리게이트 기초 (0) | 2024.12.05 |
2. 언리얼 엔진의 메모리 관리에 대해서 (0) | 2024.12.05 |
macOS 15.1에서 언리얼 엔진 구버전 돌리는 법(4.XX~5.4까지 모두 포함) (1) | 2024.11.22 |
맥북에어 M2에서 언리얼 엔진 5를 가볍게 돌리는 법 (0) | 2024.06.22 |
댓글