info8995 님의 블로그

TIL: 언리얼 엔진 C++로 엘리베이터 객체 구현 본문

TIL(Today I Learned)/Unreal Engine

TIL: 언리얼 엔진 C++로 엘리베이터 객체 구현

info8995 2025. 2. 6. 19:25

0

TIL: 언리얼 엔진 C++로 엘리베이터 객체 구현

이번에는 언리얼 엔진에서 엘리베이터 객체를 C++로 구현하는 방법에 대해 정리했다. 이 객체는 플레이어가 타고 있는 엘리베이터가 위아래로 움직이는 간단한 예제다. 주요 구현 요소는 AActor를 상속받은 클래스인 AElevator에 포함되어 있다.

1. 클래스 구조

  • 헤더 파일 (Elevator.h):
    • SceneRoot: 엘리베이터의 루트 컴포넌트.
    • StaticMeshComp: 엘리베이터의 외형을 나타내는 정적 메시 컴포넌트.
    • MoveSpeed: 엘리베이터의 이동 속도.
    • StartLocation: 엘리베이터의 시작 위치.
    • bMovingUp: 엘리베이터가 위로 이동 중인지, 아래로 이동 중인지 여부를 결정하는 변수.
    • BeginPlay(), Tick(): 게임 시작과 매 프레임마다 호출되는 함수.
  • C++ 파일 (Elevator.cpp):
    • CreateDefaultSubobject: 객체를 생성하여 컴포넌트를 초기화한다.
    • ConstructorHelpers::FObjectFinder: 정적 메시와 재질을 불러오는 데 사용.
    • Tick(): 매 프레임마다 엘리베이터의 위치를 변경하는 로직.
    • SetActorLocation(): 엘리베이터의 위치를 설정한다.

2. 주요 동작

  • 엘리베이터 이동:
    • Tick() 함수에서는 bMovingUp 플래그에 따라 엘리베이터의 위치를 위 또는 아래로 변경한다.
    • 최대 높이(MaxZ)에 도달하면 방향을 반대로 바꾸고, 최소 높이(MinZ)에 도달하면 다시 위로 움직인다.
  • 정적 메시와 재질 설정:
    • StaticMeshComp와 MaterialAsset을 사용하여 엘리베이터의 외형과 재질을 설정한다.

3. 코드 분석

  • 컴포넌트 생성 및 초기화:
    • StaticMeshComp는 SceneRoot에 첨부되어 있다.
    • ConstructorHelpers::FObjectFinder를 사용하여 메시와 재질을 찾아서 적용한다.
  • 움직임 제어:
    • MoveSpeed 변수와 DeltaTime을 이용하여 엘리베이터의 속도와 이동을 제어한다.
  • 게임 시작 시 초기화:
    • BeginPlay()에서 필요한 초기화가 이루어진다.

4. UPROPERTY 설명

UPROPERTY는 Unreal Engine의 객체를 관리하는 특성(속성)을 정의하는 데 사용되는 매크로로, 객체의 속성에 대한 여러 가지 설정을 제어한다. 코드에서 사용된 주요 UPROPERTY는 다음과 같다:

  • UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Item|Components"):
    • VisibleAnywhere: 에디터에서 언제나 해당 컴포넌트가 보이도록 설정.
    • BlueprintReadOnly: 블루프린트에서 읽기만 할 수 있는 속성.
    • Category = "Item|Components": 에디터에서 속성이 컴포넌트 관련 항목으로 분류된다.
  • UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item|Properties"):
    • EditAnywhere: 에디터에서 속성을 수정할 수 있게 설정.
    • BlueprintReadWrite: 블루프린트에서 속성을 읽고 쓸 수 있게 설정.
    • Category = "Item|Properties": 속성이 프로퍼티 관련 항목으로 분류된다.

이 UPROPERTY 매크로는 컴포넌트나 변수의 접근성을 정의하고, 언리얼 엔진의 에디터와 블루프린트에서의 사용 방식을 제어한다.

 

5. 최종 정리

  • 배운 점:
    • Tick()을 사용하여 매 프레임마다 위치를 변경하는 로직을 작성하는 법.
    • UPROPERTY를 활용하여 컴포넌트와 변수의 접근성을 제어하는 방법.
    • SetActorLocation()을 사용해 엘리베이터의 위치를 부드럽게 이동시키는 법.
    • bMovingUp 플래그로 엘리베이터의 방향을 제어하는 로직 구현.